PspGetEffectiveNoWakeCharge
VOID __stdcall PspGetEffectiveNoWakeCharge(_EJOB *Job, UINT64 *NoWakeCharge, UINT64 *SystemNoWakeCharge){
unsigned int JobFlags;
unsigned int v5;
unsigned __int64 NoWakeCounter;
_EJOB *ParentJob;
_EJOB *v8;
JobFlags = Job->JobFlags;
*NoWakeCharge = 0i64;
*SystemNoWakeCharge = 0i64;
v5 = JobFlags;
if( (JobFlags & 0x800) != 0 )
{
if( Job->EffectiveFreezeCount )
{
NoWakeCounter = Job->WakeInfo.NoWakeCounter;
*NoWakeCharge = NoWakeCounter;
if( (JobFlags & 0x400000) == 0 )
{
ParentJob = Job->ParentJob;
if( !ParentJob || (ParentJob->JobFlags & 0x1000) == 0 || !ParentJob->EffectiveFreezeCount )
{
*SystemNoWakeCharge = NoWakeCounter;
v5 = JobFlags;
if( ParentJob )
{
_InterlockedOr((volatile signed __int32 *)&ParentJob->1320, 0x400000u);
v5 = Job->JobFlags;
}
}
}
}
}
if( (v5 & 0x400000) != 0 )
{
v8 = Job->ParentJob;
if( v8 )
_InterlockedOr((volatile signed __int32 *)&v8->1320, 0x400000u);
_InterlockedAnd((volatile signed __int32 *)&Job->1320, 0xFFBFFFFF);
}
}Referenced by:
PspEnforceLimitsJobPostCallback