进程基本结构说明
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ExitStatus;
//颜色链页框号号码,通过“颜色” (空闲或置零列表上的页面在处理器内存高速缓存 //中的位置)的字段链接物理页面 USHORT NextPageColor; //子系统版本号信息 union { struct { UCHAR SubSystemMinorVersion; UCHAR SubSystemMajorVersion; }; USHORT SubSystemVersion; }; UCHAR PriorityClass; MM_AVL_TABLE VadRoot; ULONG Cookie; }EPROCESS, *PEPROCESS; //进程所属的优先级类 //VAD( Virtual Address Descriptor ) //Cookie
EX_FAST_REF Token; PFN_NUMBER WorkingSetPage;
KGUARDED_MUTEX AddressCreationLock; //Address creation lock. ULONG_PTR Hardware Trigger; //? 硬件触发器
//Describes the status of the portions of the address space that exist in the process. PMM_AVL_TABLE PhysicalVadRoot; PVOID CloneRoot; //Used in process forking
PVOID LdtInformation; PVOID VadFreeHint; PVOID VdmObjects;
PVOID DeviceMap; //Address of object directory to resolve device name references PVOID Spare0[3]; //保留字节
2、 _KPROCESS 结构
typedef struct _KPROCESS {
Ke.h (\base\ntos\inc) //Pcb 块的结构
;944
DISPA TCHER_HEADER Header; //调度程序头 LIST_ENTRY ProfileListHead; //双向链表,具体用途不明 ULONG_PTR DirectoryTableBase [2];//进程的页目录表基址 KGDTENTRY LdtDescriptor; KIDTENTRY Int21Descriptor; USHORT IopmOffset; UCHAR Iopl; //进程的 LDT 描述符 //进程的 Int21 中断 IDT 描述符, 保持与 DOS 兼容 //IO 操作起始地址 //IO 操作权限级
PFN_NUMBER NumberOfPrivatePages; //进程私有页面数量 PFN_NUMBER NumberOfLockedPages; //进程固定的页面数量 PVOID Win32Process; //WIN32 子系统进程 struct _EJOB *Job; PVOID SectionObject; PVOID SectionBaseAddress; //与进程相关的作业信息 //区域对象(文件映射对象) //载入地址空间的基址
//配额块,限制非页交换区、页交换区、文件的使用 PEPROCESS_QUOTA_BLOCK QuotaBlock; PPAGEFAULT_HISTORY WorkingSetWatch; //缺页历史记录
//Handle to the window station object that the process is associated with HANDLE HANDLE Win32WindowStation; InheritedFromUniqueProcessId; //父进程 PID //Local Directory Table 信息 //VAD 结构指针,用于插入 VAD 或移除时寻找空闲块 //虚拟 DOS 对象结构指针
ACCESS_MASK GrantedAccess ; NTSTA TUS LastThreadExitStatus;
ULONG DefaultHardErrorProcБайду номын сангаасssing;
PPEB Peb; //进程环境块, 存放在用户地址空间 EX_FAST_REF PrefetchTrace; //Pointer to the prefetch trace block. //Read, write and other operation and transfer count LARGE_INTEGER ReadOperationCount; LARGE_INTEGER WriteOperationCount; LARGE_INTEGER OtherOperationCount; LARGE_INTEGER ReadTransferCount; LARGE_INTEGER WriteTransferCount; LARGE_INTEGER OtherTransferCount; //当前页面大小加上可用物理内存的和,不包括非分页区的 RAM。 SIZE_T CommitChargeLimit; SIZE_T CommitChargePeak; //AWE(Address windowing extensions) 信息,AWE 能让应用程序访问到 4GB 的内存空间 PVOID AweInfo; //进程的安全验证信息,包括映像文件的完全路径 SE_AUDIT_PROCESS_CREA TION_INFO SeAuditProcessCreationInfo; MMSUPPORT Vm; //虚拟内存信息 LIST_ENTRY MmProcessLinks; //内存管理入口 ULONG ModifiedPageCount; //修改的页面数 0x00000001UL 0x00000002UL 0x00000004UL
#define KPROCESS_AUTO_ALIGNMENT_BIT #define KPROCESS_DISABLE_BOOST_BIT #define KPROCESS_DISABLE_QUANT UM_BIT 2 union { struct { LONG AutoAlignment : 1; LONG DisableBoost : 1; LONG DisableQuantum : 1; LONG ReservedFlags : 29; }; LONG ProcessFlags ; }; SCHAR BasePriority; //基本优先级 //时间片 //进程所处的状态 //线程种子 //电源状态 //首选处理器 //是否被访问 //堆栈引用计数 SCHAR QuantumReset; UCHAR State; UCHAR ThreadSeed; UCHAR PowerState; UCHAR IdealNode; BOOLEAN Visited; „„ ULONG_PTR StackCount;
Ps.h
(\base\ntos\inc\ )
;242 Process Block)
// 执行体进程块 (Executive //进程控制块,即 PCB 块 //进程锁 //进程创建的时间 //进程结束的时间
EX_RUNDOWN_REF RundownProtect; //? 裁减保护结构 HANDLE UniqueProcessId; ActiveProcessLinks; //PID 号,进程的唯一标识符 //系统中的全局进程列表
union { HARDWARE_PTE PageDirectoryPte; //进程页目录的硬件页表入口 ULONGLONG Filler; //填充字节 }; PVOID UCHAR Session; //会话空间结构指针 ImageFileName[ 16 ]; //进程运行的映像名称 JobLinks; //作业的进程列表入口 //? 被锁的页面列表指针
#define PS_JOB_STA TUS_NOT_REALLY_ACTIVE #define PS_JOB_STA TUS_ACCOUNTING_FOLDED #define PS_JOB_STA TUS_NEW_PROCESS_REPORTED
#define PS_JOB_STA TUS_EXIT_PROCESS_REPORTED 0x00000008UL #define PS_JOB_STA TUS_REPORT_COMMIT_CHANGES 0x00000010UL #define PS_JOB_STA TUS_LAST_REPORT_MEMORY 0x00000020UL #define PS_JOB_STA TUS_REPORT_PHYSICAL_PAGE_CHANGES 0x00000040UL ULONG JobStatus; „„ ULONG Flags; NTSTA TUS //作业状态 //进程标识符,如 PROCESS_EXITING、CREA T E_FAILED 等 //进程的退出状态
LIST_ENTRY /*++ Quota Fields.
typedef enum _PS_QUOTA_TYPE { PsNonPagedPool = 0, PsPagedPool = 1, PsPageFile PsQuotaTypes = 2, =3
} PS_QUOTA_TYPE, *PPS_QUOTA_T YPE; --*/ SIZE_T QuotaUsage[PsQuotaTypes ]; //? 配额使用量 SIZE_T QuotaPeak[PsQuotaTypes ]; //? 配额峰值 SIZE_T CommitCharge; SIZE_T SIZE_T //?
LIST_ENTRY ReadyListHead; SINGLE_LIST_ENTRY SwapListEntry; PVOID VdmTrapcHandler; LIST_ENTRY ThreadListHead; KSPIN_LOCK ProcessLock; KAFFINITY Affinity;
PeakVirtualSize; //进程的虚拟内存峰值 VirtualSize; //进程的虚拟内存内存大小 SessionProcessLinks; //进程会话列表 //调试端口 //异常端口 //对象句柄列表 //访问令牌 //工作集页面
LIST_ENTRY
PVOID DebugPort; PVOID ExceptionPort; PHANDLE_TABLE ObjectTable;
volatile KAFFINITY ActiveProcessors; //系统中活动的处理器数目 ULONG ULONG KernelTime; UserTime; //在内核模式运行的时间和 //在用户态运行的时间和 //就绪态进程队列链表 //交换态队列链表 //VDM 陷阱处理程序 //该进程所拥有的线程列表 //进程锁 //默认亲和处理器集合
LIST_ENTRY
PVOID LockedPagesList; LIST_ENTRY
ThreadListHead; //进程中所有线程链表头
PVOID SecurityPort; PVOID PaeTop; ULONG ActiveThreads;
// Used by rdr/security for authentication. //PAE top level page directory //活跃线程数 //threads granted access //最后一个线程的退出状态 //默认硬件错误处理
进程基本结构说明
注:下面的某些结构因为很复杂,成员过多,有些没有写全,列在一起的成员变量不一定在 源代码中就是连续的。
1、 _EPROCESS 结构 :
typedef struct _EPROCESS {
KPROCESS Pcb; EX_PUSH_LOCK ProcessLock; LARGE_INTEGER LARGE_INTEGER CreateTime; ExitTime;