您的位置:首页 > 其它

32位和64位下,SYSTEM_THREADS与SYSTEM_PROCESSES结构体

2017-08-01 19:04 489 查看
32位的没有什么好说的,关键是64位的资料比较少。这个结构体,网上有说,但是不太准确,测试发现前半部分对了,后半部分不对(获取线程信息的时候不对)。最后结合一些例子和计算,整出来了.

typedef struct _SYSTEM_THREADS

{

 LARGE_INTEGER  KernelTime;

 LARGE_INTEGER  UserTime;

 LARGE_INTEGER  CreateTime;

 ULONG    WaitTime;

 PVOID    StartAddress;

 CLIENT_ID   ClientID;

 KPRIORITY   Priority;

 KPRIORITY   BasePriority;

 ULONG    ContextSwitchCount;

 ULONG    ThreadState;

 KWAIT_REASON  WaitReason;

#ifdef _WIN64

 ULONG    Reserved; //Add

#else

#endif

}SYSTEM_THREADS,*PSYSTEM_THREADS;

typedef struct _SYSTEM_PROCESSES

{

 ULONG    NextEntryDelta;

 ULONG    ThreadCount;

 ULONG    Reserved[6];

 LARGE_INTEGER  CreateTime;

 LARGE_INTEGER  UserTime;

 LARGE_INTEGER  KernelTime;

 UNICODE_STRING  ProcessName;

 KPRIORITY   BasePriority;

 HANDLE   ProcessId;  //Modify

 HANDLE   InheritedFromProcessId;//Modify

 ULONG    HandleCount;

 ULONG    SessionId;

 ULONG_PTR  PageDirectoryBase;

 VM_COUNTERS VmCounters;

 SIZE_T    PrivatePageCount;//Add

 IO_COUNTERS  IoCounters; //windows 2000 only

 struct _SYSTEM_THREADS Threads[1];

}SYSTEM_PROCESSES,*PSYSTEM_PROCESSES;

//还有关键的一个结构体,之前看到某些资料上的也不对,关键是32位下网上用的是ULONG,这是不对的,应该用SIZE_T(32位下4字节,64位下8字节),导致了原数据的偏移错误。

typedef struct _VM_COUNTERS

{

    SIZE_T PeakVirtualSize;

    SIZE_T VirtualSize;

    ULONG PageFaultCount;

    SIZE_T PeakWorkingSetSize;

    SIZE_T WorkingSetSize;

    SIZE_T QuotaPeakPagedPoolUsage;

    SIZE_T QuotaPagedPoolUsage;

    SIZE_T QuotaPeakNonPagedPoolUsage;

    SIZE_T QuotaNonPagedPoolUsage;

    SIZE_T PagefileUsage;

    SIZE_T PeakPagefileUsage;

} VM_COUNTERS, *PVM_COUNTERS;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: