KeSetForceIdle

INT64 __stdcall KeSetForceIdle(){
  INT64 result; 
  int v1; 
  INT64 v2; 
  EVENT_DESCRIPTOR *v3; 
  INT64 v4; 
  UINT64 SpinCount; 
  INT64 CurrentQpc; 
  CurrentQpc = 0i64;
  _disable();
  LODWORD(SpinCount) = 0;
  while( _interlockedbittestandset64((volatile signed __int32 *)&KiForceIdleLock, 0i64) )
  {
    do
    {
      KeYieldProcessorEx(&SpinCount);
      result = KiForceIdleLock;
    }
    while( KiForceIdleLock );
  }
  if( !KiForceIdleDisabled )
  {
    v1 = KiForceIdleState;
    LODWORD(result) = RtlGetInterruptTimePrecise(&CurrentQpc);
    v4 = result + 10000000i64 * (unsigned int)KiForceIdleGracePeriodInSec;
    if( !v1 )
    {
      result = KiSetForceIdleState(2i64, v2, v3);
LABEL_10:
      KiForceIdleStartTime = v4;
      goto LABEL_11;
    }
    if( v1 == 3 )
      goto LABEL_10;
  }
LABEL_11:
  _InterlockedAnd64(&KiForceIdleLock, 0i64);
  _enable();
  return result;
}

Referenced by:

PopDeepSleepClearDisengageReason