動的なオーディオ サブデバイス
一部のオーディオ アダプターは、実行時に内部トポロジを動的に変更できます。 PortCls システム ドライバー (Portcls.sys) でシステム提供の機能を使用することで、アダプター ドライバーは、動的に構成可能なオーディオ ハードウェア用のソフトウェアをサポートできるようになります。
たとえば、Intel High Definition Audio Specification では、HD オーディオ リンク インターフェイスを介してハイ ディフィニション オーディオ (HD オーディオ) コントローラーに接続する統合オーディオ アダプターを指すために、オーディオ コーデックという用語を使用しています。 一般的なオーディオ コーデックではジャック プレゼンス検出がサポートされています。プラグがジャックに挿入されたりジャックから取り外されたりすると、ハードウェアは割り込みを生成して、ハードウェア構成の変更をドライバーに通知します。 たとえば、ドライバーは、ヘッドフォンのオーディオ サブデバイスを表す KS フィルターを作成することによって、ヘッドフォン ジャックへのプラグの挿入に応答します。 ドライバーは、ハードウェア リソースをフィルターに割り当て (たとえば、ヘッドフォンは、ボリューム コントロールとデジタル アナログ コンバーター (DAC) が必要になる場合があります)、オーディオ デバイスとしてフィルターを登録します。 ユーザーがヘッドフォンを取り外すと、ドライバーはリソースを解放し、フィルターを削除してレジストリから削除することで応答します。
この動作により、オーディオ アプリケーションがどのオーディオ デバイスが登録されているかを確認するときに、現在接続されているデバイスのみが検出されます。 デバイスが取り外されている場合、レジストリには表示されません。
Windows Vista、Windows Server 2003 Service Pack 1 (SP1)、および Windows XP Service Pack 2 (SP2) では、PortCls は IUnregisterSubdevice インターフェイスと IUnregisterPhysicalConnection インターフェイスをサポートしています。 オーディオ アダプター ドライバーは、これら 2 つのインターフェイスを使用して、使用されなくなったオーディオ サブデバイスを削除します。 Windows Server 2003、Windows XP を含む以前のバージョンの Windows では、これらのインターフェイスはサポートされていません。 これらの以前のバージョンの Windows では、サブデバイスは作成できますが、削除することはできません。サブデバイスが作成されると、そのサブデバイスはアダプター ドライバー オブジェクトの有効期間中存在します。
IUnregisterSubdevice インターフェイスには、アダプター ドライバーが PcRegisterSubdevice ルーチンの以前の呼び出しを通じて登録したサブデバイスを "登録解除" するために使用できる、1 つのメソッドが含まれています。
IUnregisterSubdevice::UnregisterSubdevice
IUnregisterPhysicalConnection インターフェイスには、アダプター ドライバーがサブデバイス間の物理接続の登録を解除するために使用できる次の 3 つのメソッドが含まれています。
IUnregisterPhysicalConnection::UnregisterPhysicalConnection
IUnregisterPhysicalConnection::UnregisterPhysicalConnectionFromExternal
IUnregisterPhysicalConnection::UnregisterPhysicalConnectionToExternal
これらのメソッドは、PcRegisterPhysicalConnection、PcRegisterPhysicalConnectionFromExternal、および PcRegisterPhysicalConnectionToExternal ルーチンの以前の呼び出しによってドライバーが登録した接続を削除します。 PortCls は、PcRegisterPhysicalConnectionXxx 呼び出しからの情報を格納して、ポート ドライバーが後でこの情報を使用して KSPROPERTY_PIN_PHYSICALCONNECTION プロパティ要求に応答できるようにします。 アダプターのトポロジからサブデバイスを削除するときに、ドライバーは、トポロジのその部分へのサブデバイスの物理接続の登録を解除する必要があります。 サブデバイスの物理接続の登録を解除しないと、メモリ リークが発生する可能性があります。 PortCls は、Windows 2000 以降の PcRegisterXxx ルーチンをサポートしています。
このセクションの次のトピックでは、動的トポロジを使用してアダプターのドライバー サポートを実装する方法について説明します。