KiEnableGroupScheduling
VOID __stdcall KiEnableGroupScheduling(){
CHAR v0;
INT64 v1;
_KPRCB **v2;
__int64 v3;
__int64 v4;
struct _KLOCK_QUEUE_HANDLE LockHandle;
memset(&LockHandle, 0, sizeof(LockHandle));
KeAcquireInStackQueuedSpinLock(&KiSchedulingGroupLock, &LockHandle);
if( !KiGroupSchedulingEnabled )
{
LOBYTE(v1) = 1;
qword_140C31A18 = (__int64)&KiSchedulingGroupList;
KiSchedulingGroupList = &KiSchedulingGroupList;
KeUpdateGroupSchedulingConstants(v1, v0);
KiGenerationEndTick = 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) = KiGenerationEndTick;
--v3;
}
while( v3 );
}
KiGroupSchedulingEnabled = 1;
}
KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
__writecr8(LockHandle.OldIrql);
}Referenced by:
KeInsertSchedulingGroup