0

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

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

谢谢

4

2 回答 2

0

用户模式GetThreadTimes​​API 实际上只调用NtQueryInformationThread.
你也可以做到的:

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

两者ThreadTimes都在 WDK的ntddk.hKERNEL_USER_TIMES头文件中定义。

于 2015-03-15T16:46:33.603 回答
0

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

于 2014-05-20T12:36:26.327 回答