PspSetProcessPpmPolicy
INT64 __fastcall PspSetProcessPpmPolicy(INT64 a1, INT64 a2, INT64 a3){
int v3;
INT64 result;
signed __int32 v5;
int v7;
unsigned int v8;
__int64 v9;
v3 = (_DWORD)a2 << 7;
_m_prefetchw((const void *)(a1 + 632));
do
{
v5 = *(_DWORD *)(a1 + 632);
result = (unsigned int)_InterlockedCompareExchange((volatile signed __int32 *)(a1 + 632), v3 | v5 & 0xFFFFFC7F, v5);
}
while( v5 != (_DWORD)result );
if( KeNumberProcessorsGroup0[1] )
{
result = KeGetProcessQosFromPolicy((*(_DWORD *)(a1 + 632) >> 7) & 7);
if( (_DWORD)result == 2 )
{
if( v7 )
return result;
_InterlockedOr((volatile signed __int32 *)(v9 + 2172), v8);
}
else
{
if( !v7 )
return result;
_InterlockedAnd((volatile signed __int32 *)(v9 + 2172), 0xFBFFFFFF);
}
if( (*(_DWORD *)(v9 + 1124) & 0x1000) != 0 )
{
ExAcquireTimeRefreshLock(1u);
ExpUpdateTimerResolution(0, 0i64, 0i64);
ExReleaseResourceLite(&ExpTimeRefreshLock);
KeLeaveCriticalRegion();
}
}
return result;
}Referenced by:
No references.