KiAssignSchedulingGroupWeights
void __fastcall KiAssignSchedulingGroupWeights(int a1, char a2, __int64 a3){
unsigned int v5;
_QWORD *v6;
_QWORD **v7;
_KSCHEDULING_GROUP *v8;
if( a1 )
{
if( a3 )
v5 = *(_DWORD *)(a3 + 12);
else
v5 = KiGroupSchedulingMinimumRate;
}
else if( a3 )
{
if( !*(_DWORD *)(a3 + 20) )
return;
v5 = *(_DWORD *)(a3 + 16);
}
else
{
if( !KiGroupSchedulingTotalWeight )
return;
v5 = KiGroupSchedulingMinimumWeight;
}
if( a3 )
{
v7 = (_QWORD **)(a3 + 80);
v6 = *(_QWORD **)(a3 + 80);
}
else
{
v6 = KiSchedulingGroupList;
v7 = &KiSchedulingGroupList;
}
do
{
v8 = (_KSCHEDULING_GROUP *)(v6 - 7);
if( (*((_DWORD *)v6 - 13) & 1) == a1 )
{
v8->RelativeWeight = (v8->Policy.Weight << 7) / v5;
if( !a1 )
KiUpdateCpuTargetByWeight(v8, a2);
}
v6 = (_QWORD *)*v6;
}
while( v6 != v7 );
}Referenced by:
KeInsertSchedulingGroup
KeRemoveSchedulingGroup
KeSetSchedulingGroupCpuRates
KeSetSchedulingGroupWeights
KeUpdateGroupSchedulingConstants