IoStartNextPacket 関数 (wdm.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 以降で使用できます。
対象プラットフォーム ユニバーサル
Header wdm.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