KeAbProcessBaseIoPriorityChangeInternal

VOID __stdcall KeAbProcessBaseIoPriorityChangeInternal(_ETHREAD *Thread, UINT64 PriorityIncreased){
  unsigned __int8 CurrentIrql; 
  _KPRCB *CurrentPrcb; 
  _SINGLE_LIST_ENTRY *p_PropagateBoostsEntry; 
  _SINGLE_LIST_ENTRY *p_AbPropagateBoostsList; 
  int v6; 

  CurrentIrql = KeGetCurrentIrql();
  __writecr8(2ui64);
  CurrentPrcb = KeGetCurrentPrcb();
  if( !Thread->Tcb.AbOwnedEntryCount || (_DWORD)PriorityIncreased )
  {
    if( !Thread->Tcb.AbWaitEntryCount || !(_DWORD)PriorityIncreased )
      goto LABEL_3;
    p_PropagateBoostsEntry = &Thread->Tcb.PropagateBoostsEntry;
    p_AbPropagateBoostsList = &CurrentPrcb->AbPropagateBoostsList;
  }
  else
  {
    p_PropagateBoostsEntry = &Thread->Tcb.IoSelfBoostsEntry;
    p_AbPropagateBoostsList = &CurrentPrcb->AbSelfIoBoostsList;
  }
  KiAbThreadInsertList(Thread, p_AbPropagateBoostsList, p_PropagateBoostsEntry);
  if( v6 )
    KiAbQueueAutoBoostDpc(CurrentPrcb);
LABEL_3:
  __writecr8(CurrentIrql);
}

Referenced by:

IoUpdateThreadIoRateThrottle
KeAbProcessBaseIoPriorityChange