KiSetProcessorIdle

VOID __stdcall KiSetProcessorIdle(_KPRCB *Prcb, UINT64 Idle, UINT64 IdleSchedule){
  __int64 v3; 
  int v4; 
  __int64 v5; 
  int v6; 
  unsigned __int64 v7; 
  unsigned __int64 v8; 
  int v9; 
  v3 = *((_QWORD *)Prcb + 24);
  v4 = *((unsigned __int8 *)Prcb + 35);
  if( (_DWORD)Idle )
  {
    v5 = *((_QWORD *)Prcb + 4247);
    if( v5 )
      *(_BYTE *)(v5 + 16) = 1;
    *((_BYTE *)Prcb + 12587) = IdleSchedule;
    if( (v4 & 1) != 0 )
    {
      v6 = v4 - 1;
      *((_BYTE *)Prcb + 35) = v6;
      if( !v6 )
        _interlockedbittestandset64((volatile signed __int32 *)v3, *((unsigned __int8 *)Prcb + 209));
      _interlockedbittestandset64((volatile signed __int32 *)(v3 + 24), *((unsigned __int8 *)Prcb + 209));
      v7 = *((_QWORD *)Prcb + 4235);
      if( (*(_QWORD *)(v3 + 24) & v7) == v7 )
      {
        _InterlockedOr64((volatile signed __int64 *)(v3 + 8), v7);
      }
      else
      {
        v8 = *((_QWORD *)Prcb + 4235) & ~*(_QWORD *)(v3 + 24);
        if( ((v8 - 1) & v8) == 0 )
          _InterlockedOr64((volatile signed __int64 *)(v3 + 16), v8);
      }
      _interlockedbittestandreset64((volatile signed __int32 *)(v3 + 16), *((unsigned __int8 *)Prcb + 209));
    }
  }
  else
  {
    *((_BYTE *)Prcb + 12587) = 0;
    if( (v4 & 1) != 0 )
      __fastfail(0x21u);
    v9 = v4 + 1;
    *((_BYTE *)Prcb + 35) = v9;
    if( v9 == 1 )
      _interlockedbittestandreset64((volatile signed __int32 *)v3, *((unsigned __int8 *)Prcb + 209));
    _interlockedbittestandreset64((volatile signed __int32 *)(v3 + 24), *((unsigned __int8 *)Prcb + 209));
    _InterlockedAnd64((volatile signed __int64 *)(v3 + 8), ~*((_QWORD *)Prcb + 4235));
    _InterlockedAnd64((volatile signed __int64 *)(v3 + 16), ~*((_QWORD *)Prcb + 4235));
    if( (*((_QWORD *)Prcb + 4235) & ~*(_QWORD *)(v3 + 24)) == *((_QWORD *)Prcb + 25) )
      _interlockedbittestandset64((volatile signed __int32 *)(v3 + 16), *((unsigned __int8 *)Prcb + 209));
  }
}

Referenced by:

KeTransitionProcessorParkState
KiCompleteKernelInit
KiGroupSchedulingGenerationEnd
KiSchedulerApc
KiSearchForNewThread
KiSelectNextThread