对于32位Windows,使用ZwQuerySystemInformation
声明_SYSTEM_PROCESSES
结构(系统信息类5)对于我构build进程树的目的正常工作。
typedef struct _SYSTEM_PROCESSES { // System Information Class 5 ULONG NextEntryDelta; ULONG ThreadCount; ULONG Reserved1[6]; LARGE_INTEGER CreateTime; LARGE_INTEGER UserTime; LARGE_INTEGER KernelTime; UNICODE_STRING ProcessName; ULONG BasePriority; ULONG ProcessId; ULONG InheritedFromProcessId; ULONG HandleCount; ULONG Reserved2[2]; } SYSTEM_PROCESSES, * PSYSTEM_PROCESSES;
另一方面,它在64位Windows中不能正常工作。 如果我声明ProcessId
为ULONG64
,那么ProcessId
的数据是正确的。 为上述结构定义的数据types是否适合Windows-64?
出于某种奇怪的原因,进程和线程ID在内核中是64位,而在x64上是在文档化的Windows API中是32位
如果你查看SYSTEM_PROCESS_INFORMATION @ ntinternals,你会发现他们已经把PID声明为HANDLE(指针大小)