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
目標平台 Universal
標頭 ntifs.h (包括 Wdm.h、Ntddk.h、Ntifs.h)
程式庫 NtosKrnl.lib
Dll NtosKrnl.exe
IRQL DISPATCH_LEVEL (请参阅一节)
DDI 合規性規則 HwStorPortProhibitedDIS (storport) IrqlDispatch (storport) 、 IrqlDispatch (storport) , IrqlDispatch (wdm) SpinLockSafe (storport) 、SpinLockSafe (storport ) 、 SpinLockSafe (wdm ) 、 StartIoRecursion (wdm)

另請參閱

DEVICE_OBJECT

IoSetStartIoAttributes

IoStartNextPacketByKey

IoStartPacket