【问题标题】:How to get thread id using ZwQuerySystemInformation() in kernel mode?如何在内核模式下使用 ZwQuerySystemInformation() 获取线程 ID?
【发布时间】:2013-12-25 16:59:27
【问题描述】:

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

【问题讨论】:

    标签: c windows kernel


    【解决方案1】:

    嗯,如果您仔细查看 SYSTEM_THREAD_INFORMATIONCLIENT_ID 成员,它包含线程 ID。

    你看到 SYSTEM_PROCESS_INFORMATION 的第二个成员了吗?

    如果是,则命名为 NumberOfThreads,因此您可能会猜到是什么意思,万岁 -> 线程数 -> SYSTEM_THREAD_INFORMATION 结构体的数量。

    【讨论】:

    • 谢谢!也许您知道如何从_SYSTEM_PROCESS_INFORMATION 结构中获取流程的完整路径(我只能获取名称)和公司名称?
    • ZwQueryInformationProces 与 ProcessImageFileName。公司名称存储在可执行文件的资源部分,这与 SYSTEM_PROCESS_INFORMATION 无关。
    猜你喜欢
    • 2013-07-05
    • 2020-06-06
    • 2014-03-26
    • 1970-01-01
    • 2012-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-08
    相关资源
    最近更新 更多