KiAbProcessThreadPriorityModification

VOID __stdcall KiAbProcessThreadPriorityModification(_ETHREAD *Thread, INT8 Priority, _KPRIORITY_TYPE PriorityType){
  _KPRCB *CurrentPrcb; 
  _SINGLE_LIST_ENTRY *p_PropagateBoostsEntry; 
  __int64 v5; 
  _SINGLE_LIST_ENTRY **v6; 

  CurrentPrcb = KeGetCurrentPrcb();
  if( PriorityType )
  {
    if( PriorityType == EffectivePriorityType && Priority > Thread->Tcb.Priority )
    {
      if( Thread->Tcb.AbWaitEntryCount )
      {
        p_PropagateBoostsEntry = &Thread->Tcb.PropagateBoostsEntry;
        if( Thread->Tcb.PropagateBoostsEntry.Next == (_SINGLE_LIST_ENTRY *)1 )
        {
          v5 = 34680i64;
LABEL_7:
          v6 = (_SINGLE_LIST_ENTRY **)((char *)CurrentPrcb + v5);
          if( (_KPRCB *)((char *)CurrentPrcb + v5) )
          {
            p_PropagateBoostsEntry->Next = *v6;
            *v6 = p_PropagateBoostsEntry;
            _InterlockedIncrement16(&Thread->Tcb.KeReferenceCount);
            KiAbQueueAutoBoostDpc(CurrentPrcb);
          }
        }
      }
    }
  }
  else if( Priority < Thread->Tcb.BasePriority )
  {
    if( Thread->Tcb.AbOwnedEntryCount )
    {
      p_PropagateBoostsEntry = &Thread->Tcb.IoSelfBoostsEntry;
      if( Thread->Tcb.IoSelfBoostsEntry.Next == (_SINGLE_LIST_ENTRY *)1 )
      {
        v5 = 34672i64;
        goto LABEL_7;
      }
    }
  }
}

Referenced by:

KiDirectSwitchThread