Windows ストレージ ドライバーのアーキテクチャWindows Storage Driver Architecture

周辺記憶装置の Windows オペレーティングシステムクラスとフィルタードライバーは、クラスまたはフィルタードライバーの上にある中間レベルまたは最高レベルのドライバーと、システムによって提供されるポートドライバーとの間のインターフェイスとして機能します。Windows operating system class and filter drivers for peripheral storage devices act as an interface between any intermediate or highest level drivers layered above the class or filter driver and a system-supplied port driver.

ユーザーアプリケーションまたはカーネルコンポーネントからの i/o 要求は、i/o システムサービスと、ファイルシステムドライバーなどの1つ以上の中間レベルまたは最高レベルのドライバーを使用して、ストレージクラスのドライバーに届きます。I/O requests from a user application or kernel component reach storage class drivers through I/O System Services and one or more intermediate or highest level drivers, such as a file system driver. ストレージクラスドライバーは、各 IRP を次の下位のドライバーに送信する前に、SCSI コマンド記述子ブロック (CDBs) を含むシステム定義 SCSI 要求ブロック (SRBs) を使用して、Irp に入る標準の Irp を変換します。Storage class drivers translate the standard IRPs they get into IRPs with system-defined SCSI request blocks (SRBs) containing SCSI command descriptor blocks (CDBs) before sending each IRP on to the next-lower driver. ストレージポートドライバーは、SRBs をクラスドライバーからバス固有のコマンドに変換します。このコマンドは、i/o バスドライバーと、場合によっては1つ以上のフィルタードライバーを介して、記憶域 HBA に送信します。A storage port driver translates SRBs from class drivers into bus-specific commands which it sends to the storage HBA, through an I/O bus driver and possibly one or more filter drivers.

次の図は、Windows storage ドライバーの多層アーキテクチャを示しています。The following figure shows the layered architecture of Windows storage drivers.

nt ベースのオペレーティングシステムストレージドライバーの多層アーキテクチャを示す図

図の一番下から、それぞれの種類のストレージドライバーについて説明します。Starting from the bottom of the figure, the following describes each type of storage driver:

  1. ストレージポートドライバー は、システムによって提供されるディスク、テープ、CD-ROM、DVD、およびチェンジャークラスのドライバーを含む、すべての Windows ストレージクラスドライバーへのインターフェイスを定義します。A storage port driver defines an interface to all Windows storage class drivers, including the system-supplied disk, tape, CDROM, DVD, and changer class drivers. このポート/クラスインターフェイスは、それぞれのデバイスが接続されているホストバスアダプターのアダプター固有の要件からクラスドライバーを分離します。This port/class interface insulates class drivers from adapter-specific requirements of the host bus adapter to which their respective devices are connected. また、対応する HBA のすべてのデバイスドライバーについて、バスへのアクセスが同期されます。A storage port driver also synchronizes access to the bus for all drivers of devices on the corresponding HBA. システムは、SCSI、IDE、USB、および IEEE 1394 アダプター用の記憶ポートドライバーを提供します。The system supplies storage port drivers for SCSI, IDE, USB and IEEE 1394 adapters.

    記憶域ポートドライバーは、次の上位のドライバー (記憶域クラスドライバーまたはそれに介在するフィルタードライバー) から SRBs を受信し、次のように処理します。A storage port driver receives SRBs from the next higher driver (a storage class driver or intervening filter driver) and processes them as follows:

    • SCSI (またはその他のバス) 用の記憶域ポートドライバーは、SRBs を CDBs on に渡して、オペレーティングシステムに依存しない HBA 固有の Storport ミニポートドライバー に渡します。これは対応するポートドライバーに動的にリンクされ、特定の HBA に対するハードウェア固有のサポートを提供します。The storage port driver for a SCSI, or other bus, passes SRBs with CDBs on to an operating system-independent, HBA-specific Storport miniport driver , which is dynamically linked to its corresponding port driver and provides hardware-specific support for a particular HBA. SCSI ミニポートドライバーの実装の詳細については、「 Storport ミニポートドライバー」を参照してください。For information about implementing a SCSI miniport driver, see Storport Miniport Drivers.
    • レガシ IDE/ATAPI または IEEE 1394 バス用のストレージポートドライバーは、ストレージクラスドライバーから受信した SRBs を、基になるアダプターが必要とする形式に変換します。たとえば、バス固有のトランスポートプロトコルに従って CDBs を再パッケージ化したり、別の形式に変換したりすると、上位のドライバーが基になるバスの特性からThe storage port driver for a legacy IDE/ATAPI or IEEE 1394 bus translates the SRBs received from the storage class driver into the format required by the underlying adapter--for example, repackaging CDBs according to a bus-specific transport protocol, or translating them into a different format, thereby insulating upper level drivers from peculiarities of the underlying bus.
  2. ストレージフィルタードライバー の上限または下限は、システム提供のストレージクラスドライバーでは提供されないデバイス固有の機能をサポートしています。An upper or lower storage filter driver supports device-specific functionality not provided by a system-supplied storage class driver. フィルターストレージドライバーが低い場合は、記憶域クラスドライバーによって発行された SRBs や Irp を監視し、必要に応じて次の下位のドライバー (記憶域ポートドライバーまたは他の記憶域フィルタードライバー) に渡す前に、それらを変更します。A lower filter storage driver monitors SRBs and/or IRPs issued by a storage class driver and modifies them as needed before passing them to the next-lower driver (a storage port driver or another storage filter driver).

    記憶域フィルタードライバーの実装の詳細については、「 ストレージフィルタードライバー」を参照してください。For information about implementing a storage filter driver, see Storage Filter Drivers.

  3. ストレージクラスドライバー は、SCSI ポート/クラスインターフェイスを使用して、システムが記憶ポートドライバーを提供する任意のバス上のデバイスの種類を制御します。A storage class driver uses the SCSI port/class interface to control a device of its type on any bus for which the system provides a storage port driver. クラスドライバーは特定のデバイスクラスに固有のものです。たとえば、1つのクラスドライバーで、サポートされている任意のバス上のすべての CD-ROM デバイスを実行できます。また、すべてのディスクデバイスを制御することもできます。A class driver is specific to a particular class of device--for example, one class driver can run all CD-ROM devices on any supported bus; another can control all disk devices. ストレージクラスドライバーは、デバイスが SCSI デバイスであるかのように、CDBs を含む SRBs を構築し、それらの SRBs を次の下位のドライバー (ストレージポートドライバーまたは介在するフィルタードライバー) に発行することによって、ストレージスタック内のユーザーアプリケーションまたはドライバーからの i/o 要求を処理します。The storage class driver handles I/O requests from user applications or drivers higher in the storage stack by building SRBs containing CDBs and issuing those SRBs to the next-lower driver (a storage port driver or intervening filter driver), just as if the device were a SCSI device.

    ストレージクラスドライバーの実装は、上位レベルのドライバーに対して透過的です。The implementation of a storage class driver is transparent to upper level drivers. テープまたはメディアチェンジャーデバイスのクラスドライバーは、システムによって提供されるクラスドライバーにリンクするデバイス固有の miniclass ドライバーとして実装されます。A class driver for a tape or medium changer device is implemented as a device-specific miniclass driver that links to a system-supplied class driver. ディスクや CD-ROM/DVD など、他の記憶装置用のシステム提供のクラスドライバーは、単一のモノリシックドライバーとして実装されます。System-supplied class drivers for other storage devices, such as disk and CD-ROM/DVD, are implemented as single monolithic drivers.

    ストレージクラスドライバーの実装の詳細については、「 ストレージクラスドライバー」を参照してください。For information about implementing a storage class driver, see Storage Class Drivers. Tape またはチェンジャー miniclass ドライバーの実装の詳細については、それぞれ「 テープドライバーチェンジャードライバー」を参照してください。For information about implementing a tape or changer miniclass driver, see Tape Drivers and Changer Drivers, respectively.

  4. 上位フィルターのストレージドライバーは、記憶域スタックの上位にあるユーザーアプリケーションとドライバーから Irp をインターセプトし、次に小さいドライバー (記憶域クラスドライバーまたは他の記憶域フィルタードライバー) に渡す前に変更する可能性があります。An upper filter storage driver intercepts IRPs from user applications and drivers higher in the storage stack and then possibly modifies them before passing them to the next-lower driver (a storage class driver or another storage filter driver). フィルタードライバーは、通常、基になるデバイスのパフォーマンスを監視します。Filter drivers typically monitor performance of the underlying device.

