KiComputeNewPriority

INT8 __stdcall KiComputeNewPriority(_ETHREAD *Thread, INT8 Adjustment){
  INT8 result; 
  unsigned __int8 v5; 
  char BasePriority; 
  INT8 v7; 
  unsigned int PriorityFloorSummary; 
  int v9; 
  char v10; 
  unsigned __int8 PriorityDecrement; 
  char v12; 
  INT8 v13; 

  result = Thread->Tcb.Priority;
  if( result < 16 )
  {
    if( KiForegrounBoostVelocityFlag
      && Thread->Tcb.Process->Vm.Instance.Flags.MemoryPriority == 2
      && (v10 = Thread->Tcb.PriorityDecrement, (v10 & 0xF) != 0 && (Thread->Tcb._bf_4 & 8) == 0) )
    {
      PriorityDecrement = Thread->Tcb.PriorityDecrement;
      v12 = v10 & 0xF;
      Thread->Tcb.PriorityDecrement = v12;
      v13 = result - (PriorityDecrement >> 4) - Adjustment;
      v7 = v12 + Thread->Tcb.BasePriority;
      if( v13 >= v7 )
        v7 = v13;
    }
    else
    {
      v5 = Thread->Tcb.PriorityDecrement;
      BasePriority = Thread->Tcb.BasePriority;
      if( (char)(result - (v5 >> 4) - (v5 & 0xF) - Adjustment) >= BasePriority )
        BasePriority = result - (v5 >> 4) - (v5 & 0xF) - Adjustment;
      v7 = BasePriority;
      if( v5 )
      {
        if( (v5 & 0xF) != 0 )
          Thread->Tcb.ForegroundLossTime = KUSER_SHARED_DATA.TickCount.LowPart;
        Thread->Tcb.PriorityDecrement = 0;
      }
    }
    PriorityFloorSummary = Thread->Tcb.PriorityFloorSummary;
    if( PriorityFloorSummary )
    {
      _BitScanReverse((unsigned int *)&v9, PriorityFloorSummary);
      if( v7 < v9 )
        return v9;
    }
    return v7;
  }
  return result;
}

Referenced by:

KeDelayExecutionThread
KeSetBasePriorityThread
KeYieldExecution
KiDeferredReadySingleThread
KiQuantumEnd
KiQueueReadyThread