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) |
関連項目
IoStartPacketの