进程与线程
来源:互联网 发布:分水岭算法流程图 编辑:程序博客网 时间:2024/06/05 19:51
情景分析:第5章
- 概述
CreateProcessA为用户空间DLL函数,相对高层,通过系统调用NtCreateProcess创建进程,成功后立即调用NtCreateThread
进程相关的数据结构
内核空间中:
EPROCESS 位于执行体中. Windows把内核的上层称为Executive,下层成为核心层
KPORCESS 位于核心层
W32PROCESS 位于用户空间Windows子系统.
用户空间:
PEB
typedef struct _EPEOCESS
{
KPROCESS Pcb; //本进程的KPROCESS结构
PHANDLE_TABLE objectTable; //本进程句柄表
PVOID *Win32Process; //指向本进程W32PROCESS结构
CHAR ImageFileName[16]; //所执行程序映射的文件名
LIST_ENTRY ThreadListHead; //本进程的线程队列
struct _PEB* Peb; //指向用户空间的PEB
UCHAR PriorityClass; //本进程的优先级类别
MM_AVL_TABLE VadRoot; //用户空间的数据结构
}
typedef struct KPROCESS
{
DISPATCHER_HEADER Header; //使进程成为"可等待"对象
LARGE_INTEGER DirectoryTableBase; //页面映射表的物理地址
LIST_ENTRY ReadyListHead; //就绪线程队列
LIST_ENTRY ThreadListHead; //本进程的线程队列
}
typedef struct _PEB
{
PVOID ImageBaseAddress //程序映射的起点
struct _RTL_USER_PROCESS_PARAMETERS *ProcessParameters; //参数块
PVOID TlsBitmap; //TLS位图
PVOID* KernelCallbackTable; //用于内核回调用户空间函数.
}
线程相关数据结构
typedef struct _ETHREAD
{
KTHREAD Tcb; //本线程的KRHREAD结构
CLIENT_ID Cid; //本线程的CID
}
typedef struct KTHREAD
{
DISPATCHER_HEADER Header; //使线程成为"可等待"对象
PVOID KernelStack; //系统空间堆栈.
union
{
KAPC_STATE ApcState; //当前APC状态
}
struct _TEB *Teb; //用户空间的线程环境块
PKTPAR_FRAME TrapFrame; //系统空间堆栈上的自陷框架
struct _KPROCESS *Process; //所属进程的KPROCESS结构
PVOID Win32Thread; //本线程的W32THREAD结构
LIST_ENTRY ThreadListEntry; //挂入KPROCESS中的线程队列
}
typedef struct _TEB
{
NT_TIB Tib;
struct _PEB *ProcessEnvironmentBlock;
struct _W32THREAD* Win32ThreadInfo;
}
typedef struct _NT_TIB
{
struct _EXCEPTION_REGISTRATION_RECORD *ExceptionList;
}
- 进程与线程线程
- 进程与线程
- 进程与线程
- 进程与线程
- 进程与线程
- 进程与线程
- 进程与线程
- 进程与线程
- 进程与线程
- 进程与线程
- 进程与线程
- 进程与线程
- 线程与进程
- 线程与进程
- 进程与线程
- 进程与线程
- 线程与进程
- 进程与线程
- hdu1069Monkey and Banana
- MyEclipse8.5用自带Tomcat6.0通过JTDS驱动配置SQL2000连接池详细分析
- 报到
- jsp开发环境配置整理
- java web 开发初学v_2010_8_21之javascrpt(4)
- 进程与线程
- being illustrious
- 报表与页面一起传递参数给报表
- 机房收费系统--系统用户管理模块和主窗体的创建(一)
- HDU 1087(DP)
- EditPlus 使用技巧集萃
- hdu2955robberies一维数组
- KScope ubuntu ./configure 错误
- win7隐藏分区