KiCheckForEffectivePriorityChange

VOID __stdcall KiCheckForEffectivePriorityChange(_KPRCB *Prcb, _KSCB *Scb, _KPRCB *a3){
  _ETHREAD *NextThread; 
  _KSCB *SchedulingGroup; 
  UINT8 IsThreadRankNonZero; 
  char Priority; 
  INT64 v8; 

  NextThread = Prcb->NextThread;
  if( !NextThread )
    NextThread = Prcb->CurrentThread;
  SchedulingGroup = (_KSCB *)NextThread->Tcb.SchedulingGroup;
  if( SchedulingGroup )
  {
    for( SchedulingGroup = (_KSCB *)((char *)SchedulingGroup + Prcb->ScbOffset);
          SchedulingGroup;
          SchedulingGroup = SchedulingGroup->Parent )
    {
      if( SchedulingGroup == Scb )
        goto LABEL_9;
    }
  }
  if( SchedulingGroup == Scb )
  {
LABEL_9:
    if( (NextThread->Tcb.gap0[2] & 4) == 0
      || (IsThreadRankNonZero = KiIsThreadRankNonZero(&NextThread->Tcb, Prcb, (_KPRCB *)SchedulingGroup),
          Priority = 1,
          !IsThreadRankNonZero) )
    {
      Priority = NextThread->Tcb.Priority;
    }
    *Prcb->PriorityState = Priority;
    if( Prcb->SchedulerAssist )
    {
      v8 = (unsigned int)KiVpThreadSystemWorkPriority;
      if( NextThread != Prcb->IdleThread )
        v8 = (unsigned int)Priority;
      KiSetSchedulerAssistPriority((INT32 *)Prcb->SchedulerAssist, v8, 0);
    }
  }
}

Referenced by:

KeSetSchedulingGroupRankBias
KiComputeGroupSchedulingRank
KiUpdateCpuTargetByRate
KiUpdateCpuTargetByWeight