PspSetJobRateControl
INT64 __stdcall PspSetJobRateControl(_EJOB *Job, UINT64 TypeSetFlags){
char v2;
unsigned int JobFlags;
int v4;
int v5;
CHAR **v6;
int v7;
CHAR *RateControl;
unsigned int(__fastcall *v10)(__int64, __int64);
PVOID v11;
__int64 v13[2];
__int128 v14;
__int64 v15;
JobFlags = Job->JobFlags;
v15 = 0i64;
v4 = 0;
v5 = JobFlags & 0x4000000;
v6 = 0i64;
v7 = JobFlags & 0x2000000;
*(_OWORD *)v13 = 0i64;
v14 = 0i64;
if( (v2 & 1) != 0 )
{
if( !v5 )
{
if( v7 )
{
v4 = -1073741637;
goto LABEL_15;
}
RateControl = PspAllocateRateControl(0i64);
v6 = (CHAR **)RateControl;
if( !RateControl )
{
v4 = -1073741801;
goto LABEL_15;
}
Job->NetRateControl = (struct _JOB_NET_RATE_CONTROL *)RateControl;
_InterlockedOr((volatile signed __int32 *)&Job->1320, 0x4000000u);
PspModifyAncestorBits(Job, 0x2000000ui64, 1u);
}
LODWORD(v15) = 0;
*((_QWORD *)&v14 + 1) = Job;
BYTE4(v15) = 1;
v4 = PspEnumJobsAndProcessesInJobHierarchy(
Job,
(__int64(__fastcall *)(__int64, __int64))PspSetRateControlJobPreCallback,
0i64,
(__int64(__fastcall *)(_QWORD *, __int64))PspSetRateControlProcessCallback,
(__int64)v13,
5);
}
else
{
if( !v5 )
{
v4 = -1073741811;
goto LABEL_15;
}
PspRemoveRateControl(Job);
}
if( v4 >= 0 )
return(unsigned int)v4;
if( v6 )
PspFreeRateControl(v6, 0i64);
LABEL_15:
Job->NetRateControl = 0i64;
_InterlockedAnd((volatile signed __int32 *)&Job->1320, 0xFBFFFFFF);
if( !v7 )
{
PspModifyAncestorBits(Job, 0x2000000ui64, 0);
v13[0] &= (unsigned __int64)v10;
v13[1] &= (unsigned __int64)v10;
LODWORD(v15) = (unsigned int)v10 & v15;
v14 = 0i64;
BYTE4(v15) = (_BYTE)v10;
PspEnumJobsAndProcessesInJobHierarchy(
v11,
(__int64(__fastcall *)(__int64, __int64))PspSetRateControlJobPreCallback,
v10,
(__int64(__fastcall *)(_QWORD *, __int64))PspSetRateControlProcessCallback,
(__int64)v13,
5);
}
return(unsigned int)v4;
}Referenced by:
PspSetNetRateControl