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