PspSetProcessForegroundBackgroundRequest
VOID __fastcall PspSetProcessForegroundBackgroundRequest(INT64 a1, CHAR a2, CHAR a3){
_ETHREAD *CurrentThread;
unsigned int v7;
BOOL v8;
volatile INT64 *v9;
int v10;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v7 = a3 != 0 ? 0x20000 : 0x10000;
v8 = 1;
--*((_WORD *)CurrentThread + 242);
v9 = (volatile INT64 *)(a1 + 1080);
ExAcquirePushLockExclusiveEx(a1 + 1080, 0i64);
if( a2 )
{
_InterlockedOr((volatile signed __int32 *)(a1 + 2172), v7);
}
else
{
v10 = *(_DWORD *)(a1 + 2172);
_InterlockedAnd((volatile signed __int32 *)(a1 + 2172), ~v7);
v8 = (v10 & (a3 != 0 ? 0x10000 : 0x20000)) != 0;
}
PspSetProcessPriorityByClass(a1, v8);
if( (_InterlockedExchangeAdd64(v9, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
ExfTryToWakePushLock(v9);
KeAbPostRelease((PVOID)v9);
KeLeaveCriticalRegionThread((__int64)CurrentThread);
}Referenced by:
NtSetInformationProcess
PsSetProcessPriorityByClass