PspSetProcessForegroundBackgroundRequest
VOID __fastcall PspSetProcessForegroundBackgroundRequest(_EPROCESS *Process, CHAR a2, CHAR a3){
_ETHREAD *CurrentThread;
unsigned int v7;
_BOOL4 v8;
_EX_PUSH_LOCK *p_ProcessLock;
unsigned int Flags3;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v7 = a3 != 0 ? 0x20000 : 0x10000;
v8 = 1;
--CurrentThread->Tcb.KernelApcDisable;
p_ProcessLock = &Process->ProcessLock;
ExAcquirePushLockExclusiveEx(&Process->ProcessLock, 0i64);
if( a2 )
{
_InterlockedOr((volatile signed __int32 *)&Process->2172, v7);
}
else
{
Flags3 = Process->Flags3;
_InterlockedAnd((volatile signed __int32 *)&Process->2172, ~v7);
v8 = (Flags3 & (a3 != 0 ? 0x10000 : 0x20000)) != 0;
}
PspSetProcessPriorityByClass(&Process->Pcb, (PSPROCESSPRIORITYMODE)v8);
if( (_InterlockedExchangeAdd64(&p_ProcessLock->_bf_0, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
ExfTryToWakePushLock(p_ProcessLock);
KeAbPostRelease(p_ProcessLock);
KeLeaveCriticalRegionThread(&CurrentThread->Tcb);
}Referenced by:
NtSetInformationProcess
PsSetProcessPriorityByClass