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