如何检索内核中线程的CPU时间?

时间:2014-05-19 09:24:55

标签: windows windows-kernel

从我的旧驱动程序中,我正在调用PsCreateSystemThread API来创建几个线程。 由于此调用是从内核中发生的,因此这些新创建的线程将在System进程的上下文中运行。

我的问题是这些线程的句柄,是否有任何API可用于获取其CPU时间?我对线程实际执行某些操作的纯CPU时间感兴趣(类似于我们通过调用GetProcessTimes获得的内核时间)。我知道有一个名为GetThreadTimes的API,但是来自用户模式,我希望内核模式下有CPU时间。

由于

2 个答案:

答案 0 :(得分:0)

没有记录的API来获取内核中线程的CPU时间(因为我知道)。但您可以访问KTHREAD结构的字段:UserTimeKernelTime。这种方法的问题主要是KTHREAD没有正式记录,并且可能因操作系统版本而异。

答案 1 :(得分:0)

用户模式GetThreadTimes API实际上只调用NtQueryInformationThread 你也可以这样做:

KERNEL_USER_TIMES times;
ZwQueryInformationThread(hThread, ThreadTimes, &times, sizeof(times), NULL);

ThreadTimesKERNEL_USER_TIMES都在WDK的 ntddk.h 标头中定义。