ZwQuerySystemInformation / NtQuerySystemInformation-系统信息类别5

Kar*_*lee 3 windows sdk winapi windows-vista

对于32位Windows,以下_SYSTEM_PROCESSES结构声明(系统信息类5)ZwQuerySystemInformation可以很好地用于构建进程树。

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;  
Run Code Online (Sandbox Code Playgroud)

另一方面,它在64位Windows中无法正常运行。如果我声明ProcessIdULONG64,则用于的数据ProcessId正确。为上述结构定义的数据类型是否适用于Windows-64?

And*_*ers 5

出于某些奇怪的原因,x64上的进程和线程ID在内核中为64位,在已记录的Windows API中为32位

如果你看一下SYSTEM_PROCESS_INFORMATION @ ntinternals你看,他们已经宣布PID的作为手柄(指针大小)