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.