PoAllProcessorsDeepIdle
NTSTATUS __stdcall PoAllProcessorsDeepIdle(){
struct _KPRCB *CurrentPrcb;
_KNODE *ParentNode;
unsigned int v2;
__int64 v3;
__int64 v4;
__int64 v5;
UINT64 LookupIndex;
CurrentPrcb = KeGetCurrentPrcb();
LODWORD(LookupIndex) = 0;
ParentNode = CurrentPrcb->ParentNode;
v2 = ParentNode->Affinity.Reserved[0];
LODWORD(v3) = CurrentPrcb->GroupIndex;
if( (ParentNode->DeepIdleSet & ~(1i64 << v3)) == (ParentNode->Affinity.Mask & ~(1i64 << (KiProcessorIndexToNumberMappingTable[CurrentPrcb->Number] & 0x3F))) )
{
while( 1 )
{
LODWORD(v3) = MmGetNextNode(v2, &LookupIndex);
if( (_DWORD)v3 == -1 )
break;
v5 = *(_QWORD *)(v4 + 8i64 * (unsigned int)v3 + 13771648);
v3 = *(_QWORD *)(v5 + 136);
if( *(_QWORD *)(v5 + 64) != v3 )
goto LABEL_4;
}
LOBYTE(v3) = 1;
}
else
{
LABEL_4:
LOBYTE(v3) = 0;
}
return v3;
}Referenced by:
KePrepareClockTimerForIdle