如何在内核模式下使用ZwQuerySystemInformation()获取线程ID?

时间:2013-12-25 16:59:28

标签: c windows kernel

我使用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:我在内核模式下工作

1 个答案:

答案 0 :(得分:2)

嗯,如果你仔细查看 SYSTEM_THREAD_INFORMATION CLIENT_ID 成员,它就会包含主题ID。

您是否看到 SYSTEM_PROCESS_INFORMATION 的第二个成员?

如果是,则将其命名为 NumberOfThreads ,这样您就可以猜出它的意思是什么,万岁 - >线程数 - > SYSTEM_THREAD_INFORMATION 结构的数量。