2014-05-19 1 views
0

내 레거시 드라이버에서 PsCreateSystemThread API를 호출하여 스레드를 거의 만들지 않습니다. 이 호출은 커널 내부에서 발생하기 때문에 이러한 새로 생성 된 스레드는 시스템 프로세스의 컨텍스트에서 실행됩니다.커널 내부 스레드의 CPU 시간을 검색하는 방법은 무엇입니까?

내 질문에이 스레드에 대한 핸들이 주어집니다. CPU 사용 시간을 가져올 수있는 API가 있습니까? 스레드가 실제로 뭔가하고있는 순수 CPU 시간에 관심이 있습니다 (GetProcessTimes를 호출하여 얻을 수있는 커널 시간과 비슷합니다). GetThreadTimes라는 API가 있지만 사용자 모드에서 가져온 것입니다. 커널 모드에서 CPU 시간을 원합니다.

덕분에

답변

0

(내가 알고 있기 때문에) 커널 스레드의 CPU 시간을 얻기 위해 API를이 문서화되어 있지 않습니다. 하지만 구조의 필드 인 UserTimeKernelTime에 액세스 할 수 있습니다. 이 접근 방식의 문제점은 주로 KTHREAD이 공식적으로 문서화되지 않았기 때문에 OS 버전에 따라 다를 수 있습니다.

0

사용자 모드 GetThreadTimes API는 실제로 NtQueryInformationThread 만 호출합니다.
는 동일한 작업을 수행 할 수 있습니다

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

모두 ThreadTimesKERNEL_USER_TIMES는 WDK에 ntddk.h 헤더에 정의되어 있습니다.

관련 문제