オペレーティング システムのアップグレード
オーディオ デバイスのドライバー設定は、オペレーティング システムのアップグレード間で頻繁に保持できます。 アップグレード後の目標は、ユーザー設定を前進させ、オーディオ エンドポイントが OS とドライバーの機能を正確に反映できるようにすることです。
オーディオ エンドポイントの移行プロセス
OS のアップグレード中に、オーディオ エンドポイントの移行プロセスが実行される場合があります。 このプロセスは、安全な情報を転送しようとします。 オーディオ ドライバーを開発するときは、これらの移行動作を念頭に置いておきます。
このエンドポイント移行プロセスは、次の状況で実行できます。
- OS の更新.
- オーディオ ドライバーの更新。 これには、オーディオ拡張機能ドライバーまたは AudioProcessingObject のインストールが含まれます。 詳細については、「 コンポーネント化されたオーディオ ドライバーのインストールの作成」を参照してください。
- 既存のオーディオ ドライバーが再インストールされます。 この再インストールは、オーディオ トラブルシューティング ツールの実行時に発生する可能性があります。 これは、デバイス マネージャーで "ドライバーの更新" を実行し、既にインストールされているドライバーを選択することによっても発生する可能性があります。
- AudioEndpointBuilder が処理されます。 これは、リリースされたバージョンの Windows で更新される AudioEndpointBuilder サービスにバグ修正がある場合に発生します。
- USB オーディオ ドライバーのファームウェアのリビジョンが変更されました。
- オーディオ ドライバーは、 KSPROPERTY_JACK_DESCRIPTION3 を使用してエンドポイントの構成を変更します。
オーディオ エンドポイントの移行プロセス.
オーディオ エンドポイントの移行プロセスでは、次の処理が行われます。
- ユーザーが制御するエンドポイントプロパティを転送します。
- CAPX プロパティを前方にコピーします。
オーディオ エンドポイントの移行プロセスでは、次の操作は行われません。
- WINDOWS 11 で CAPX を利用できる前に、FXProperties をコピーしません。
- OS に認識されているユーザー設定の一覧にないプロパティは、転送されません。
Windows 11 以降では、新しい "CAPX" 設定フレームワークを使用して設定を格納します。 設定 Framework を使用すると、APOs は、オーディオ エンドポイントでオーディオ効果 ("FX プロパティ ストア") のプロパティ ストアを照会および変更するためのメソッドを公開できます。 詳細については、 オーディオ処理オブジェクトの Windows 11 API を参照してください。
アップグレード前のエンドポイントとアップグレード後のエンドポイントの照合
移行プロセスは、アップグレード前のエンドポイントと一致し、これら 2 つの要素を使用してアップグレード エンドポイントをポストします。
- ハードウェア ID - ハードウェア ID の詳細については、「 システム全体の一意のデバイス ID」を参照してください。
- 参照文字列 - 参照文字列 の使用方法については、以下で説明します。
新しいエンドポイントが作成されるため、エンドポイントの移行プロセス中に mmdevice ID のキャッシュは機能しないことに注意してください。
登録されたサブデバイス
ポート クラス ドライバーの PcRegisterSubdevice 関数 は、システムの残りの部分によってデバイスとして認識されるサブデバイスを登録します。 この関数は、オーディオ アダプター上のサブデバイスを表すフィルター オブジェクトのデバイス インターフェイス インスタンスを登録します。 I/O マネージャーは、Name パラメーターで指定された文字列を、インスタンスの識別に使用する参照文字列に追加します。 変更された参照文字列は、オーディオ アダプター内のサブデバイスを区別するのに役立ちます。 参照文字列の詳細については、「 IoRegisterDeviceInterface」を参照してください。
参照文字列の使用法
オーディオ エンドポイントは、KS インターフェイスの作成時に PnP に渡される 参照文字列 と、外部コネクタのピン ID によって識別されます。 これらの値を変更すると、新しいオーディオ エンドポイントが作成されます。 この新しいオーディオ エンドポイントには、以前の参照文字列とコネクタのピン ID に関連付けられているユーザー設定は含まれません。
インストールされている 2 つ以上のオーディオ デバイス間でハードウェア ID が同じで、参照文字列も同じ場合、移行後にエンドポイントに移行する前のエンドポイントとの一致が失敗したため、移行システムは設定を適切に移行できません。
同じルート列挙ソフトウェア オーディオ デバイスの複数のコピーを、同じハードウェア ID と参照文字列を使用するすべてのバージョンの Windows にインストールすると、正しく移行されません。
Windows 11より前
Windows 11 より前のシステム上のルート列挙ソフトウェア オーディオ デバイスの場合、同じ参照文字列値を持つオーディオ エンドポイントが正しく移行されません。
Windows 11 より前のバージョンの Windows を対象とするルート列挙ソフトウェア オーディオ デバイスを作成する場合は、移行を成功させるために、各オーディオ エンドポイントに一意の参照文字列値を使用する必要があります。
Windows 11 以降
Windows 11 以降のシステムで、ハードウェア ID を持たないルート列挙ソフトウェア オーディオ デバイスでは、同じ参照文字列値を持つオーディオ エンドポイントが正しく移行されません。
Windows 11 以降の Windows バージョンを対象とするルート列挙ソフトウェア オーディオ デバイスを作成する場合は、ドライバー inf で一意のハードウェア ID を指定する必要があります。また、各ルート列挙ソフトウェア オーディオ デバイスは、そのハードウェア ID で 1 回だけインストールできます。同じドライバーの複数のコピーをインストールするには、移行を成功させるために、各インストールで異なる参照文字列を使用する必要があります。
参照文字列の規則
オーディオ サンプル ドライバーで使用される既定の "wave" および "topo" 参照文字列は使用しないことを強くお勧めします。 代わりに、よりわかりやすい参照文字列を使用する必要があります。 既定の参照文字列を使用するドライバーは、ハードウェア ID が使用できない場合や、これらの参照文字列を使用して他のドライバーと一致した場合に、移行データが失われたり、間違ったデバイスに適用されたりするリスクがあります。 妥当な戦略は、"ContosoSoftwareRender-output2" のようなものです。 一意のベンダー名を含めると、参照文字列のあいまいさを解消するのに役立ちます。
参照文字列はメインオーディオ ドライバーのインストール、更新プログラム、OS の更新、再起動などのために静的である必要があります。参照文字列が変更されると、新しいオーディオ エンドポイントが作成され、ユーザー設定は前のエンドポイントから新しいエンドポイントにコピーされません。
ハードウェア ID デバイス インスタンス名
オーディオ ドライバーのハードウェア ID は、INF ファイルの [モデル] セクションで定義されています。 ハードウェア ID は、少なくとも 1 つのデバイスを識別し、そのデバイスの INF ファイルの DDInstall セクションを参照します。 また、そのデバイスの一意のモデル セクションハードウェア識別子 (ID) も指定します。 詳細については INF モデル」セクション および 「INF DDInstall」セクション を参照してください。
この INF ファイルには、Sysvad オーディオ サンプルの DDInstall セクションのデバイスの説明が表示されます。
[SYSVAD.NT$ARCH$]
%SYSVAD_SA.DeviceDesc%=SYSVAD_SA, Root\sysvad_ComponentizedAudioSample
SYSVAD_SA.DeviceDesc="Virtual Audio Device (WDM) - Tablet Sample"
この INF ファイルは、OEM によってデバイスの説明がどのようにカスタマイズされるかを示しています。
[CONTOSO.NT$ARCH$]
%CONTOSO_SA.DeviceDesc%=CONTOSO_SA, Root\contoso_ContosoSoftwareRender
CONTOSO_SA.DeviceDesc="Description of the Contoso Software Render Driver"
AudioEndpointBuilder が一致するハードウェア ID は次のようになります。 Root\contoso_ContosoSoftwareRender
レジストリに格納されている設定
オーディオ アダプター ドライバーは、システム レジストリの現在のデバイス設定 (主にボリューム レベルとミュート設定) を追跡できます。 ドライバーは通常、サブキー "設定" の下のシステム提供のドライバー キー (INF キーワード (keyword) HKR で表されます) にこれらの設定を格納します。 ユーザーがコントロール パネルまたはその他のオーディオ アプリケーションを使用してこれらの設定を変更すると、ドライバーは適切なレジストリ エントリを更新します。 システムが起動するたびに、ドライバーはレジストリからデバイス設定を復元します。
ユーザーは、オペレーティング システムをアップグレードするたびに手動で設定を復元するのではなく、時間の経過と同時にシステムに対して行った調整を保持するため、この動作を主に好みます。
ただし、一部のドライバーは、インストールされるたびにこれらの設定を既定で盲目的に上書きします。 より適切な方法は、ドライバーがインストール時に特定のドライバー固有のエントリが既に存在するかどうかを判断することです。 存在する場合、ドライバーは、上書きするのではなく、これらのエントリに含まれている設定を保持する必要があります。
ドライバーの INF ファイルの add-registry セクションのディレクティブは、既存のレジストリ エントリを上書きするかどうかを指定します。 詳細については、 INF AddReg ディレクティブ のFLG_ADDREG_NOCLOBBER フラグの説明を参照してください。