DispatchRead、DispatchWrite、DispatchReadWrite ルーチン

ドライバーの DispatchRead ルーチンと DispatchWrite ルーチンは、それぞれ、IRP_MJ_READIRP_MJ_WRITE の I/O 関数コードを使用して IRP を処理します。 または、DispatchReadWrite ルーチンを組み合わせて、これら両方の I/O 関数コードの IRP を処理することもできます。

システムにデータを転送できるデバイスのすべてのドライバーには、DispatchRead ルーチンが必要です。 データをシステムに転送できるデバイスのすべてのドライバーには、DispatchRead ルーチンが必要です。 双方向にデータを転送するドライバーでは、両方の機能を併せ持つ DispatchReadWrite ルーチンを使用できます。

下位レベルのドライバーは、IRP_MJ_READ 要求と IRP_MJ_WRITE 要求を非同期的に処理します。 したがって、最上位ドライバーの DispatchRead ルーチンまたは DispatchWrite ルーチンは、IRP のそのドライバーの I/O スタック位置に有効なパラメーターがある場合、これらの要求を他のドライバーに渡してさらに処理する必要があります。

ドライバーがそのデバイス オブジェクトをバッファー付き I/O とダイレクト I/O のどちらに設定するかによって、転送要求の処理方法が異なります。 特に、ダイレクト I/O を使用して DMA 操作を実行するドライバーは、IRP_MJ_READ 要求または IRP_MJ_WRITE 要求を満たすために、大量の転送要求を小さな転送操作のシーケンスに分割しなければならない場合があります。 詳細については、「I/O のプログラミング手法」を参照してください。

以下の各サブセクションでは、バッファー付き I/O とダイレクト I/O を使用する最下位レベルのデバイス ドライバーと、その上に重ねられた上位レベルのドライバーにおける DispatchReadWrite ルーチンの設計と実装に関する考慮事項について説明します。

転送の非同期処理

バッファー付き I/O を使用した DispatchReadWrite

ダイレクト I/O を使用した DispatchReadWrite

上位レベル ドライバーの DispatchReadWrite

読み取り/書き込みディスパッチ ルーチンの概要