PspSetNetRateControl

INT64 __stdcall PspSetNetRateControl(PVOID JobObjectInformation, UINT64 JobObjectInformationLength, _EJOB *Job){
  char v4; 
  int v5; 
  int v6; 
  int v7; 
  int v8; 
  int v9; 
  _ETHREAD *CurrentThread; 
  unsigned int JobFlags; 
  int v12; 
  UINT64 v13; 
  int v14; 
  struct _JOB_NET_RATE_CONTROL *NetRateControl; 
  _EJOB *RootJob; 
  INT64 v18; 
  int v19; 
  _DWORD v20[5]; 
  __int64 v21; 
  __int128 v22; 
  __int128 JobObjectInformationa; 
  __int64 v24; 
  JobObjectInformationa = 0i64;
  v24 = 0i64;
  v22 = 0i64;
  RootJob = 0i64;
  v4 = 0;
  memmove((UINT8 *)&v22, (UINT8 *)JobObjectInformation, (unsigned int)JobObjectInformationLength);
  if( (DWORD2(v22) & 0xFFFFFFF8) == 0 )
  {
    v6 = BYTE8(v22) & 1;
    if( (BYTE8(v22) & 1) != 0 )
    {
      v7 = BYTE8(v22) & 4;
      if( (BYTE8(v22) & 4) != 0 && BYTE12(v22) > 0x40u )
        return(unsigned int)-1073741811;
      v8 = BYTE8(v22) & 4;
      if( (BYTE8(v22) & 6) == 0 )
        return(unsigned int)-1073741811;
    }
    else
    {
      v7 = BYTE8(v22) & 4;
      v8 = v7;
    }
    v18 = 0i64;
    memset(v20, 0, 12);
    v21 = 0i64;
    *(_QWORD *)&v20[3] = &Job->ContainerId;
    v19 = 0;
    v9 = BYTE8(v22) & 2;
    if( (BYTE8(v22) & 2) != 0 )
    {
      LODWORD(v21) = v21 | 0x10;
      *(_QWORD *)&v20[1] = v22;
    }
    if( v8 )
    {
      LODWORD(v21) = v21 | 8;
      BYTE4(v21) = BYTE12(v22);
    }
    CurrentThread = (_ETHREAD *)KeGetCurrentThread();
    PspLockRootJobExclusive(Job, CurrentThread, &RootJob);
    PspLockJobConditionally(Job, &RootJob);
    JobFlags = Job->JobFlags;
    v12 = JobFlags & 0x2000000;
    v13 = JobFlags & 0x4000000;
    if( (_DWORD)v13 )
      v18 = *((_QWORD *)Job->NetRateControl + 7);
    if( (_BYTE)v6 )
    {
      if( v12 )
      {
        if( (_DWORD)v13 )
          LODWORD(v21) = v21 | 2;
      }
      else
      {
        LODWORD(v21) = v21 | 1;
      }
    }
    else if( (_DWORD)v13 )
    {
      LODWORD(v21) = v21 | 4;
    }
    if( (v21 & 1) != 0 )
    {
      v5 = PspSetJobRateControl(Job, v13);
      if( v5 < 0 )
        goto LABEL_36;
      v4 = 1;
      v14 = PspNetRateControlDispatch((INT64)&v18);
    }
    else
    {
      if( (v21 & 7) != 0 )
      {
        v5 = PspNetRateControlDispatch((INT64)&v18);
        if( v5 < 0 )
          goto LABEL_36;
      }
      v14 = PspSetJobRateControl(Job, v13);
    }
    v5 = v14;
    if( v14 < 0 )
      goto LABEL_37;
    if( v6 )
    {
      if( v9 )
      {
        *((_DWORD *)Job->NetRateControl + 12) |= 1u;
        *((_QWORD *)Job->NetRateControl + 5) = *(_QWORD *)&v20[1];
      }
      if( v7 )
      {
        *((_DWORD *)Job->NetRateControl + 12) |= 2u;
        *((_BYTE *)Job->NetRateControl + 64) = BYTE4(v21);
      }
      *((_QWORD *)Job->NetRateControl + 7) = v18;
      NetRateControl = Job->NetRateControl;
      LODWORD(JobObjectInformationa) = *((_DWORD *)NetRateControl + 12);
      *((_QWORD *)&JobObjectInformationa + 1) = *((_QWORD *)NetRateControl + 5);
      LOBYTE(v24) = *((_BYTE *)NetRateControl + 64);
    }
LABEL_36:
    if( v5 >= 0 )
    {
LABEL_39:
      PspUnlockJobConditionally(Job, &RootJob);
      PspUnlockJob((__int64)RootJob, (__int64)CurrentThread);
      return(unsigned int)v5;
    }
LABEL_37:
    if( v4 )
      PspSetJobRateControl(Job, v13);
    goto LABEL_39;
  }
  return(unsigned int)-1073741811;
}

Referenced by:

NtSetInformationJobObject