動的なトポロジの管理
オーディオ アダプターには、ユーザーがアダプターの前面または背面パネルのオーディオ ジャックに接続する外部オーディオ デバイス (スピーカーやマイクなど) を処理するためのサブデバイスがいくつか含まれています。 各サブデバイスは、特定のオーディオ ジャックまたはジャックのグループを提供します。
オーディオ ドライバーは、基本的にサブデバイス内の内部接続と処理要素のマップであるトポロジを提示することによって、各サブデバイスを記述します。 システム提供の Windows API モジュールとベンダーが提供するコントロール パネル アプリケーションは、トポロジ情報を使用してサブデバイスの機能を判断し、その内部制御ポイントを識別します。 詳細については フィルター トポロジの公開 を参照してください。
IUnregisterSubdevice インターフェイスと IUnregisterPhysicalConnection インターフェイスが使用可能になる前に開発された WDM オーディオ ドライバーには、ほとんど静的トポロジがあります。 これらのドライバーの場合、アダプター ドライバーがサブデバイスを管理するミニポート ドライバー オブジェクトを作成した後、そのオブジェクトとそれに関連付けられているサブデバイスは、アダプター ドライバー オブジェクトの有効期間中保持されます。
ただし、動的に構成可能なオーディオ アダプターでは、ユーザーが外部デバイスをオーディオ ジャックに接続して削除するため、アダプター ドライバーは実行時にサブデバイスを作成および削除して、ハードウェア構成の変更を反映できます。 この動作により、サブデバイスは論理的に独立したハードウェア機能として動作できます。 つまり、各サブデバイスは、他のサブデバイスとは別に電源を入れ、構成し、シャットダウンできます。
各サブデバイスには、次の要素で構成される内部トポロジがあります。
サブデバイスを通過するデータ パス。
データ パスに沿って流れるデータ ストリームを処理するトポロジ ノード (ボリューム制御など)。
同じアダプター内の他のサブデバイスへのサブデバイスの物理接続。
アダプター ドライバーは、サブデバイスを動的に削除すると、サブデバイスの内部トポロジにバインドされているハードウェア リソースを解放します。 アダプター ドライバーは、これらのリソースを使用して、可能性のある異なるトポロジを持つ新しいサブデバイスを作成できます。
新しいオーディオ サブデバイスを構成する場合、アダプター ドライバーはサブデバイスのドライバー インターフェイスを 1 つ以上のデバイス インターフェイス クラスのインスタンスとして登録し、I/O マネージャーはインターフェイス クラスとインターフェイス インスタンスを関連付けるシンボリック リンクを含む 1 つ以上のレジストリ エントリを追加します。 サブデバイスにアクセスするために、ユーザー モード クライアントはレジストリからシンボリック リンクを取得し、呼び出しパラメーターとして CreateFile 関数に渡します。 通常、クライアントは、Dsound.dllや Wdmaud.drv などの Windows API モジュール、ベンダーが提供するコントロール パネルまたはオーディオ ユーティリティ プログラムです。 CreateFile の詳細については、Microsoft Windows SDK ドキュメントを参照してください。
ミニポート ドライバーが IUnregisterSubdevice::UnregisterSubdevice メソッドを呼び出してサブデバイスを削除すると、PortCls システム ドライバー (Portcls.sys) は、関連するデバイス インターフェイスのシンボリック リンクをレジストリから削除するように I/O マネージャーに指示します。 デバイス インターフェイスの削除イベントに登録されているコンポーネントは、インターフェイスが削除されると通知を受け取ります。
オーディオ アダプターには、プラグがオーディオ ジャックに挿入またはオーディオ ジャックから削除されたときにミニポート ドライバーに通知するジャックプレゼンス回路を含めることができます。 ユーザーがオーディオ ジャックにプラグを挿入すると、アダプター ドライバーは、関連付けられているサブデバイスのデバイス インターフェイスをレジストリに追加します。 ユーザーがオーディオ ジャックからプラグを削除すると、アダプター ドライバーは、レジストリから対応するデバイス インターフェイスを削除します。
動的トポロジをサポートするオーディオ アダプターには、次の利点があります。
使いやすい
デスクトップ スピーカー、ヘッドフォン、およびその他の外部オーディオ デバイスが実際にオーディオ アダプターの前面または背面パネルのオーディオ ジャックに接続されていない限り、システムは、これらのデバイスを使用可能なオーディオ アプリケーションに表示しません。
電力効率
ユーザーがオーディオ ジャックからプラグを取り外すと、ドライバーは、ジャックを提供するアダプター回路の部分の電源を切ることができます。
コンフィギュレーション可能
サブデバイスを削除した後、ドライバーは、サブデバイスの内部トポロジにバインドされたハードウェア リソースを使用して、可能性のある異なるトポロジを持つ新しいサブデバイスを作成できます。