PoGetIdleTimes
VOID __fastcall PoGetIdleTimes(PROCESSOR_NUMBER *ProcNumber, INT64 a2, INT64 a3){
unsigned int ProcessorIndexFromNumber;
_ETHREAD *CurrentThread;
__int64 v8;
__int64 v9;
unsigned __int8 CurrentIrql;
int v11;
int result;
INT64 result_4;
memset((INT64)&result, 0i64);
ProcessorIndexFromNumber = KeGetProcessorIndexFromNumber(ProcNumber);
KeGetPrcb(ProcessorIndexFromNumber);
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v9 = v8;
--*((_WORD *)CurrentThread + 242);
ExAcquirePushLockSharedEx((UINT64)&PpmIdlePolicyLock, 0i64);
CurrentIrql = KeGetCurrentIrql();
__writecr8(2ui64);
LODWORD(v9) = PopGetIdleTimesCallback(v9, a2, a3);
__writecr8(CurrentIrql);
if( (int)v9 < 0 )
{
result = 1310721;
memset((INT64)&result_4, 0i64);
v11 = KeGetProcessorIndexFromNumber(ProcNumber);
KeAddProcessorAffinityEx(&result, v11);
PopExecuteOnTargetProcessors((INT64)&result, (INT64)PopGetIdleTimesCallback, a2, a3);
}
PopReleaseRwLock((UINT64)&PpmIdlePolicyLock);
}Referenced by:
ExpQueryProcessorInformationCounters
ExpQuerySystemInformation