ZwQuerySystemInformation / NtQuerySystemInformation - Класс системной информации 5 - PullRequest
2 голосов
/ 22 июля 2010

Для 32-битной Windows следующее объявление структуры _SYSTEM_PROCESSES (System Information Class 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;  

С другой стороны, он не очень хорошо работает в 64-битной Windows.Если я объявлю ProcessId как ULONG64, то данные для ProcessId будут правильными.Правильный ли тип данных, определенный для приведенной выше структуры, подходит для Windows-64?

1 Ответ

4 голосов
/ 23 июля 2010

По какой-то странной причине идентификаторы процессов и потоков имеют 64-битные значения в ядре и 32-битные в документированных API Windows на x64

Если вы посмотрите на SYSTEM_PROCESS_INFORMATION @ ntinternals, вы увидите, что они имеютобъявил PID как HANDLE (размер указателя)

...