KeSetProcessSchedulingGroup
_KSCHEDULING_GROUP *__stdcall KeSetProcessSchedulingGroup(
_EPROCESS *TargetProcess,
_KSCHEDULING_GROUP *SchedulingGroup){
unsigned __int8 CurrentIrql;
_KSCHEDULING_GROUP *v5;
_EPROCESS *i;
CurrentIrql = KeGetCurrentIrql();
__writecr8(2ui64);
ExAcquireSpinLockExclusiveAtDpcLevel((INT64 *)&TargetProcess->Pcb.ProcessLock);
v5 = TargetProcess->Pcb.SchedulingGroup;
if( v5 != SchedulingGroup )
{
for( i = (_EPROCESS *)TargetProcess->Pcb.ThreadListHead.Flink;
i != (_EPROCESS *)&TargetProcess->Pcb.ThreadListHead;
i = *(_EPROCESS **)i->Pcb.gap0 )
{
if( *((_KSCHEDULING_GROUP **)&i[-1].Vm.Shared.ShadowMapping + 5) != SchedulingGroup )
KiSetThreadSchedulingGroup((_KTHREAD *)&i[-1].Vm.Shared.ReleasedCommitDebt, SchedulingGroup);
}
TargetProcess->Pcb.SchedulingGroup = SchedulingGroup;
}
ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)&TargetProcess->Pcb.ProcessLock);
__writecr8(CurrentIrql);
return v5;
}Referenced by:
PspSetProcessSchedulingGroup
PspTerminateProcess