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 |
対象プラットフォーム | ユニバーサル |
Header | 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) |