进程与线程

来源:互联网 发布:分水岭算法流程图 编辑:程序博客网 时间:2024/06/05 19:51

情景分析:第5章

  1. 概述
    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;
}