WDM オーディオの用語
このセクションでは、Microsoft Windows Driver Model (WDM) オーディオ ドライバー アーキテクチャと汎用 Windows 階層化ドライバー アーキテクチャの用語の違いについて説明します。 汎用ドライバー アーキテクチャは、SCSI ポート/ミニポート ドライバーによって例示されます (ストレージ ドライバー アーキテクチャを参照)。
汎用オーディオ ドライバー アーキテクチャと WDM オーディオ ドライバー アーキテクチャによって定義される用語は似ていますが、以下で説明するように、いくつかの重要な違いがあります。
ミニポートドライバー(汎用)
ミニポート ドライバー (汎用) は、システム バス (PCI や ISA など) に存在するアダプターのハードウェア固有のドライバーです。 このドライバーには 1 つのエントリ ポイントDriverEntry があり、関数のテーブルをポート ドライバーに登録します。 この関数のテーブルは、ミニポート ドライバーの上端インターフェイスとして機能します。
ミニポート ドライバーは、ドライバー スタックのポート ドライバーの下にあります。 つまり、ミニポート ドライバーへのすべての呼び出しはポート ドライバーから行われ、ミニポート ドライバーからのすべての呼び出しはポート ドライバーの下端インターフェイスに対して行われます。
次の図は、スタック、上端インターフェイス、および下端インターフェイスという用語が、このコンテキストで使用される意味を示しています。 ポート ドライバーを表すブロックは、ミニポート ドライバーを表すブロックの上に積み重ねられます。 したがって、ミニポート ドライバーは "スタック" 内のポート ドライバーの下に配置されます。
ポート ドライバーとミニポート ドライバーは、相互に公開するソフトウェア インターフェイスを介して通信します。 前の図では、これらのインターフェイスは、ポート ドライバーを表すブロックの下端と、ミニポート ドライバーを表すブロックの上端に関連付けられています。 この表現は、"下端インターフェイス"および"上端インターフェイス"という用語のソースです。
ポートドライバー(汎用)
ポート ドライバー (汎用) は、ミニポート ドライバーを囲みます。
ポートドライバー:
WDM ストリーミング フィルターを実装します。
残りのオペレーティング システムに共通のインターフェイスを提供します。
システムからの I/O 要求を処理し、これらの要求をミニポート ドライバーの関数テーブルへの呼び出しとして再キャストします。
ミニポート ドライバーにサポート関数のライブラリ (ポート ドライバーの下端インターフェイス) を提供します。
ポート ドライバーは、ミニポート ドライバーからオペレーティング システムの詳細の多くを非表示にし、ミニポート ドライバーは、ポート ドライバーから基になるハードウェアの詳細を非表示にします。 ポート ドライバーの実装は、オペレーティング システムのリリースごとに変更される可能性がありますが、ミニポート ドライバーへのポート ドライバーのインターフェイスは多かれ少なかれ変更されていないため、ミニポート ドライバーはプラットフォームに大きく依存しません。
ミニドライバー (汎用)
ミニドライバー (汎用) は、バス上のハードウェア コンポーネントを表します。 ミニドライバーは、バス ドライバーを使用してバス経由で物理デバイスと通信し、バス ドライバーと 1 つ以上のクラス ドライバーをバインドします。
クラス ドライバーは、ミニドライバーが論理デバイスの種類としてクライアントに物理デバイスを提示するのに役立ちます。 WDM 環境では、通常、ミニドライバーはクラス ドライバーから IRP 形式で要求を受信し、IRP 形式でバス ドライバーに要求を送信します。
ミニドライバーは、複数のクラス ドライバーと通信する必要がある場合もあります。 複数のクラス ドライバーにバインドするミニドライバーの例は、IEEE 1394 バス上の CD-ROM ドライブのミニドライバーです。 ファイル システム ドライバーにバインドして、ファイル システムからドライブにアクセスできる場合があります。 ただし、オーディオを CD からストリーミングできるように、Redbook システム ドライバーにもバインドされます。
バス ドライバー (汎用)
バス ドライバー (汎用) は、ミニドライバーに物理バスへのアクセスを提供します。 Microsoft Windowsハードウェア アブストラクション レイヤー (HAL) は、システム バスへのアクセスを提供するため、システム バス ドライバーと呼ばれることもあります。 詳細については、バス ドライバーを参照してください。
クラスドライバー(汎用)
クラス ドライバー (汎用) は、同様のデバイスのクラス間で共通の動作を実装します。
クラスドライバー:
ハードウェア固有のドライバーの機能の重複を排除します。
バス固有ではありません。
リソースの問題 (DMA や割り込みなど) を認識していない。
ミニポート ドライバー (WDM オーディオ)
ミニポート ドライバー (WDM オーディオ) は、システム バス上にあるオーディオ アダプター カード上の機能に対する機能固有のインターフェイスを実装します。 ミニポート ドライバーはアダプター ドライバーのコンポーネントです。 オペレーティング システムによってドライバーとして認識されません。 この点で、オーディオ ミニポート ドライバーは汎用ミニポート ドライバーとは異なります。
汎用ミニポート ドライバーとは異なり、オーディオ ミニポート ドライバーは DriverEntry を実装せず、登録されておらず、サポートのためにそれぞれのポート ドライバーに完全に依存していません。 複数の機能に対応する複数のオーディオ ミニポート ドライバーを 1 つのアダプター ドライバーにリンクできます (1 つのデバイス オブジェクトに関連付けます)。
アダプター ドライバー (WDM オーディオ)
アダプター ドライバー (WDM オーディオ) は、特定のアダプターに関連付けられているすべてのミニポート ドライバーのコンテナーとして機能します。 このアダプター ドライバーは、オペレーティング システムによってドライバーとして認識され、独自の.sys ファイルに含まれています。
オーディオ アダプター ドライバーは、一連のミニポート ドライバーと、初期化の問題に対処する追加のコードで構成されます。 たとえば、アダプター ドライバーは DriverEntryエントリ ポイントを実装します。
ポートドライバー (WDM オーディオ)
ポート ドライバー (WDM オーディオ) は、ミニポート ドライバーの代わりに KS フィルターを実装し、ポート クラス ドライバーのコンテキストで動作します。 ポート ドライバーは、ミニポート ドライバーの関数固有のコードを KS フィルターとしてシステムに公開し、アダプターに依存しない機能を実装する役割を担います。
汎用ポート ドライバーとは異なり、オーディオ ポート ドライバーはデバイス オブジェクトを共有するため、インスタンス化の方法が異なります。 また、オーディオ ポート ドライバーは、デバイスのクラスに期待される動作を実装するという点で、汎用ポート ドライバーよりも汎用クラス ドライバーによく似ています (バスに依存しません)。
ポートクラスドライバー(WDMオーディオ)
ポート クラス ドライバー (WDM オーディオ) は、ポート ドライバーのコレクションのコンテナーとして機能し、それぞれが異なる種類のオーディオ ハードウェア機能のサポートを提供します。 次の図は、オーディオ ポート クラスとアダプター ドライバーの関係を示しています。
アダプター ドライバーは、いくつかの異なるハードウェア機能が含まれるアダプター カードを管理します。 前の図に示すように、アダプター ドライバーには、各種類のハードウェア機能を管理するためのミニポート ドライバーが含まれています。 同様に、ポート クラス ドライバーは、複数のハードウェア機能を持つアダプター カードをサポートするように設計されています。 ポート クラス ドライバーは、サポートする適切に定義された関数の種類ごとにポート ドライバーを提供します。 アダプター ドライバーは、特定の関数のミニポート ドライバーを、その関数の種類に対応するポート ドライバーにバインドします。 各関数のポート ドライバーは、関数を使用する WDM オーディオ クライアントとの通信を処理します。 ミニポート ドライバーには、その関数を管理するためのハードウェア固有のコードがすべて含まれています。
ポート クラス ドライバー (WDM オーディオ) は、主に 1 つのデバイス オブジェクトに関連付けられている複数のサブデバイスのコンテナーとして機能します。 バス ドライバーは、列挙するプラグ アンド プレイ (PnP) ノードごとに 1 つの物理デバイス オブジェクト (PDO) を作成します。
オーディオ アダプターの場合、1 つの PnP ノードに複数のオーディオ機能が含まれることがよくあります。 ノードに関連付けられているさまざまな機能を個別のデバイスとして公開するには、通常、アダプターのバス ドライバーを記述する必要があります。 バス ドライバーは、ハードウェア関数を列挙し、対応する PDO を作成します。 このシナリオでは、1 つ以上の関数固有のドライバーが PDO にバインドし、アダプター上の共有リソースにアクセスするためにバス ドライバーとネゴシエートする必要があります。
ポート クラス ドライバーは、カーネル ストリーミング ドライバーの機能を使用して、オペレーティング システムがデバイスを個別のサブデバイスのセットとして認識できるように、1 つのデバイス オブジェクトのさまざまな側面を公開します。
参照文字列がデバイス名に追加され、目的のサブデバイスが指定されます。 カーネル ストリーミング ドライバーは、この参照文字列に基づいて作成 IRP をディスパッチします。 ファイル オブジェクトが作成されると、カーネル ストリーミング ドライバーは、サブデバイスを表すファイル オブジェクトを対象とする IRP のディスパッチを提供します。 さらに、ポート クラス ドライバーは、サブデバイスをパッケージ化するための COM ベースのモデルを実装します。
アダプター ドライバーは、ポート ドライバーとミニポート ドライバーをインスタンス化し、ポート ドライバーの初期化関数へのパラメーターとしてミニポート ドライバーへのポインターを渡すことで、それらをバインドします (サブデバイスの作成のコード例を参照)。 結果のポート/ミニポート ドライバー スタックは、ポート クラス ドライバーがサポートするサブデバイスの種類の 1 つを表す KS フィルターを構成します。
ポート クラス ドライバーの PcRegisterSubdevice 関数は、システムの残りの部分によってデバイスとして認識されるサブデバイスを登録します。 ポート ドライバーは、デバイス オブジェクトを対象とする作成 IRP を受け取りますが、サブデバイスが登録されている参照文字列によって指定された IRP のみを対象とします。 ポート ドライバーは、サブデバイスに関連付けられているファイル オブジェクトを対象とする IRP も受け取ります。 ポート ドライバーは、KS フィルターとしてのサブデバイスの動作と、ミニポート ドライバーとの適切な通信を担当します。
多機能オーディオ カードのドライバーの設計の詳細については、多機能オーディオ デバイスを参照してください。