IovAllocateIrp
_IRP *__stdcall IovAllocateIrp(_DEVICE_OBJECT *DeviceObject, INT8 StackSize, UINT8 ChargeQuota, VOID *ReturnAddress){
unsigned int v5;
_IOV_IRP_TRACE *v8;
__int64 v9;
__int64 v10;
_IOV_IRP_TRACE *v11;
void **StackTrace;
INT8 v13;
_IRP *v14;
_IOV_REQUEST_PACKET *LockedPacket;
_IRP *Irp;
_IO_STACK_LOCATION *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 + 30) = *(_OWORD *)StackTrace;
*(_OWORD *)(LockedPacket + 34) = *((_OWORD *)StackTrace + 1);
*(_OWORD *)(LockedPacket + 38) = *((_OWORD *)StackTrace + 2);
*(_OWORD *)(LockedPacket + 42) = *((_OWORD *)StackTrace + 3);
}
else
{
*((_QWORD *)LockedPacket + 15) = 0i64;
}
VfIrpDatabaseEntryReleaseLock(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 )
{
v17 = --v14->Tail.CurrentStackLocation;
--v14->CurrentLocation;
--v14->StackCount;
v14->Tail.IrpExtension = v17;
if( IopIsActivityTracingEnabled() )
IopInitActivityIdIrp(v14);
}
return v14;
}Referenced by:
IoAllocateIrp
IoAllocateIrpEx
IopAllocateIrpExReturn