IovAllocateIrp

IRP *__stdcall IovAllocateIrp(DEVICE_OBJECT *DeviceObject, INT8 StackSize, UINT8 ChargeQuota, PVOID ReturnAddress){
  unsigned int v5; 
  _IOV_IRP_TRACE *v8; 
  __int64 v9; 
  __int64 v10; 
  _IOV_IRP_TRACE *v11; 
  void **StackTrace; 
  INT8 v13; 
  IRP *v14; 
  INT64 LockedPacket; 
  IRP *Irp; 
  __int64 v17; 
  v5 = ChargeQuota;
  v8 = IovpLogStackTrace(0i64);
  v11 = v8;
  if( v8 )
    StackTrace = v8->StackTrace;
  else
    StackTrace = 0i64;
  v13 = StackSize + 1;
  v14 = 0i64;
  if( !VfIoDisabled )
  {
    LockedPacket = ViIrpAllocateLockedPacket(v13, v5, ReturnAddress);
    if( LockedPacket )
    {
      v14 = *(IRP **)LockedPacket;
      if( StackTrace )
      {
        *(_OWORD *)(LockedPacket + 120) = *(_OWORD *)StackTrace;
        *(_OWORD *)(LockedPacket + 136) = *((_OWORD *)StackTrace + 1);
        *(_OWORD *)(LockedPacket + 152) = *((_OWORD *)StackTrace + 2);
        *(_OWORD *)(LockedPacket + 168) = *((_OWORD *)StackTrace + 3);
      }
      else
      {
        *(_QWORD *)(LockedPacket + 120) = 0i64;
      }
      VfIrpDatabaseEntryReleaseLock((_QWORD *)LockedPacket);
    }
  }
  if( !v14 )
  {
    LOBYTE(v10) = v5;
    LOBYTE(v9) = v13;
    Irp = (IRP *)pXdvIoAllocateIrp((int)DeviceObject, v9, v10, (int)ReturnAddress, (__int64)IopAllocateIrpPrivate);
    v14 = Irp;
    if( Irp )
      VfIoAllocateIrp2(Irp, StackTrace);
  }
  if( v11 )
    v11->Irp = v14;
  if( v14 )
  {
    *((_QWORD *)v14 + 23) -= 72i64;
    v17 = *((_QWORD *)v14 + 23);
    --*((_BYTE *)v14 + 67);
    --*((_BYTE *)v14 + 66);
    *((_QWORD *)v14 + 25) = v17;
    if( IopIsActivityTracingEnabled() )
      IopInitActivityIdIrp(v14);
  }
  return v14;
}

Referenced by:

IoAllocateIrp
IoAllocateIrpEx
IopAllocateIrpExReturn