古月不傲 发表于 2019-12-6 12:19

KPROCESS结构参考windows内核原理与实现 win10

本帖最后由 古月不傲 于 2019-12-6 12:30 编辑

typedef struct _KAFFINITY_EX
{
        USHORT Count;
        USHORT Size;
        ULONG Reserved;
        ULONG64 Bitmap;
}KAFFINITY_EX, *PKAFFINITY_EX;

typedef struct _KEXECUTE_OPTIONS
{
        union
        {
                struct
                {
                        UCHAR ExecuteDisable : 1;
                        UCHAR ExecuteEnable : 1;
                        UCHAR DisableThunkEmulation : 1;
                        UCHAR Permanent : 1;
                        UCHAR ExecuteDispatchEnable : 1;
                        UCHAR ImageDispatchEnable : 1;
                        UCHAR DisableExceptionChainValidation : 1;
                        UCHAR Spare : 1;
                };
                UCHAR ExecuteOptions;
                UCHAR ExecuteOptionsNV;
        };
}KEXECUTE_OPTIONS, *PKEXECUTE_OPTIONS;

typedef struct _KSTACK_COUNT
{
        union
        {
                LONG Value;
                struct
                {
                        LONG State : 3;
                        LONG StackCount : 29;
                };
        };
}KSTACK_COUNT, *PKSTACK_COUNT;

typedef struct _KPROCESS
{
        struct _DISPATCHER_HEADER Header;                        // 分发器对象
        struct _LIST_ENTRY ProfileListHead;                        // 该进程参与进程分析时,作为一个节点加入到一个KiProfileListHead中    (全局进程分析链表)
        ULONG64 DirectoryTableBase;                                        // 指向页目录表基址和超空间页目录表基址
        struct _LIST_ENTRY ThreadListHead;                        // 双向链表 该链表记录了该进程的所有线程 当一个链表被创建时加入到该链表中 移除时从该链表移除
        ULONG ProcessLock;                                                        // 自旋锁 用于保护数据同步
        ULONG ProcessTimerDelay;
        ULONG64 DeepFreezeStartTime;
        struct _KAFFINITY_EX Affinity;                                // 表示该进程的线程可以在哪些CPU上运行
        struct _LIST_ENTRY ReadyListHead;                        // 双向链表 指向KTHREAD的WaitListEntry 处于就绪状态但尚未加入全局就绪链表
        struct _SINGLE_LIST_ENTRY SwapListEntry;        // 单向链表 当一个进程被换出内存时 通过该成员加入到KiProcessOutSwapListHead中 当一个进程被换人内存时 通过该成员加入到KiProcessInSwapListHead中
        struct _KAFFINITY_EX ActiveProcessors;                // 该进程当前正在哪些CPU上运行
        union
        {
                struct
                {
                        LONG AutoAlignment : 1;                                // 内存访问对齐 该域会传到线程中
                        LONG DisableBoost : 1;                                // 线程的优先级设置
                        LONG DisableQuantum : 1;                        // 线程的时限设置
                        LONG DeepFreeze : 1;
                        LONG TimerVirtualization : 1;
                        LONG CheckStackExtents : 1;
                        LONG CacheIsolationEnabled : 1;
                        LONG PpmPolicy : 3;
                        LONG VaSpaceDeleted : 1;
                        LONG ReservedFlags : 21;                       
                };
                LONG ProcessFlags;                                                // 进程的状态
        };
        ULONG ActiveGroupsMask;
        CHAR BasePriority;                                                        // 线程的基本优先级 所有的线程在启动时会继承这个值
        CHAR QuantumReset;                                                        // 线程的时限重置位
        CHAR Visited;                                                                // 未使用
        struct _KEXECUTE_OPTIONS Flags;                                // 内存执行选项
        USHORT ThreadSeed;                                                // 线程理想使用的CPU
        USHORT IdealProcessor;
        USHORT IdealNode;                                                // 选择优先的处理器节点
        USHORT IdealGlobalNode;
        USHORT Spare1;
        struct _KSTACK_COUNT StackCount;                        // 线程栈的个数
        struct _LIST_ENTRY ProcessListEntry;                // 双向链表 下一个或上一个当前系统中活动线程的进程 链表头KiProcessListHead
        ULONG64 CycleTime;
        ULONG64 ContextSwitches;
        struct _KSCHEDULING_GROUP *SchedulingGroup;
        ULONG FreezeCount;
        ULONG KernelTime;                // 内核模式运行所花的时间
        ULONG UserTime;                        // 用户模式运行所花的时间
        ULONG ReadyTime;
        ULONG64 UserDirectoryTableBase;
        UCHAR AddressPolicy;
        UCHAR Spare2;
        PVOID InstrumentationCallback;
        ULONG SecureState;
}KPROCESS, *PKPROCESS;
页: [1]
查看完整版本: KPROCESS结构参考windows内核原理与实现 win10