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 运行。 通常,此例程是从设备驱动程序的 DpcForIsrCustomDpc 例程调用的,这两个例程都在 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)

另请参阅

DEVICE_OBJECT

IoSetStartIoAttributes

IoStartNextPacketByKey

IoStartPacket