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

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

最佳答案

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

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

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

关于c - 如何在内核模式下使用 ZwQuerySystemInformation() 获取线程 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20774999/

相关文章:

c++ - 从正在运行的程序中读取值

windows - 我可以从 Windows 中的用户模式程序读取 CPU 性能计数器吗?

windows - 使工作区可单击以在其上启动 Eclipse?

linux - 我如何在 linux 的 cryptoAPI 中添加更多算法

linux - 为什么 Linux 不使用纤程而不是抢占式多任务处理?

linux - 如何在控制台中显示 printk() 消息?

c - 添加行和列 2d

c - 误解 Unix 中的行缓冲区

c - 灵活数组成员上的结构

python - 为什么我的Python脚本不能使用Docker运行?