次の方法で共有


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 を含む)
ライブラリ NtosKrnl.lib
DLL NtosKrnl.exe
IRQL DISPATCH_LEVEL (「解説」セクションを参照)
DDI コンプライアンス規則 する HwStorPortProhibitedDDDIs(storport), IrqlDispatch(storport), IrqlDispatch(storport), IrqlDispatch(wdm), SpinLockSafe(storport), SpinLockSafe(storport), SpinLockSafe(wdm), StartIoRecursion(wdm)

関連項目

DEVICE_OBJECT

IoSetStartIoAttributes

IoStartNextPacketByKey

IoStartPacket