PspIoRateEntryActivate

INT64 __fastcall PspIoRateEntryActivate(struct EX_RUNDOWN_REF *a1, VOID **a2, INT64 a3, BYTE *a4){
  EX_RUNDOWN_REF *v5; 
  HANDLE v6; 
  EX_RUNDOWN_REF *v10; 
  NTSTATUS started; 
  void *v12; 
  EX_RUNDOWN_REF *v14; 
  UINT64 v15; 
  UINT64 ShareAccess; 
  UINT64 CreateDisposition; 
  UINT64 CreateOptions; 
  UINT64 v19; 
  struct _UNICODE_STRING DestinationString; 
  struct _IO_STATUS_BLOCK IoStatusBlock; 
  struct _OBJECT_ATTRIBUTES ObjectAttributes; 
  unsigned __int64 v23; 
  HANDLE Handle; 
  v23 = 0i64;
  v5 = 0i64;
  v6 = 0i64;
  Handle = 0i64;
  IoStatusBlock = 0i64;
  memset(&ObjectAttributes, 0, sizeof(ObjectAttributes));
  DestinationString = 0i64;
  if( a4 )
    *a4 = 0;
  if( *(_QWORD *)(a3 + 24) )
  {
    RtlInitUnicodeString(&DestinationString, *(PCWSTR *)(a3 + 24), a3);
    LODWORD(v19) = 0;
    ObjectAttributes.RootDirectory = 0i64;
    LODWORD(CreateOptions) = 32;
    LODWORD(CreateDisposition) = 1;
    LODWORD(ShareAccess) = 7;
    LODWORD(v15) = 0;
    ObjectAttributes.Length = 48;
    ObjectAttributes.Attributes = 576;
    ObjectAttributes.ObjectName = &DestinationString;
    *(_OWORD *)&ObjectAttributes.SecurityDescriptor = 0i64;
    started = ZwCreateFile(
                &Handle,
                0x100080ui64,
                &ObjectAttributes,
                &IoStatusBlock,
                0i64,
                v15,
                ShareAccess,
                CreateDisposition,
                CreateOptions,
                0i64,
                v19);
    if( started < 0 )
      goto LABEL_13;
    v14 = IoDiskIoAttributionAllocate(a2, a2[169]);
    v5 = v14;
    if( !v14 )
    {
      started = -1073741670;
      goto LABEL_13;
    }
    IoStartDiskIoAttributionForContext(v14);
    v6 = Handle;
    v10 = v5;
  }
  else
  {
    v10 = (EX_RUNDOWN_REF *)a2[169];
  }
  started = IoStartIoRateControl(a3, (__int64)v6, (__int64)v10, (__int64 *)&v23);
  if( started < 0 )
  {
    v12 = (void *)v23;
  }
  else
  {
    if( a1[5].Count )
    {
      PspIoRateEntryDeactivate(a1);
      *a4 = 1;
    }
    a1[5].Count = v23;
    a1[3].Count = 0i64;
    a1[6].Count = (unsigned __int64)v5;
    v5 = 0i64;
    _InterlockedExchange64((volatile __int64 *)&a1[4], 0i64);
    v12 = 0i64;
    started = 0;
  }
  if( v5 )
  {
    IoStopDiskIoAttributionForContext((UINT64)v5);
    IoDiskIoAttributionDereference(v5);
  }
  if( v12 )
    IoStopIoRateControl(v12);
LABEL_13:
  if( Handle )
    ZwClose(Handle);
  return(unsigned int)started;
}

Referenced by:

PspSetJobIoRateControl
PspSetJobIoRateControlForVolume