KiUpdateThreadPriority

VOID __stdcall KiUpdateThreadPriority(_KPRCB *Prcb, _ETHREAD *Thread, INT64 NewPriority, UINT8 UpdateMatrix){
  _KPRCB *CurrentPrcb; 
  char v7; 
  INT32 *SchedulerAssist; 
  bool v10; 
  char Priority; 
  _SINGLE_LIST_ENTRY *p_PropagateBoostsEntry; 
  INT64 v13; 

  CurrentPrcb = KeGetCurrentPrcb();
  v7 = NewPriority;
  if( (char)NewPriority > Thread->Tcb.Priority )
  {
    if( Thread->Tcb.AbWaitEntryCount )
    {
      p_PropagateBoostsEntry = &Thread->Tcb.PropagateBoostsEntry;
      if( p_PropagateBoostsEntry->Next == (_SINGLE_LIST_ENTRY *)1 )
      {
        NewPriority = (INT64)&CurrentPrcb->AbPropagateBoostsList;
        if( CurrentPrcb != (_KPRCB *)-34680i64 )
        {
          p_PropagateBoostsEntry->Next = *(_SINGLE_LIST_ENTRY **)NewPriority;
          *(_QWORD *)NewPriority = p_PropagateBoostsEntry;
          _InterlockedIncrement16(&Thread->Tcb.KeReferenceCount);
          KiAbQueueAutoBoostDpc(CurrentPrcb);
        }
      }
    }
  }
  Thread->Tcb.Priority = v7;
  if( UpdateMatrix )
  {
    if( (Thread->Tcb.gap0[2] & 4) != 0 )
    {
      v10 = KiIsThreadRankNonZero(&Thread->Tcb, Prcb, (_KPRCB *)NewPriority) == 0;
      Priority = 1;
      if( v10 )
        Priority = Thread->Tcb.Priority;
      v7 = Priority;
    }
    *Prcb->PriorityState = v7;
    SchedulerAssist = (INT32 *)Prcb->SchedulerAssist;
    if( SchedulerAssist )
    {
      v13 = (unsigned int)KiVpThreadSystemWorkPriority;
      if( Thread != Prcb->IdleThread )
        v13 = (unsigned int)v7;
      KiSetSchedulerAssistPriority(SchedulerAssist, v13, 0);
    }
  }
  if( (*(&Thread->Tcb.MiscFlags + 1) & 0x400000) != 0 )
    KiSetSchedulerAssistPriority((INT32 *)Thread->Tcb.SchedulerAssist, (unsigned int)Thread->Tcb.Priority, 1);
}

Referenced by:

KeSetActualBasePriorityThread
KeStartThread
KeTransitionProcessorParkState
KeYieldExecution
KiApplyForegroundBoostThread
KiCompleteKernelInit
KiDeferredReadySingleThread
KiDirectSwitchThread
KiQuantumEnd
KiQueueReadyThread
KiSetPriorityBoost
KiSetPriorityThread
KiUpdateVPBackingThreadPriority