KeSetForceIdle

VOID __stdcall KeSetForceIdle(){
  int v0; 
  __int64 v1; 
  INT64 v2; 
  NPTEXTMETRIC *v3; 
  __int64 v4; 
  UINT64 SpinCount; 
  INT64 CurrentQpc; 

  CurrentQpc = 0i64;
  _disable();
  LODWORD(SpinCount) = 0;
  while( _interlockedbittestandset64((_DWORD *)&KiSwapEvent + 42, 0i64) )
  {
    do
      KeYieldProcessorEx(&SpinCount);
    while( *(&KiSwapEvent + 21) );
  }
  if( !KiForceIdleDisabled )
  {
    v0 = KiForceIdleState;
    LODWORD(v1) = RtlGetInterruptTimePrecise(&CurrentQpc);
    v4 = v1 + 10000000i64 * (unsigned int)KiForceIdleGracePeriodInSec;
    if( !v0 )
    {
      KiSetForceIdleState(2i64, v2, v3);
LABEL_10:
      *(&KiSwapEvent + 20) = v4;
      goto LABEL_11;
    }
    if( v0 == 3 )
      goto LABEL_10;
  }
LABEL_11:
  _InterlockedAnd64((_QWORD *)&KiSwapEvent + 21, 0i64);
  _enable();
}

Referenced by:

PopDeepSleepClearDisengageReason