IopStartNextPacketByKey
VOID __stdcall IopStartNextPacketByKey(DEVICE_OBJECT *DeviceObject, UINT64 Cancelable, UINT64 Key){
KIRQL v3;
unsigned int v4;
int v5;
_KDEVICE_QUEUE_ENTRY *v7;
_KDEVICE_QUEUE_ENTRY *v8;
v3 = 0;
v4 = Key;
v5 = Cancelable;
if( (_DWORD)Cancelable )
v3 = KeAcquireQueuedSpinLock(7ui64);
*((_QWORD *)DeviceObject + 4) = 0i64;
v7 = KeRemoveByKeyDeviceQueue((_KDEVICE_QUEUE *)DeviceObject + 4, v4);
if( v7 )
{
v8 = v7 - 5;
*((_QWORD *)DeviceObject + 4) = v7 - 5;
if( v5 )
{
if( (*(_DWORD *)(*((_QWORD *)DeviceObject + 39) + 64i64) & 0x200) != 0 )
v8[4].DeviceListEntry.Blink = 0i64;
KeReleaseQueuedSpinLock(7ui64, v3);
}
(*(void(__fastcall **)(DEVICE_OBJECT *, _KDEVICE_QUEUE_ENTRY *))(*((_QWORD *)DeviceObject + 1) + 96i64))(
DeviceObject,
v8);
}
else if( v5 )
{
KeReleaseQueuedSpinLock(7ui64, v3);
}
}Referenced by:
IoStartNextPacketByKey
IopStartNextPacketByKeyEx