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