PoExecuteIdleCheck
INT64 __fastcall PoExecuteIdleCheck(UINT64 a1){
INT64 IdleConstrainedMask;
unsigned int v3;
__int64 v4;
__int64 v5;
EVENT_DESCRIPTOR *v6;
INT64 v7;
UINT16 *v8[2];
__int16 v9;
int v10;
__int16 v11;
int v12;
INT64 v13[21];
_KAFFINITY_EX result;
v10 = 0;
v11 = 0;
memset((INT64)&result, 0i64);
memset((INT64)v13 + 4, 0i64);
IdleConstrainedMask = PpmIdleDurationExpirationTimeout;
if( PpmIdleDurationExpirationTimeout )
{
if( PpmIdleDurationExpirationTimeout + PpmIdleLastIdleDurationExpirationTime < a1 )
{
IdleConstrainedMask = PpmGetIdleConstrainedMask(&result);
if( (_BYTE)IdleConstrainedMask )
{
PpmIdleLastIdleDurationExpirationTime = a1;
v12 = 1310721;
memset((INT64)v13, 0i64);
v8[1] = (UINT16 *)result.Bitmap[0];
v8[0] = (UINT16 *)&result;
v9 = 0;
while( 1 )
{
LODWORD(v7) = 0;
if( (int)KiEnumerateNextProcessorNumber((INT64)&v7, v8) < 0 )
break;
v3 = KiProcessorNumberToIndexMappingTable[64 * (unsigned __int16)v7 + BYTE2(v7)];
KeGetPrcb(v3);
if( (struct _KPRCB *)v4 != KeGetCurrentPrcb() && *(_QWORD *)(v4 + 32808) <= a1 )
KeAddProcessorAffinityEx(&v12, v3);
}
IdleConstrainedMask = KeIsEmptyAffinityEx(&v12);
if( !(_DWORD)IdleConstrainedMask )
{
PpmEventIdleDurationExpiration((unsigned __int16 *)&v12, v5, v6);
return HalRequestIpi(0, &v12);
}
}
}
}
return IdleConstrainedMask;
}Referenced by:
KeClockInterruptNotify
KiUpdateTime