デバイスが接続されているバスの種類と、そのストレージポートドライバーの実装は、上位レベルのドライバーに対して透過的です。The type of bus to which a device is attached and the implementation of its storage port driver are transparent to upper level drivers. 記憶域ポートドライバーは、SCSI ポートドライバーなどのポート/ミニポートドライバーのアーキテクチャに従って実装される場合があります。IDE/ATAPI ポートドライバーなど、単一の標準のハードウェアを制御するモノリシックドライバー。または、SRBs を、IEEE 1394 ポートドライバーなど、別のドライバースタックで必要な形式に変換するフィルタードライバーとして。A storage port driver might be implemented according to the port/miniport driver architecture, like the SCSI port driver; as a monolithic driver that controls a single, standard piece of hardware, such as the IDE/ATAPI port driver; or as a filter driver that translates SRBs into the format required by a different driver stack, such as the IEEE 1394 port driver.

システムで提供される SCSI ポートドライバーは、同じ種類の SCSI 以外の記憶装置を制御する記憶域クラスドライバーと SCSI ミニポートドライバーの間のインターフェイスとして機能することもできます。The system-supplied SCSI port driver can also act as an interface between a storage class driver and a SCSI miniport driver that controls a non-SCSI storage device of the same type. たとえば、新しいディスク配列コントローラー用のドライバーを記述するのではなく、ドライバーライターは、システムの SCSI ポートドライバーにリンクする疑似 SCSI ミニポートドライバーを作成し、そのインターフェイスが提供するインターフェイスを使用することにより、設計、開発、およびデバッグの作業を大幅に節約できます。For example, rather than writing a driver for a new disk-array controller, a driver writer can save considerable design, development, and debugging effort by writing a pseudo-SCSI miniport driver that links to the system SCSI port driver and uses the interface it provides. このようなミニポートドライバーは、着信 SCSI コマンドをデバイス固有のコマンドに変換するために必要です。Such a miniport driver is required to translate incoming SCSI commands into device-specific commands. 一方、システムによって提供されるポートとクラスのドライバーは、擬似 SCSI ミニポートに代わって、初期化中のレジストリアクセス、リソースとオブジェクトの割り当て、同期、要求された転送の事前サイズ設定を、ミニポートのデバイスの機能に合わせて実行し、要求を再試行します。On the other hand, the system-supplied port and class drivers handle much necessary work on a pseudo-SCSI miniport's behalf, including registry accesses during initialization, all resource and object allocations, synchronization, presizing of requested transfers to suit the capabilities of the miniport's device, and retrying requests.

SRBs の詳細については、Kernel-Mode ドライバーアーキテクチャリファレンスを参照してください。For more detailed information about SRBs, see the Kernel-Mode Driver Architecture Reference. CDBs に関するデバイスタイプ固有の情報については、SCSI 3 標準規格の適切なコマンドセットを参照してください。For device-type-specific information about CDBs, consult appropriate command sets in the INCITS SCSI-3 standards.