EPROCESS 结构体属性介绍

typedef struct _EPROCESS {
   
    // KPROCESS 和 EPROCESS 地址相同
    KPROCESS Pcb;

    //
    // Lock used to protect:
    // The list of threads in the process.
    // Process token.
    // Win32 process field.
    // Process and thread affinity setting.
    //

    // 推锁对象,用于保护 EPROCESS 的数据成员
    EX_PUSH_LOCK ProcessLock;

    // 进程的创建和退出时间
    LARGE_INTEGER CreateTime;
    LARGE_INTEGER ExitTime;

    //
    // Structure to allow lock free cross process access to the process
    // handle table, process section and address space. Acquire rundown
    // protection with this if you do cross process handle table, process
    // section or address space references.
    //

    // 进程的停止保护锁,进程销毁时,要等到所有其他进程和线程已经释放此锁,才能继续进行
    EX_RUNDOWN_REF RundownProtect;

    // 进程唯一编号,进程创建时指定
    HANDLE UniqueProcessId;

    //
    // Global list of all processes in the system. Processes are removed
    // from this list in the object deletion routine.  References to
    // processes in this list must be done with ObReferenceObjectSafe
    // because of this.
    //

    // 所有进程都挂入了全局链表 PsActiveProcessHead 中,ActiveProcessLinks 就是
    // 当前进程的挂入点。可通过此成员遍历所有进程。
    LIST_ENTRY ActiveProcessLinks;

    //
    // Quota Fields.
    //

    // 下面两个数组的长度均为3,分别对应非换页内存池,换页内存池和交换文件中的内存使用情况。
    // 这两个数组是在 PspChargeQuota 函数内计算的。
    
    // 进程内存使用量
    SIZE_T QuotaUsage[PsQuotaTypes];
    
    // 进程内存使用量峰值
    SIZE_T QuotaPeak[PsQuotaTypes];
    
    // 进程的虚拟内存已提交的页面数量
    SIZE_T CommitCharge;

    //
    // VmCounters.
    //

    // 进程虚拟内存大小峰值
    SIZE_T PeakVirtualSize;
    
    // 进程虚拟内存大小
    SIZE_T VirtualSize;

    // 当进程加入到一个系统会话中时,通过 SessionProcessLinks 挂入该会话的进程链表中
    LIST_ENTRY SessionProcessLinks;

    
    // 当进程中的线程发生用户模式异常时,内核的异常处理例程在异常处理过程中,将向该进程的异常
    // 端口或调试端口发送消息,从而使这些端口的接收方(调试器或windows子系统)能够处理该异常。
    // 5.2.7节将介绍异常分发过程。
    
    // 调试端口
    PVOID DebugPort;
    
    // 异常端口
    PVOID ExceptionPort;
    
    // 句柄表,存储了所有被该进程打开的内核对象的句柄
    PHANDLE_TABLE ObjectTable;

    //
    // Security.
    //

    // 指向该进程的访问令牌,用于该进程的安全访问检查
    EX_FAST_REF Token;

    // 工作集页面
    PFN_NUMBER WorkingSetPage;
    
    // 守护互斥体锁(guarded mutex),用于保护对地址空间的操作。
    // 当内核代码需要对虚拟地址空间进行操作时,必须在 AddressCreationLock 上执行锁操作,
    // 完成以后再解锁。LOCK_ADDRESS_SPACE 和 UNLOCK_ADDRESS_SPACE 宏用于简化代码。
    KGUARDED_MUTEX AddressCreationLock;
    
    // 自旋锁对象,用于保护进程的超空间
    KSPIN_LOCK HyperSpaceLock;

    // 指向正在复制地址空间的那个线程,仅当在地址空间复制的过程中,此值才有值,其他情况为 NULL
    // 详见 MiCloneProcessAddressSpace 函数
    struct _ETHREAD *ForkInProgress;
    
    
    ULONG_PTR HardwareTrigger;

    // 指向进程的物理VAD树根,并不总是存在,只有确实需要映射物理内存时才会被创建。
    PMM_AVL_TABLE PhysicalVadRoot;
    
    // 指向一个平衡树的根,当进程地址空间复制时创建此树,创建后直到进程退出时才销毁
    PVOID CloneRoot;
    
    // 私有页面数量

你可能感兴趣的:(EPROCESS 结构体属性介绍)