IoStartPacket
VOID __stdcall IoStartPacket(PDEVICE_OBJECT DeviceObject, PIRP Irp, PULONG Key, PDRIVER_CANCEL CancelFunction){
KIRQL v8;
unsigned __int8 CurrentIrql;
_KDEVICE_QUEUE_ENTRY *v10;
_KDEVICE_QUEUE *v11;
UINT8 inserted;
v8 = 0;
CurrentIrql = KeGetCurrentIrql();
__writecr8(2ui64);
if( CancelFunction )
{
v8 = KeAcquireQueuedSpinLock(7ui64);
*((_QWORD *)Irp + 13) = CancelFunction;
}
v10 = (_KDEVICE_QUEUE_ENTRY *)((char *)Irp + 120);
v11 = (_KDEVICE_QUEUE *)((char *)DeviceObject + 160);
if( Key )
inserted = KeInsertByKeyDeviceQueue(v11, v10, *Key);
else
inserted = KeInsertDeviceQueue(v11, v10);
if( inserted )
{
if( CancelFunction )
{
if( *((_BYTE *)Irp + 68) )
{
*((_QWORD *)Irp + 13) = 0i64;
*((_BYTE *)Irp + 69) = v8;
((void(__fastcall *)(PDEVICE_OBJECT, PIRP))CancelFunction)(DeviceObject, Irp);
}
else
{
KeReleaseQueuedSpinLock(7ui64, v8);
}
}
}
else
{
*((_QWORD *)DeviceObject + 4) = Irp;
if( CancelFunction )
{
if( (*(_DWORD *)(*((_QWORD *)DeviceObject + 39) + 64i64) & 0x200) != 0 )
*((_QWORD *)Irp + 13) = 0i64;
KeReleaseQueuedSpinLock(7ui64, v8);
}
(*(void(__fastcall **)(PDEVICE_OBJECT, PIRP))(*((_QWORD *)DeviceObject + 1) + 96i64))(DeviceObject, Irp);
}
__writecr8(CurrentIrql);
}Referenced by:
No references.