从我的旧版驱动程序中,我调用 PsCreateSystemThread API 来创建几个线程。由于这个调用是在内核内部发生的,这些新创建的线程将在系统进程的上下文中运行。
我的问题是这些线程的句柄,是否有任何 API 可以用来获取它们的 CPU 时间?我对线程实际执行某些操作的纯 CPU 时间感兴趣(类似于我们通过调用 GetProcessTimes 获得的内核时间)。我知道有一个名为 GetThreadTimes 的 API,但它来自用户模式,我想要内核模式内的 CPU 时间。
谢谢
从我的旧版驱动程序中,我调用 PsCreateSystemThread API 来创建几个线程。由于这个调用是在内核内部发生的,这些新创建的线程将在系统进程的上下文中运行。
我的问题是这些线程的句柄,是否有任何 API 可以用来获取它们的 CPU 时间?我对线程实际执行某些操作的纯 CPU 时间感兴趣(类似于我们通过调用 GetProcessTimes 获得的内核时间)。我知道有一个名为 GetThreadTimes 的 API,但它来自用户模式,我想要内核模式内的 CPU 时间。
谢谢
用户模式GetThreadTimes
API 实际上只调用NtQueryInformationThread
.
你也可以做到的:
KERNEL_USER_TIMES times;
ZwQueryInformationThread(hThread, ThreadTimes, ×, sizeof(times), NULL);
两者ThreadTimes
都在 WDK的ntddk.hKERNEL_USER_TIMES
头文件中定义。
没有记录的 API 来获取内核中线程的 CPU 时间(因为我知道)。但是您可以访问KTHREAD
结构的字段:UserTime
和KernelTime
. 这种方法的问题主要KTHREAD
是没有正式记录,并且可能因操作系统版本而异。