KeSetSchedulingGroupCpuRates
VOID __stdcall KeSetSchedulingGroupCpuRates(
_KSCHEDULING_GROUP **SchedulingGroups,
_KSCHEDULING_GROUP_POLICY *CpuRates,
_KSCHEDULING_GROUP_POLICY a3){
UINT64 v5;
_KPRCB *v6;
_KSCHEDULING_GROUP_POLICY v7;
int v8;
UINT64 v9;
char v10;
_KLOCK_QUEUE_HANDLE LockHandle;
memset(&LockHandle, 0, sizeof(LockHandle));
KeAcquireInStackQueuedSpinLock((PKSPIN_LOCK)&KiSchedulingGroupLock, &LockHandle);
v7 = *CpuRates;
v8 = *(_DWORD *)(*(_QWORD *)CpuRates + 4i64);
if( (v8 & 1) == 0 )
{
LOBYTE(v5) = 1;
*(_DWORD *)(*(_QWORD *)&v7 + 4i64) = v8 | 1;
KiUpdateMinimumWeight(WeightBased, v5, *(_KSCHEDULING_GROUP **)(*(_QWORD *)CpuRates + 96i64));
KiAssignSchedulingGroupWeights(WeightBased, 0, *(_KSCHEDULING_GROUP **)(*(_QWORD *)CpuRates + 96i64));
v7 = *CpuRates;
}
**(_QWORD **)&v7 = **(_QWORD **)&a3;
KiUpdateCpuTargetByRate(*(_KSCHEDULING_GROUP **)CpuRates, 1u, v6);
LOBYTE(v9) = 1;
KiUpdateMinimumWeight(RateBased, v9, *(_KSCHEDULING_GROUP **)(*(_QWORD *)CpuRates + 96i64));
if( v10 )
KiAssignSchedulingGroupWeights(RateBased, 0, *(_KSCHEDULING_GROUP **)(*(_QWORD *)CpuRates + 96i64));
KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
__writecr8(LockHandle.OldIrql);
}Referenced by:
NtSetInformationJobObject