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