KPROCESS 结构体属性介绍
生活随笔
收集整理的這篇文章主要介紹了
KPROCESS 结构体属性介绍
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
typedef struct _KPROCESS {//// The dispatch header and profile listhead are fairly infrequently// referenced.//// 存在 DISPATCHER_HEADER 表明 KPROCESS 是分發器對象,可以被“等待”// 所謂等待,就是指某個線程可以調用 WaitForSingleObject 函數來等待這個 KPROCESS ,// 然后該線程就會處于阻塞(等待)狀態。// 進程退出時會變成有信號狀態,等待就算成功,線程就繼續執行了。DISPATCHER_HEADER Header;// 當該進程參與性能分析時,作為一個節點加入到全局性能分析進程列表 KiProfileListHead 中LIST_ENTRY ProfileListHead;//// The following fields are referenced during context switches.//// 第一項指向頁目錄表基址;第二項指向超空間(hyper space)的頁目錄表基址ULONG_PTR DirectoryTableBase[2];#if defined(_X86_)KGDTENTRY LdtDescriptor; // LDT描述符KIDTENTRY Int21Descriptor; // 21號中斷描述符,用于兼容dos的系統調用USHORT IopmOffset; // IOPM(I/O權限表)的偏移UCHAR Iopl; // I/O優先級BOOLEAN Unused;#endif#if defined(_AMD64_)USHORT IopmOffset;#endif// 32位整數,表示當前進程正在哪些處理器上運行volatile KAFFINITY ActiveProcessors;//// The following fields are referenced during clock interrupts.//// 初始為0,僅當一個線程結束時才更新其進程的這兩個時間值ULONG KernelTime; // 所屬線程在內核模式下花的時間ULONG UserTime; // 所屬線程在用戶模式下花的時間//// The following fields are referenced infrequently.//// 當進程被換出內存后,其所屬線程一旦就緒,則被掛到此鏈表中,并要求換入該進程// 然后將 ReadyListHead 中的所有線程加入到系統全局就緒鏈表 KiDispatcherReadyListHead 中// 這個操作是在 KiInSwapProcesses 函數中完成的LIST_ENTRY ReadyListHead;// 進程換出內存時,通過此域掛入 KiProcessOutSwapListHead 全局鏈表// 進程換入內存時,通過此域掛入 KiProcessInSwapListHead 全局鏈表SINGLE_LIST_ENTRY SwapListEntry;#if defined(_X86_)// 指向處理 Ctrl+C 中斷的函數,僅用于VDM(虛擬DOS機)環境下運行的16位程序PVOID VdmTrapcHandler;#elsePVOID Reserved1;#endif// 存儲了當前進程所有子線程的鏈表LIST_ENTRY ThreadListHead;// 自旋鎖對象,用于對進程數據的同步訪問KSPIN_LOCK ProcessLock;// 指定了該進程的線程可以在哪些CPU上運行,這是32或64位整數,每個位都對應一個處理器(或核)KAFFINITY Affinity;//// N.B. The following bit number definitions must match the following// bit field.//// N.B. These bits can only be written with interlocked operations.//#define KPROCESS_AUTO_ALIGNMENT_BIT 0
#define KPROCESS_DISABLE_BOOST_BIT 1
#define KPROCESS_DISABLE_QUANTUM_BIT 2union {struct {LONG AutoAlignment : 1; // 內存對齊設置,x86不檢查此位LONG DisableBoost : 1; // 優先級提升和時限分配相關LONG DisableQuantum : 1; // 優先級提升和時限分配相關LONG ReservedFlags : 29;};LONG ProcessFlags;};SCHAR BasePriority; // 線程基本優先級,默認是8SCHAR QuantumReset; // 線程基本時限重置值,默認是6,每次時鐘中斷減3// 是否在內存中,共有6種可能的狀態:// ProcessInMemory 、ProcessOutOfMemory 、ProcessInTransition 、// ProcessOutTransition、ProcessInSwap 和ProcessOutSwapUCHAR State;// 線程初始化時,用 ThreadSeed 設置其理想的處理器,然后更新 ThreadSeed 以供下一個線程使用UCHAR ThreadSeed;UCHAR PowerState; // 記錄電源狀態UCHAR IdealNode; // 優先處理器節點,進程初始化時設定BOOLEAN Visited; // WRK 未使用union {KEXECUTE_OPTIONS Flags;UCHAR ExecuteOptions; // 內存執行選項,用于支持NX(內存不可執行)};#if !defined(_X86_) && !defined(_AMD64_)PALIGNMENT_EXCEPTION_TABLE AlignmentExceptionTable;#endifULONG_PTR StackCount;// 當前系統所有活動進程的鏈表,鏈表頭是 KiProcessListHead / PsActiveProcessHeadLIST_ENTRY ProcessListEntry;
} KPROCESS, *PKPROCESS, *PRKPROCESS;
總結
以上是生活随笔為你收集整理的KPROCESS 结构体属性介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vs2019 编译 WRK 踩坑记录
- 下一篇: ETHREAD 结构体属性介绍