我使用ZwQuerySystemInformation()
来枚举所有进程,并且可以获得关于每个进程的所有信息,我也可以获得SYSTEM_THREAD_INFORMATION
。
typedef struct _SYSTEM_THREAD_INFORMATION
{
LARGE_INTEGER KernelTime;
LARGE_INTEGER UserTime;
LARGE_INTEGER CreateTime;
DWORD WaitTime;
PVOID StartAddress;
CLIENT_ID ClientId;
KPRIORITY Priority;
LONG BasePriority;
DWORD ContextSwitches;
DWORD ThreadState;
DWORD WaitReason;
} SYSTEM_THREAD_INFORMATION, *PSYSTEM_THREAD_INFORMATION;
但是这个结构不包含线程id,为什么?我怎样才能得到这个 ID?
还有一个问题:我得到了 SYSTEM_PROCESS_INFORMATION
结构,它包含指向进程内所有线程的指针:SYSTEM_THREAD_INFORMATION Threads[1];
但是我怎么知道 这个进程中有多少个线程?
PS:我在内核模式下工作
最佳答案
嗯,如果您仔细查看 SYSTEM_THREAD_INFORMATION 的 CLIENT_ID 成员,它包含线程 ID。
您是否看到 SYSTEM_PROCESS_INFORMATION 的第二个成员?
如果是,则命名为 NumberOfThreads,那么您可能会猜到是什么意思,万岁 -> 线程数 -> SYSTEM_THREAD_INFORMATION 结构数。
关于c - 如何在内核模式下使用 ZwQuerySystemInformation() 获取线程 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20774999/