IoStartNextPacket 函数 (ntifs.h)
IoStartNextPacket 例程从给定设备对象的关联设备队列中取消下一个 IRP(如果有)的排队,并调用驱动程序的 StartIo 例程。
语法
void IoStartNextPacket(
[in] PDEVICE_OBJECT DeviceObject,
[in] BOOLEAN Cancelable
);
参数
[in] DeviceObject
指向要为其取消排队 IRP 的设备对象的指针。
[in] Cancelable
指定是否可以取消设备队列中的 IRP。
返回值
无
备注
如果目标 DeviceObject 的设备队列中当前没有 IRP,则此例程只是将控制权返回给调用方。
如果驱动程序在调用 IoStartPacket 时传递了指向取消例程的指针,则应在此例程的 Cancelable 参数中传递 TRUE。 如果 Cancelable 为 TRUE,则 I/O 管理器将使用取消旋转锁来保护设备队列和当前 IRP。
没有 StartIo 例程的驱动程序不能调用 IoStartNextPacket。
从 StartIo 例程调用 IoStartNextPacket 的驱动程序应注意递归问题。 例如,如果驱动程序可以从其 StartIo 例程 (对大量请求连续调用 IoStartNextPacket,并且驱动程序) 清除设备队列时,应使用 IoSetStartIoAttributes 例程设置设备的 DeferredStartIo 属性。 此属性可确保在上一 个 StartIo 调用返回之前不会发出下一个数据包。
IoStartNextPacket 的调用方必须在 IRQL = DISPATCH_LEVEL 运行。 通常,此例程是从设备驱动程序的 DpcForIsr 或 CustomDpc 例程调用的,这两个例程都在 IRQL = DISPATCH_LEVEL中运行。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 2000 |
目标平台 | 通用 |
标头 | ntifs.h(包括 Wdm.h、Ntddk.h、Ntifs.h) |
Library | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | DISPATCH_LEVEL (请参阅备注部分) |
DDI 符合性规则 | HwStorPortProhibitedDDI (storport) 、 IrqlDispatch (storport) 、 IrqlDispatch (storport) , IrqlDispatch (wdm) 、 SpinLockSafe (storport) 、SpinLockSafe (storport) 、 SpinLockSafe (wdm) 、 StartIoRecursion (wdm) |