PspNotifyProcessBackgroundTransition
_QWORD *__fastcall PspNotifyProcessBackgroundTransition(__int64 a1, int a2){
_ETHREAD *CurrentThread;
INT64 *v5;
unsigned __int8 CurrentIrql;
__int64 v7;
__int64 *i;
int v9;
int v10;
if( a2 )
_interlockedbittestandset((volatile signed __int32 *)(a1 + 1124), 0x14u);
else
_interlockedbittestandreset((volatile signed __int32 *)(a1 + 1124), 0x14u);
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--*((_WORD *)CurrentThread + 242);
v5 = (INT64 *)(a1 + 2144);
ExAcquirePushLockSharedEx(a1 + 2144, 0i64);
CurrentIrql = KeGetCurrentIrql();
__writecr8(2ui64);
v7 = a1 + 1504;
for( i = *(__int64 **)(a1 + 1504); i != (__int64 *)v7; i = (__int64 *)*i )
{
if( (*((char *)i - 464) | *((char *)i - 386)) != 63 )
{
v9 = (*((_DWORD *)i + 10) >> 9) & 7;
if( a2 )
{
v10 = (*((_DWORD *)i + 10) >> 9) & 7;
v9 = 0;
}
else
{
v10 = 0;
}
if( v10 != v9 )
KeAbProcessBaseIoPriorityChange((__int64)(i - 157), v10, v9);
}
}
__writecr8(CurrentIrql);
if( _InterlockedCompareExchange64(v5, 0i64, 17i64) != 17 )
ExfReleasePushLockShared(v5);
KeAbPostRelease(v5);
return KeLeaveCriticalRegionThread((__int64)CurrentThread);
}Referenced by:
PspApplyJobChainLimitsToProcess
PspSetProcessBackgroundCountCallback