PoSetProcessorQoS
char __fastcall PoSetProcessorQoS(INT64 a1, signed int a2, __int64 a3, INT64 a4){
bool v4;
char v5;
char v8;
__int64 v9;
int v10;
unsigned __int64 v11;
unsigned __int64 v12;
signed int v13;
bool v14;
unsigned __int64 v15;
bool v16;
__int16 v18;
v4 = 0;
v5 = 0;
v8 = 1;
if( a2 == *(_DWORD *)(a1 + 33264) )
return v8;
v9 = *(_QWORD *)(a1 + 33136);
if( v9 && *(_BYTE *)(v9 + 125) )
{
v5 = 1;
_disable();
v4 = (v18 & 0x200) != 0;
KxAcquireSpinLock((UINT64 *)(v9 + 128));
}
v10 = *(unsigned __int16 *)(a1 + 33272);
if( _bittest(&v10, a2) )
goto LABEL_19;
v11 = __rdtsc();
v12 = v11 - *(_QWORD *)(a1 + 33248);
v13 = *(_DWORD *)(a1 + 33264);
v14 = a2 == 3 || v13 == 3;
if( a2 == 4 && v13 || !a2 || a2 <= v13 && !v14 || v12 >= *(_QWORD *)(a1 + 33256) || *(_BYTE *)(a1 + 33213) )
{
v15 = 2i64 * *(_QWORD *)(a1 + 33256);
*(_QWORD *)(a1 + 33248) = v11;
*(_BYTE *)(a1 + 33213) = v12 >= v15;
LABEL_19:
v16 = PpmPerfVmQosSupported == 0;
*(_DWORD *)(a1 + 33264) = a2;
if( v16 )
PpmPerfArbitratorApplyProcessorState(a1, 1u, 0, a4);
else
PpmHvSetVirtualProcessorQos(a1);
*(_BYTE *)(a1 + 236) = a2;
goto LABEL_23;
}
v8 = 0;
LABEL_23:
if( v5 )
{
KxReleaseSpinLock((UINT64 *)(v9 + 128));
if( v4 )
_enable();
}
return v8;
}Referenced by:
KeCheckAndApplyBamQos
KeClockInterruptNotify
KiUpdateRunTime