KeUpdateQosGroupingSets
UINT64 __stdcall KeUpdateQosGroupingSets(UINT64 QpcFrequency, PSTR LeftShift){
int v2;
UINT64 result;
_QWORD *v4;
__int128 v5;
__int64 v6;
__int64 v7;
__int64 v8;
__int64 v9;
signed __int64 v10;
signed __int64 v11;
__int128 v12;
unsigned __int8 v13;
__int128 v14;
v2 = (int)LeftShift;
LOBYTE(result) = KiIsQosGroupingActive();
if( (_BYTE)result )
{
v5 = *(_OWORD *)(v4[24] + 352i64);
v6 = *(_QWORD *)(v4[24] + 360i64);
v7 = *(_QWORD *)(v4[24] + 352i64);
while( 1 )
{
v8 = v4[25];
v9 = v4[4235];
v10 = *((_QWORD *)&v5 + 1);
if( (unsigned int)(v2 - 1) > 1 )
{
v11 = v7 & ~v8;
v10 = ~v9 & *((_QWORD *)&v5 + 1);
}
else
{
v11 = v7 | v8;
if( (v9 & v11) == v9 )
v10 = v9 | *((_QWORD *)&v5 + 1);
}
*(_QWORD *)&v12 = v7;
*((_QWORD *)&v12 + 1) = v6;
v13 = _InterlockedCompareExchange128(
(volatile signed __int64 *)(v4[24] + 352i64),
v10,
v11,
(signed __int64 *)&v12);
result = v12;
v7 = v12;
v14 = v12;
v6 = *((_QWORD *)&v12 + 1);
if( v13 )
break;
*((_QWORD *)&v5 + 1) = *((_QWORD *)&v14 + 1);
}
}
return result;
}Referenced by:
PpmPerfArbitratorApplyProcessorState