SCSI HBA のデバイス オブジェクトの例
次の図は、PCI IEEE 1394 コントローラーを持つシステム用に作成されたデバイス オブジェクトと、CD-ROM とパーティション分割可能なディスク デバイスが接続された PCI SCSI アダプターを示しています。 IEEE 1394 コントローラーに接続されているデバイスのオブジェクトについては、「IEEE 1394 コントローラーのデバイス オブジェクトの例」を参照してください。
SCSI HBA 上の CD-ROM およびディスク デバイスのデバイス オブジェクト ツリー
図の下部から、各デバイス オブジェクトとそれに関連付けられているドライバーについて説明します。
記憶域バス ドライバーは、記憶域バスの FDO を作成し、PnP マネージャーによって作成された記憶域バス PDO に接続します (この図では示されていません)。 記憶域バス FDO の下にあるデバイス オブジェクト ツリーの構造は、記憶域バスと、それがシステムにどのように統合されているかによって異なります。 ポート ドライバー レベルを超えた記憶域ドライバーは、これらの下位オブジェクトと対話しません。
この図は、PCI バスを使用するシステムの PCI バス ドライバーによって作成された記憶域バス FDO を示しています。
PCI バス ドライバーは、そのバス上の各記憶域アダプターの PDO を列挙して作成します。 対応する記憶域ポート ドライバーは、FDO を作成し、そのアダプターの PDO に接続します。
次の図は、2 つのアダプター PDO を示しています。1 つは IEEE 1394 コントローラー (IEEE 1394 コントローラーのデバイス オブジェクトの例で説明) と SCSI HBA 用です。 SCSI ポート ドライバーと関連付けられているミニポート ドライバーは、FDO を作成し、SCSI アダプター PDO に接続します。
記憶域ポート ドライバーは、アダプターに接続されている各ターゲット デバイスの PDO を作成することによって、ターゲット デバイスを仮想化します。 この図は、SCSI ポート/ミニポート ドライバーによって作成されたこのような 2 つの PDO を示しています。1 つはハード ディスク ドライブ用、1 つは CD-ROM 用です。
1 つ以上のフィルター ドライバーは、記憶域ポート ドライバーによってエクスポートされたターゲット デバイス PDO にフィルター デバイス オブジェクト (フィルター DO) をアタッチできます。 このようなフィルター ドライバーは、たとえば、デバイス固有の問題を回避するために、汎用クラスまたはポート ドライバーにハードウェア固有の変更を必要とせず、クラス ドライバーによってターゲット デバイスに送信される要求をインターセプトおよび変更できます。
この図は、CD オーディオ フィルター ドライバーによって CD-ROM の PDO にアタッチされたフィルター DO を示しています。
記憶域クラス ドライバーは、FDO を作成し、次の下位のデバイス オブジェクトに接続します。これは、記憶域ポート ドライバーによってエクスポートされたターゲット デバイス PDO か、中間のフィルター ドライバーによってスタックにアタッチされたフィルター DO です。 クラス ドライバーは、下位ドライバーのデバイス オブジェクトを介して、ストレージ デバイスに後続のすべての要求を発行します。
この図は、このような 2 つの FDO を示しています。1 つは CD-ROM デバイスを表し、1 つはハード ディスク ドライブのパーティション 0 を表します。 パーティション 0 は生ディスク全体を表し、ドライブがパーティション分割されているかどうかに関係なく、常に存在します。
クラス ドライバーはバス ドライバーとしても機能し、PnP マネージャーがその子デバイスを照会するときに PDO の一覧を返します (BusRelations を使用する IRP_MN_QUERY_DEVICE_RELATIONS)。 たとえば、リムーバブル ディスクなどのパーティション分割されたメディア デバイスのドライバーは、そのパーティションを表す PDO の一覧を返す場合があります。 上位レベルのドライバーは、これらの PDO に FDO をアタッチします。
この図は、ターゲット デバイスとしてアドレス指定できるディスク パーティションを表す 3 つの PDO を示しています。
固定ディスクの場合、パーティション マネージャーはパーティション 0 を表す FDO に接続し、すべてのパーティションに代わって PnP 操作を処理します。 パーティション マネージャーのアクティビティは、ディスク クラス ドライバーと上位レベルのフィルター ドライバーに対して透過的です。
クラス ドライバーの上に 1 つ以上のフィルター ドライバーをアタッチできます。 下位レベルのフィルター ドライバーとは異なり、上位レベルのフィルター ドライバーは、クラス ドライバーに送信された IRP をインターセプトし、次の下位デバイス オブジェクトに転送する前にそれらを変更できます。 フィルター ドライバーは、読み取り/書き込み要求をインターセプトし、必要に応じてデータを変換したり、追加の I/O 制御コード (IOCTL) を定義したりできます。たとえば、ユーザー アプリケーションがパスワードやその他の関連情報を提供できるようにします。
この図は、ディスク暗号化フィルター ドライバーによって作成され、パーティション 1 のディスク PDO に接続されたフィルター DO を示しています。