PpmExitCoordinatedIdleState

UINT8 __stdcall PpmExitCoordinatedIdleState(_PPM_COORDINATED_SYNCHRONIZATION *Synchronization, UINT8 *Initiator){
  unsigned int AsLong; 
  UINT8 v3; 
  signed __int32 v6; 
  _QWORD v8[2]; 
  __int128 v9; 

  AsLong = Synchronization->AsLong;
  v9 = 0i64;
  v3 = 0;
  BYTE12(v9) = 1;
  *(_QWORD *)&v9 = 0i64;
  v8[0] = 0i64;
  v8[1] = PopCoordinatedIdleExitTimeout;
  *Initiator = 0;
  while( AsLong )
  {
    if( (AsLong & 0x4000000) != 0 )
    {
      v6 = _InterlockedCompareExchange(
             &Synchronization->AsLong,
             AsLong & 0xFA000FFF | ((KeGetPcr()->Prcb.Number & 0xFFF | 0x2000) << 12),
             AsLong);
      if( AsLong == v6 )
      {
        v3 = 1;
        *Initiator = (AsLong & 0xFFF) == KeGetPcr()->Prcb.Number;
        return v3;
      }
      AsLong = v6;
    }
    else
    {
      if( (AsLong & 0x3000000) == 0x2000000 && ((AsLong >> 12) & 0xFFF) == KeGetPcr()->Prcb.Number )
      {
        v3 = 1;
        *Initiator = 1;
        return v3;
      }
      PpmIdleTransitionStall((__int64)v8);
      AsLong = Synchronization->AsLong;
    }
  }
  return v3;
}

Referenced by:

PpmExitCoordinatedIdle