Windows ストレージ ドライバーのアーキテクチャ
Windows では、周辺機器にはクラス ドライバーとフィルター ドライバーがあります。 これらのドライバーは、その上に重ねて配置された中間レベルまたは最上位レベルのドライバーと、システムが提供するポート ドライバーの間のインターフェイスとして機能します。
ユーザー アプリケーションまたはカーネル コンポーネントからの I/O 要求は、I/O システム サービスと、ファイル システム ドライバーなどの 1 つ以上の中間または最上位レベルのドライバーを介してストレージ クラス ドライバーに到達します。 記憶域クラス ドライバーは、受け取った標準的な IRP を、システム定義の 記憶域要求ブロック (SRB) を含む IRP へと変換し、次の下位ドライバーに送信します。 記憶域ポート ドライバーは、クラス ドライバーからバス固有のコマンドに SRB を変換します。このコマンドは、I/O バス ドライバーと、場合によっては 1 つ以上のフィルター ドライバーを介して記憶域ホスト バス アダプター (HBA) に送信されます。
次の図は、Windows ストレージ ドライバーの階層化アーキテクチャを示しています。
図の下部から次の手順を実行します。
記憶域ポート ドライバー は、ディスク、テープ、DVD などのシステム提供のドライバーを含むすべての Windows 記憶域クラス ドライバーへのインターフェイスを定義します。 このポート/クラス インターフェイスは、各デバイスが接続されている HBA のアダプター固有の要件からクラス ドライバーを絶縁します。 記憶域ポート ドライバーは、対応する HBA 上のデバイスのすべてのドライバーのバスへのアクセスも同期します。 システムは、SCSI、IDE、USB、および IEEE 1394 アダプター用の記憶域ポート ドライバーを提供します。
記憶域ポート ドライバーは、次の上位ドライバー (記憶域クラス ドライバーまたは中間フィルター ドライバー) から SRB を受信し、次のように処理します。
- 記憶域ポート ドライバーは、オペレーティング システムに依存しない HBA 固有の Storport ミニポート ドライバーに、CDN を使用して SRB を渡します。 このミニポート ドライバーは、対応するポート ドライバーに動的にリンクされ、特定の HBA のハードウェア固有のサポートを提供します。 ミニポート ドライバーの実装の詳細については、「Storport ミニポート ドライバー
を参照してください。 - レガシ IDE/ATAPI または IEEE 1394 バスのストレージ ポート ドライバーは、記憶域クラス ドライバーから受信した SRB を、基になるアダプターで必要な形式に変換します。 たとえば、バス固有のトランスポート プロトコルに従って PDB を再パッケージ化する場合があります。 または、異なる形式に変換することにより、基になるバスの特有の問題から上位レベルのドライバを隠蔽する可能性があります。
- 記憶域ポート ドライバーは、オペレーティング システムに依存しない HBA 固有の Storport ミニポート ドライバーに、CDN を使用して SRB を渡します。 このミニポート ドライバーは、対応するポート ドライバーに動的にリンクされ、特定の HBA のハードウェア固有のサポートを提供します。 ミニポート ドライバーの実装の詳細については、「Storport ミニポート ドライバー
上位または下位の 記憶域フィルター ドライバー は、システム提供の記憶域クラス ドライバーによって提供されないデバイス固有の機能をサポートします。 下位フィルター 記憶域ドライバーは、記憶域クラス ドライバーによって発行された SRB や IRP を監視します。 次の下位ドライバーに渡す前に、必要に応じて変更します。これは、記憶域ポート ドライバーまたは別の記憶域フィルター ドライバーにすることができます。
記憶域フィルター ドライバーの実装の詳細については、「記憶域フィルター ドライバーの」を参照してください。
記憶域クラス ドライバー は、SCSI ポート/クラス インターフェイスを使用して、システムが記憶域ポート ドライバーを提供する任意のバス上でその種類のデバイスを制御します。 クラス ドライバーは、デバイスの特定のクラスに固有です。たとえば、1 つのクラス ドライバーは、サポートされている任意のバスですべての CD-ROM デバイスを実行できます。は、すべてのディスク デバイスを制御できます。 ストレージ クラス ドライバーは、ユーザー アプリケーションまたは記憶域スタックの上位のドライバーからの I/O 要求を処理します。 これは、CDN を含む SRB をビルドし、デバイスが SCSI デバイスであるかのように、次の下位ドライバー (記憶域ポート ドライバーまたは介在するフィルター ドライバー) にそれらの SRB を発行することによって行われます。
記憶域クラス ドライバーの実装は、上位レベルのドライバーに対して透過的です。 テープまたはメディア チェンジャー デバイスのクラス ドライバーは、システム提供のクラス ドライバーにリンクするデバイス固有のミニクラス ドライバーとして実装されます。 ディスクや CD-ROM/DVD など、他のストレージ デバイス用のシステム提供のクラス ドライバーは、単一モノリシック ドライバーとして実装されます。
記憶域クラス ドライバーの実装については、「記憶域クラス ドライバーの」を参照してください。 テープまたはチェンジャー のミニクラス ドライバーの実装の詳細については、「テープ ドライバーの と チェンジャー ドライバーの」をそれぞれ参照してください。
上位フィルター 記憶域ドライバーは、記憶域スタックの上位のユーザー アプリケーションとドライバーから IRP をインターセプトします。 次に、次の下位ドライバー (記憶域クラス ドライバーまたは別の記憶域フィルター ドライバー) に渡す前に変更する可能性があります。 フィルター ドライバーは、通常、基になるデバイスのパフォーマンスを監視します。
デバイスが接続されているバスの種類とその記憶域ポート ドライバーの実装は、上位レベルのドライバーに対して透過的です。
記憶域ポート ドライバーが実装されている場合があります。
- Storport または SCSI ポート ドライバーなど、ポート/ミニポート ドライバーのアーキテクチャに従います。
- IDE/ATAPI ポート ドライバーなど、1 つの標準的なハードウェアを制御するモノリシック ドライバーとして。
- IEEE 1394 ポート ドライバーなど、別のドライバー スタックで必要な形式に SRB を変換するフィルター ドライバーとして。
システム提供の SCSI ポート ドライバーは、記憶域クラス ドライバーと、同じ種類の非 SCSI 記憶域デバイスを制御する SCSI ミニポート ドライバー間のインターフェイスとして機能することもできます。 たとえば、ドライバー ライターは、新しいディスク アレイ コント ローラーのドライバーを記述するのではなく、システム SCSI ポート ドライバーにリンクし、それが提供するインターフェイスを使用する擬似 SCSI ミニポート ドライバーを記述することによってかなりの労力を節約できます。 このようなミニポート ドライバーは、デバイス固有のコマンドに着信 SCSI コマンドを変換する必要があります。 一方、システム提供のポートとクラス ドライバーは、擬似 SCSI ミニポートの代わりに必要な作業の多くを処理します。 この作業には、初期化中のレジストリ アクセス、すべてのリソースとオブジェクトの割り当て、同期、ミニポートのデバイスの機能に合わせて要求された転送の事前設定、および要求の再試行が含まれます。