PspSetJobIoRateControlForVolume

__int64 __fastcall PspSetJobIoRateControlForVolume(
        unsigned __int64 a1,
        _QWORD *a2,
        _BYTE *a3,
        _BYTE *a4,
        unsigned __int64 *a5){
  char v9; 
  MDL *PoolWithTag; 
  INT8 v11; 
  struct EX_RUNDOWN_REF *v12; 
  int v13; 
  struct EX_RUNDOWN_REF *v14; 
  struct EX_RUNDOWN_REF *v15; 
  *a3 = 0;
  *a4 = 0;
  *a5 = 0i64;
  v9 = 0;
  PoolWithTag = (MDL *)ExAllocatePoolWithTag(NonPagedPoolNx, 0x38ui64, 0x694A7350ui64);
  v12 = (struct EX_RUNDOWN_REF *)PoolWithTag;
  if( PoolWithTag )
  {
    PspIoRateEntryInitialize(PoolWithTag, v11);
    v13 = PspIoRateEntryActivate(v12, (VOID **)a1, (INT64)a2, 0i64);
    if( v13 >= 0 )
    {
      v9 = 1;
      PspJobIoRateVolumeEntryRemove();
      v15 = v14;
      if( v14 )
      {
        PspIoRateEntryDeactivate(v14);
        ExFreePoolWithTag(v15, 0);
        *a3 = 1;
      }
      if( PspIoRateControlInfoIsAnySet(a2) )
      {
        *a5 = v12[5].Count;
        PspJobIoRateVolumeEntryInsert(a1, (UINT64)v12);
        v12 = 0i64;
        *a4 = 1;
      }
      v13 = 0;
    }
    if( v12 )
    {
      if( v9 )
        PspIoRateEntryDeactivate(v12);
      ExFreePoolWithTag(v12, 0);
    }
  }
  else
  {
    return(unsigned int)-1073741670;
  }
  return(unsigned int)v13;
}

Referenced by:

PspSetJobIoRateControl