IopStartNextPacketByKey
VOID __stdcall IopStartNextPacketByKey(_DEVICE_OBJECT *DeviceObject, UINT64 Cancelable, UINT8 *Key){
UINT8 v3;
unsigned int v4;
int v5;
__int64 v7;
_IRP *v8;
v3 = 0;
v4 = (unsigned int)Key;
v5 = Cancelable;
if( (_DWORD)Cancelable )
v3 = KeAcquireQueuedSpinLock(7i64, Cancelable, (INT64)Key);
DeviceObject->CurrentIrp = 0i64;
LODWORD(v7) = KeRemoveByKeyDeviceQueue((INT64)&DeviceObject->DeviceQueue, v4);
if( v7 )
{
v8 = (_IRP *)(v7 - 120);
DeviceObject->CurrentIrp = (_IRP *)(v7 - 120);
if( v5 )
{
if( (DeviceObject->DeviceObjectExtension->StartIoFlags & 0x200) != 0 )
v8->CancelRoutine = 0i64;
KeReleaseQueuedSpinLock(LockQueueIoCancelLock, v3);
}
DeviceObject->DriverObject->DriverStartIo(DeviceObject, v8);
}
else if( v5 )
{
KeReleaseQueuedSpinLock(LockQueueIoCancelLock, v3);
}
}Referenced by:
IoStartNextPacketByKey
IopStartNextPacketByKeyEx