本帖最后由 古月不傲 于 2019-12-6 12:30 编辑
[C] 纯文本查看 复制代码 typedef struct _KAFFINITY_EX
{
USHORT Count;
USHORT Size;
ULONG Reserved;
ULONG64 Bitmap[20];
}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[20]; // 线程理想使用的CPU
USHORT IdealProcessor[20];
USHORT IdealNode[20]; // 选择优先的处理器节点
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[71];
PVOID InstrumentationCallback;
ULONG SecureState;
}KPROCESS, *PKPROCESS; |