对于32位Windows,在使用_SYSTEM_PROCESSES
声明ZwQuerySystemInformation
结构(系统信息类5)之后,可以正常构建进程树。
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
的数据会正确。为上述结构定义的数据类型是否适用于Windows-64?
答案 0 :(得分:4)
出于一些奇怪的原因,进程和线程id在内核中是64位,在x64上记录的windows api中是32位
如果你看一下SYSTEM_PROCESS_INFORMATION @ntinternals,你会发现他们已经将PID声明为HANDLE(指针大小)