KiEnableGroupScheduling

VOID __stdcall KiEnableGroupScheduling(){
  CHAR v0; 
  INT64 v1; 
  _KPRCB **v2; 
  __int64 v3; 
  __int64 v4; 
  _KLOCK_QUEUE_HANDLE LockHandle; 

  memset(&LockHandle, 0, sizeof(LockHandle));
  KeAcquireInStackQueuedSpinLock((PKSPIN_LOCK)&KiSchedulingGroupLock, &LockHandle);
  if( !KiGroupSchedulingEnabled )
  {
    LOBYTE(v1) = 1;
    qword_140C31A18 = (__int64)&KiSchedulingGroupList;
    KiSchedulingGroupList = (__int64)&KiSchedulingGroupList;
    KeUpdateGroupSchedulingConstants(v1, v0);
    *(&KiSwapEvent + 41) = KUSER_SHARED_DATA.TickCountQuad + (unsigned int)KiGenerationTicks;
    if( (_DWORD)KeNumberProcessors_0 )
    {
      v2 = &KiProcessorBlock;
      v3 = (unsigned int)KeNumberProcessors_0;
      do
      {
        v4 = (__int64)*v2++;
        *(_QWORD *)(v4 + 33296) = v4 + 33288;
        *(_QWORD *)(v4 + 33288) = v4 + 33288;
        *(_DWORD *)(v4 + 216) = 424 * *(_DWORD *)(v4 + 36) + 128;
        *(_QWORD *)(v4 + 33624) = *(&KiSwapEvent + 41);
        --v3;
      }
      while( v3 );
    }
    KiGroupSchedulingEnabled = 1;
  }
  KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
  __writecr8(LockHandle.OldIrql);
}

Referenced by:

KeInsertSchedulingGroup