IopStartNextPacket
VOID __stdcall IopStartNextPacket(_DEVICE_OBJECT *DeviceObject, UINT64 Cancelable){
KIRQL v2;
int v3;
_KDEVICE_QUEUE_ENTRY *v5;
_KDEVICE_QUEUE_ENTRY *v6;
v2 = 0;
v3 = Cancelable;
if( (_DWORD)Cancelable )
v2 = KeAcquireQueuedSpinLock(7ui64);
*((_QWORD *)DeviceObject + 4) = 0i64;
v5 = KeRemoveDeviceQueue((_KDEVICE_QUEUE *)DeviceObject + 4);
if( v5 )
{
v6 = v5 - 5;
*((_QWORD *)DeviceObject + 4) = v5 - 5;
if( v3 )
{
if( (*(_DWORD *)(*((_QWORD *)DeviceObject + 39) + 64i64) & 0x200) != 0 )
v6[4].DeviceListEntry.Blink = 0i64;
KeReleaseQueuedSpinLock(7ui64, v2);
}
(*(void(__fastcall **)(_DEVICE_OBJECT *, _KDEVICE_QUEUE_ENTRY *))(*((_QWORD *)DeviceObject + 1) + 96i64))(
DeviceObject,
v6);
}
else if( v3 )
{
KeReleaseQueuedSpinLock(7ui64, v2);
}
}Referenced by:
IoStartNextPacket
IopStartNextPacketByKeyEx