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。 如果 “可取消 ”为 TRUE,则 I/O 管理器将使用取消旋转锁来保护设备队列和当前 IRP。

没有 StartIo 例程的驱动程序无法调用 IoStartNextPacket

StartIo 例程调用 IoStartNextPacket 的驱动程序应注意递归问题。 例如,如果驱动程序可以从其 StartIo 例程连续调用 IoStartNextPacket (,例如,当发生设备错误并且驱动程序正在清除设备队列) 时,应使用 IoSetStartIoAttributes 例程为设备设置 DeferredStartIo 属性。 此属性可确保在上一 个 StartIo 调用返回之前不会发出下一个数据包。

IoStartNextPacket 的调用方必须在 IRQL = DISPATCH_LEVEL上运行。 通常,从设备驱动程序的 DpcForIsrCustomDpc 例程调用此例程,这两个例程都在 IRQL = DISPATCH_LEVEL运行。

要求

   
最低受支持的客户端 从 Windows 2000 开始可用。
目标平台 通用
标头 ntifs.h(包括 Wdm.h、Ntddk.h、Ntifs.h)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL DISPATCH_LEVEL (请参阅“备注”部分)
DDI 符合性规则 HwStorPortProhibitedDDIS (storport) IrqlDispatch (storport) 、IrqlDispatch (storport) , IrqlDispatch (wdm) SpinLockSafe (storport) 、SpinLockSafe (storport) 、 SpinLockSafe (wdm ) 、 StartIoRecursion (wdm)

另请参阅

DEVICE_OBJECT

IoSetStartIoAttributes

IoStartNextPacketByKey

IoStartPacket