PspSetJobIoRateControlForVolume

NTSTATUS __stdcall PspSetJobIoRateControlForVolume(
        _EJOB *Job,
        _JOBOBJECT_IO_RATE_CONTROL_INFORMATION_NATIVE_V2 *ControlInfo,
        UINT8 *OldEntryDeactivated,
        UINT8 *NewEntryActivated,
        VOID **OpaqueRateControl){
  char v9; 
  _PS_IO_CONTROL_ENTRY *PoolWithTag; 
  _PS_IO_CONTROL_ENTRY *v11; 
  NTSTATUS v12; 
  int v13; 
  _PS_IO_CONTROL_ENTRY *v14; 
  _PS_IO_CONTROL_ENTRY *v15; 

  *OldEntryDeactivated = 0;
  *NewEntryActivated = 0;
  *OpaqueRateControl = 0i64;
  v9 = 0;
  PoolWithTag = (_PS_IO_CONTROL_ENTRY *)ExAllocatePoolWithTag(0x200ui64, 0x38ui64, 1766486864i64);
  v11 = PoolWithTag;
  if( !PoolWithTag )
    return -1073741670;
  PspIoRateEntryInitialize(PoolWithTag);
  PspIoRateEntryActivate(v11, Job);
  v12 = v13;
  if( v13 >= 0 )
  {
    v9 = 1;
    v14 = (_PS_IO_CONTROL_ENTRY *)PspJobIoRateVolumeEntryRemove(Job, v11->VolumeKey);
    v15 = v14;
    if( v14 )
    {
      PspIoRateEntryDeactivate(v14);
      ExFreePoolWithTag(v15, 0);
      *OldEntryDeactivated = 1;
    }
    if( PspIoRateControlInfoIsAnySet(ControlInfo) )
    {
      *OpaqueRateControl = v11->IoControl;
      PspJobIoRateVolumeEntryInsert(Job, v11);
      v11 = 0i64;
      *NewEntryActivated = 1;
    }
    v12 = 0;
  }
  if( v11 )
  {
    if( v9 )
      PspIoRateEntryDeactivate(v11);
    ExFreePoolWithTag(v11, 0);
  }
  return v12;
}

Referenced by:

PspSetJobIoRateControl