KiComputeNewPriority

__int64 __fastcall KiComputeNewPriority(__int64 a1, char a2){
  __int64 result; 
  unsigned __int8 v5; 
  char v6; 
  char v7; 
  unsigned int v8; 
  int v9; 
  char v10; 
  unsigned __int8 v11; 
  char v12; 
  char v13; 
  result = *(unsigned __int8 *)(a1 + 195);
  if( (char)result < 16 )
  {
    if( KiForegrounBoostVelocityFlag
      && *(_BYTE *)(*(_QWORD *)(a1 + 544) + 1850i64) == 2
      && (v10 = *(_BYTE *)(a1 + 564), (v10 & 0xF) != 0 && (*(_BYTE *)(a1 + 120) & 8) == 0) )
    {
      v11 = *(_BYTE *)(a1 + 564);
      v12 = v10 & 0xF;
      *(_BYTE *)(a1 + 564) = v12;
      v13 = result - (v11 >> 4) - a2;
      v7 = v12 + *(_BYTE *)(a1 + 563);
      if( v13 >= v7 )
        v7 = v13;
    }
    else
    {
      v5 = *(_BYTE *)(a1 + 564);
      v6 = *(_BYTE *)(a1 + 563);
      if( (char)(result - (v5 >> 4) - (v5 & 0xF) - a2) >= v6 )
        v6 = result - (v5 >> 4) - (v5 & 0xF) - a2;
      v7 = v6;
      if( v5 )
      {
        if( (v5 & 0xF) != 0 )
          *(_DWORD *)(a1 + 872) = KUSER_SHARED_DATA.TickCount.LowPart;
        *(_BYTE *)(a1 + 564) = 0;
      }
    }
    v8 = *(_DWORD *)(a1 + 856);
    if( v8 )
    {
      _BitScanReverse((unsigned int *)&v9, v8);
      if( v7 < v9 )
        return(unsigned __int8)v9;
    }
    return(unsigned __int8)v7;
  }
  return result;
}

Referenced by:

KeDelayExecutionThread
KeSetBasePriorityThread
KeYieldExecution
KiDeferredReadySingleThread
KiQuantumEnd
KiQueueReadyThread