PspEnforceLimits
VOID __stdcall PspEnforceLimits(UINT8 ViolationDetected){
_EJOB *i;
_LIST_ENTRY **NextJob;
_EJOB *v4;
_EJOB *v5;
VOID *v6;
INT64 *v7;
_EPROCESS *Buffer[2];
INT64 JobPostCallback[8];
memset(JobPostCallback, 0i64, sizeof(JobPostCallback));
_InterlockedIncrement(&PspEnforcementSequenceNumber);
if( !ViolationDetected && PspNoWakeChargeReferencedProcess )
{
LODWORD(v6) = 0;
LODWORD(v5) = 0;
LODWORD(Buffer[0]) = 0;
ZwUpdateWnfStateData(&WNF_PS_WAKE_CHARGE_RESOURCE_POLICY, Buffer, 4ui64, 0i64, 0i64, (UINT64)v5, (UINT64)v6);
ObfDereferenceObjectWithTag(PspNoWakeChargeReferencedProcess, 0x624A7350ui64);
PspNoWakeChargeReferencedProcess = 0i64;
}
for( i = 0i64; ; i = v4 )
{
NextJob = PspGetNextJob(i);
v4 = (_EJOB *)NextJob;
if( !NextJob )
break;
if( !NextJob[134] && (!ViolationDetected || ((_DWORD)NextJob[165] & 0x100000) != 0) )
{
_InterlockedAnd((volatile signed __int32 *)NextJob + 330, 0xFFEFFFFF);
memset(JobPostCallback, 0i64, sizeof(JobPostCallback));
LODWORD(v5) = 6;
PspEnumJobsAndProcessesInJobHierarchy(
v4,
(INT64 *)PspEnforceLimitsJobPreCallback,
(_EJOB *)PspEnforceLimitsJobPostCallback,
PspEnforceLimitsProcessCallback,
JobPostCallback,
v5,
v6,
v7,
Buffer[0],
Buffer[1],
(VOID *)JobPostCallback[0],
JobPostCallback[1]);
}
}
}Referenced by:
PspJobTimeLimitsWork