次の方法で共有


SCSI ポート I/O モデル

SCSI ポート ドライバーは、ディスパッチ テーブルとドライバー オブジェクト内のミニポート ドライバー コールバック ルーチンへの一連のポインターによって、ミニポート ドライバーと通信します。 ミニポート ドライバーは、これらのコールバック ポインターを使用して SCSI ポートのディスパッチ テーブルとドライバー オブジェクトを初期化するために、その DriverEntry ルーチンから ScsiPortInitialize を呼び出します。 このようなコールバック ポインターの 1 つは、I/O 要求の処理に使用されるミニポート ドライバーの開始 I/O ルーチンのエントリ ポイントです。 ポート ドライバーは、ドライバー オブジェクトの DriverStartIo メンバーにこのポインターを割り当てます。

SCSI ポートは、上位レベルのドライバーから I/O 要求を受信するたびに、内部キューに要求を入れます。 SCSI ポートの内部キューの詳細については、「SCSI ポート ドライバーのキュー管理」を参照してください。

ターゲット デバイスが次の I/O 要求を受信する準備ができたら、SCSI ポートは IoStartPacket を呼び出します。その結果、DriverObject->DriverStartIo に格納されているミニポート ドライバーの開始 I/O コールバック ルーチンが呼び出されます。 ミニポート ドライバーの開始 I/O ルーチンの操作と必要な特性については、「SCSI ミニポート ドライバーの HwScsiStartIo ルーチン」を参照してください。

SCSIポートは、ミニポート ドライバの開始 I/Oルーチンを呼び出す前に、プロセッサの IRQL を引き上げます。これは、割り込みをマスクし、開始 I/O ルーチンが重要なオペレーティング システムとドライバーの構造へのアクセスを同期していることを保証するためです。

ストレージ クラス ドライバーと SCSI ポート ドライバー間の I/O 要求パケットのフローは非同期ですが、SCSI ポート ドライバーとターゲット デバイス間の I/O 要求パケットのフローは同期されています。 SCSI ポートは、以前の I/O 要求が完了する前に、クラス ドライバーが新しい I/O 要求を SCSI ポートに送信できるようにする内部キュー システムを使用します。 ただし、SCSI ポートは、ミニポート ドライバーが次の I/O 要求を受信する準備ができているという通知をミニポート ドライバーから受信するまで、ターゲット デバイスに次の I/O 要求を送信しません。 ミニポート ドライバーは、ScsiPortNotification ライブラリ ルーチンを呼び出すことによって SCSI ポートに通知します。

Storport ドライバーは、特に割り込みのマスクに関して、より柔軟な I/O モデルを提供します。 Storport I/O モデルと SCSI ポート I/O モデルの違いについては、「Storport I/O モデル」を参照してください。