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