PpmExitCoordinatedIdleState

CHAR __fastcall PpmExitCoordinatedIdleState(volatile INT32 *a1, BOOL *a2){
  UINT64 *v2; 
  UINT64 v3; 
  CHAR v4; 
  unsigned __int32 v7; 
  _LIST_ENTRY LoadOrderListHead; 
  __int128 v10; 
  v3 = *(unsigned int *)a1;
  v10 = 0i64;
  v4 = 0;
  BYTE12(v10) = 1;
  *(_QWORD *)&v10 = 0i64;
  LoadOrderListHead.Flink = 0i64;
  LoadOrderListHead.Blink = (_LIST_ENTRY *)PopCoordinatedIdleExitTimeout;
  *(_BYTE *)a2 = 0;
  while( (_DWORD)v3 )
  {
    if( (v3 & 0x4000000) != 0 )
    {
      v7 = _InterlockedCompareExchange(
             a1,
             v3 & 0xFA000FFF | ((*((_DWORD *)KeGetPcr() + 105) & 0xFFF | 0x2000) << 12),
             v3);
      if( (_DWORD)v3 == v7 )
      {
        v4 = 1;
        *(_BYTE *)a2 = (v3 & 0xFFF) == *((_DWORD *)KeGetPcr() + 105);
        return v4;
      }
      v3 = v7;
    }
    else
    {
      if( (v3 & 0x3000000) == 0x2000000 )
      {
        v3 = ((unsigned int)v3 >> 12) & 0xFFF;
        if( (_DWORD)v3 == *((_DWORD *)KeGetPcr() + 105) )
        {
          v4 = 1;
          *(_BYTE *)a2 = 1;
          return v4;
        }
      }
      PpmIdleTransitionStall(&LoadOrderListHead, (_RTL_PROCESS_MODULES *)a2, v3, v2);
      v3 = *(unsigned int *)a1;
    }
  }
  return v4;
}

Referenced by:

PpmExitCoordinatedIdle