PspIoRateEntryActivate

VOID __fastcall PspIoRateEntryActivate(_PS_IO_CONTROL_ENTRY *IoControlEntry, _EJOB *Job){
  __int64 v2; 
  _BYTE *v3; 
  void *v5; 
  void *v6; 
  _BYTE *v7; 
  _JOBOBJECT_IO_RATE_CONTROL_INFORMATION_NATIVE_V2 *v8; 
  void *v10; 
  VOID *v11; 
  VOID *v12; 
  UINT64 v13; 
  UINT64 ShareAccess; 
  UINT64 CreateDisposition; 
  UINT64 CreateOptions; 
  UINT64 v17; 
  UINT64 VolumeKey; 
  _UNICODE_STRING DestinationString; 
  _IO_STATUS_BLOCK IoStatusBlock; 
  _OBJECT_ATTRIBUTES ObjectAttributes; 
  PVOID RateControl; 
  VOID *Handle; 

  VolumeKey = 0i64;
  RateControl = 0i64;
  v5 = 0i64;
  v6 = 0i64;
  v7 = v3;
  Handle = 0i64;
  v8 = (_JOBOBJECT_IO_RATE_CONTROL_INFORMATION_NATIVE_V2 *)v2;
  IoStatusBlock = 0i64;
  memset(&ObjectAttributes, 0, sizeof(ObjectAttributes));
  DestinationString = 0i64;
  if( v3 )
    *v3 = 0;
  if( *(_QWORD *)(v2 + 24) )
  {
    RtlInitUnicodeString(&DestinationString, *(PCWSTR *)(v2 + 24));
    LODWORD(v17) = 0;
    ObjectAttributes.RootDirectory = 0i64;
    LODWORD(CreateOptions) = 32;
    LODWORD(CreateDisposition) = 1;
    LODWORD(ShareAccess) = 7;
    LODWORD(v13) = 0;
    ObjectAttributes.Length = 48;
    ObjectAttributes.Attributes = 576;
    ObjectAttributes.ObjectName = &DestinationString;
    *(_OWORD *)&ObjectAttributes.SecurityDescriptor = 0i64;
    if( ZwCreateFile(
           &Handle,
           0x100080ui64,
           &ObjectAttributes,
           &IoStatusBlock,
           0i64,
           v13,
           ShareAccess,
           CreateDisposition,
           CreateOptions,
           0i64,
           v17) < 0 )
      goto LABEL_13;
    v12 = IoDiskIoAttributionAllocate(Job, *((VOID **)Job + 169));
    v5 = v12;
    if( !v12 )
      goto LABEL_13;
    IoStartDiskIoAttributionForContext(v12);
    v6 = Handle;
    v10 = v5;
  }
  else
  {
    v10 = (void *)*((_QWORD *)Job + 169);
  }
  if( IoStartIoRateControl(v8, v6, v10, &RateControl, &VolumeKey) < 0 )
  {
    v11 = RateControl;
  }
  else
  {
    if( IoControlEntry->IoControl )
    {
      PspIoRateEntryDeactivate(IoControlEntry);
      *v7 = 1;
    }
    IoControlEntry->IoControl = RateControl;
    IoControlEntry->VolumeKey = VolumeKey;
    IoControlEntry->VolumeIoAttribution = v5;
    v5 = 0i64;
    _InterlockedExchange64((volatile __int64 *)&IoControlEntry->Rundown, 0i64);
    v11 = 0i64;
  }
  if( v5 )
  {
    IoStopDiskIoAttributionForContext(v5);
    IoDiskIoAttributionDereference(v5);
  }
  if( v11 )
    IoStopIoRateControl(v11);
LABEL_13:
  if( Handle )
    ZwClose((_HANDLE)Handle);
}

Referenced by:

PspSetJobIoRateControl
PspSetJobIoRateControlForVolume