PspSetNetRateControl

NTSTATUS __stdcall PspSetNetRateControl(VOID *JobObjectInformation, UINT64 JobObjectInformationLength, _EJOB *Job){
  char v4; 
  int v5; 
  int v6; 
  int v7; 
  int v8; 
  int v9; 
  _ETHREAD *CurrentThread; 
  int v11; 
  int v12; 
  UINT64 v13; 
  NTSTATUS v14; 
  __int64 v15; 
  _EJOB *RootJob; 
  _SYSTEM_NET_RATE_CONTROL_CONTEXT_HEADER Header; 
  int v19; 
  _DWORD v20[5]; 
  __int64 v21; 
  __int128 v22; 
  __int128 JobObjectInformationa; 
  __int64 v24; 

  JobObjectInformationa = 0i64;
  v24 = 0i64;
  v22 = 0i64;
  RootJob = 0i64;
  v4 = 0;
  memmove(&v22, JobObjectInformation, 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 -1073741811;
      v8 = BYTE8(v22) & 4;
      if( (BYTE8(v22) & 6) == 0 )
        return -1073741811;
    }
    else
    {
      v7 = BYTE8(v22) & 4;
      v8 = v7;
    }
    Header = 0i64;
    memset(v20, 0, 12);
    v21 = 0i64;
    *(_QWORD *)&v20[3] = (char *)Job + 1240;
    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);
    v11 = *((_DWORD *)Job + 330);
    v12 = v11 & 0x2000000;
    v13 = v11 & 0x4000000;
    if( (_DWORD)v13 )
      Header = *(_SYSTEM_NET_RATE_CONTROL_CONTEXT_HEADER *)(*((_QWORD *)Job + 164) + 56i64);
    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(&Header);
    }
    else
    {
      if( (v21 & 7) != 0 )
      {
        v5 = PspNetRateControlDispatch(&Header);
        if( v5 < 0 )
          goto LABEL_36;
      }
      v14 = PspSetJobRateControl(Job, v13);
    }
    v5 = v14;
    if( v14 < 0 )
      goto LABEL_37;
    if( v6 )
    {
      if( v9 )
      {
        *(_DWORD *)(*((_QWORD *)Job + 164) + 48i64) |= 1u;
        *(_QWORD *)(*((_QWORD *)Job + 164) + 40i64) = *(_QWORD *)&v20[1];
      }
      if( v7 )
      {
        *(_DWORD *)(*((_QWORD *)Job + 164) + 48i64) |= 2u;
        *(_BYTE *)(*((_QWORD *)Job + 164) + 64i64) = BYTE4(v21);
      }
      *(_SYSTEM_NET_RATE_CONTROL_CONTEXT_HEADER *)(*((_QWORD *)Job + 164) + 56i64) = Header;
      v15 = *((_QWORD *)Job + 164);
      LODWORD(JobObjectInformationa) = *(_DWORD *)(v15 + 48);
      *((_QWORD *)&JobObjectInformationa + 1) = *(_QWORD *)(v15 + 40);
      LOBYTE(v24) = *(_BYTE *)(v15 + 64);
    }
LABEL_36:
    if( v5 >= 0 )
    {
LABEL_39:
      PspUnlockJobConditionally(Job, &RootJob);
      PspUnlockJob(RootJob, CurrentThread);
      return v5;
    }
LABEL_37:
    if( v4 )
      PspSetJobRateControl(Job, v13);
    goto LABEL_39;
  }
  return -1073741811;
}

Referenced by:

NtSetInformationJobObject