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