KeCheckAndApplyBamQos
CHAR __fastcall KeCheckAndApplyBamQos(INT64 a1, INT64 a2, INT64 a3, INT64 a4){
unsigned __int64 v4;
unsigned int v6;
unsigned __int64 v7;
__int64 v8;
int v9;
unsigned int v10;
__int16 v12;
void *retaddr;
v4 = (unsigned __int64)&retaddr;
if( KeHeteroSystemQos )
{
_disable();
LODWORD(v4) = *(_DWORD *)(a1 + 236);
v6 = (unsigned __int8)*(_DWORD *)(a2 + 512);
if( v6 != (unsigned __int8)v4 )
{
v7 = *(unsigned __int8 *)(a1 + 209);
v8 = *(_QWORD *)(a1 + 192);
if( v6 - 1 > 1 )
_interlockedbittestandreset64((volatile signed __int32 *)(v8 + 368), v7);
else
_interlockedbittestandset64((volatile signed __int32 *)(v8 + 368), v7);
v9 = *(_DWORD *)(a1 + 236) & 0x300;
v10 = PoSetProcessorQoS(a1, v6, a3, a4) ? *(_DWORD *)(a1 + 236) & 0xFFFFFCFF : *(_DWORD *)(a1 + 236) & 0xFFFFFCFF | ((v6 & 3) << 8);
*(_DWORD *)(a1 + 236) = v10;
v4 = v9 != 0;
if( (_DWORD)v4 != ((v10 & 0x300) != 0) )
LOBYTE(v4) = KeUpdatePendingQosRequest(a1);
}
if( (v12 & 0x200) != 0 )
_enable();
}
return v4;
}Referenced by:
KeClockInterruptNotify
KeSetThreadSchedulerAssist
PsImpersonateContainerOfThread
SwapContext