共用方式為


操作系統升級

音訊裝置的驅動程式設定通常會在作系統升級期間保留。 升級之後,目標是將使用者設定向前移動,同時確保音訊端點能準確地反映 OS 和驅動程式功能。

音訊端點遷移過程

在OS升級期間,音訊端點移轉程式可能會執行。 此流程會嘗試將能安全移動的資訊儘可能地往前推進。 當您開發音訊驅動程式時,請記住這些移轉行為。

此端點移轉程式可以在下列情況下執行。

  • OS 更新。
  • 音訊驅動程式更新。 這包括安裝音頻擴充功能驅動程式或 AudioProcessingObject。 如需詳細資訊,請參閱 建立元件化音訊驅動程序安裝
  • 現有的音訊驅動程式已就地重新安裝。 執行音訊疑難解答員時,可能會發生重新安裝。 這也可以透過設備管理員執行「更新驅動程式」並選取已安裝的驅動程序來發生。
  • AudioEndpointBuilder 已提供服務。 每當 AudioEndpointBuilder 服務中有 Bug 修正時,就會發生此錯誤,此服務會在發行的 Windows 版本中更新。
  • USB 音訊驅動程式上的韌體修訂已變更。
  • 音訊驅動程式會透過 KSPROPERTY_JACK_DESCRIPTION3 變更端點組態。

音訊端點遷移過程

音訊端點移轉程式會執行下列動作。

  • 複製並轉移由使用者操作的端點屬性。
  • 將 CAPX 屬性向後複製。

音訊端點移轉程式不會執行下列任何動作。

  • 在使用 Windows 11 的 CAPX 可用性之前,請勿複製轉寄 FXProperties。
  • 它不會複製不在 OS 已知使用者設定清單中的轉寄屬性。

從 Windows 11 開始,會使用新的 「CAPX」 設定架構來儲存設定。 設定框架允許音訊處理運算子公開方法,以便在音訊端點上查詢和修改音訊效果的屬性存放區(「FX 屬性存放區」)。 如需詳細資訊,請參閱 適用於音訊處理物件的 Windows 11 API

比對升級前端點與升級後端點

移轉程式會使用這兩個元素,比對升級前端點與升級後端點。

  • 硬體識別碼 - 如需硬體識別碼的詳細資訊,請參閱 System-Wide 唯一裝置識別碼
  • 參考字串 - 以下討論 參考字串 的使用方式。

請注意,由於會建立新的端點,因此在端點移轉過程中,快取 mmdevice id 將無法運作。

已註冊的 Subdevice

埠類別驅動程式的 PcRegisterSubdevice 函 式會註冊子裝置,而子裝置則由系統其餘部分視為裝置。 函式會為代表音訊配接器上子裝置的篩選對象註冊裝置介面實例。 I/O 管理員會將 Name 參數指定的字串附加至用來識別實例的參考字串。 修改過的參考字串有助於區分音訊配接器中的子類別。 如需參考字串的詳細資訊,請參閱 IoRegisterDeviceInterface

參考字串使用方式

音訊端點是由建立 KS 介面時傳遞至 PnP 的 參考字串 ,以及外部連接器的針腳標識碼來識別。 變更這些值會導致建立新的音訊端點。 這個新的音訊端點不會包含與先前參考字串和連接器釘選標識符相關聯的用戶設定。

如果兩個或多個已安裝音訊裝置具有相同的硬體識別碼且參考字串也相同,則移轉系統將因無法將移轉前的端點與移轉後的端點匹配,從而無法正確地移轉設定。

在所有版本的 Windows 上安裝多個相同根列舉的軟體音訊裝置副本,這些裝置全部使用相同的硬體 ID 和參考字串,將無法正確遷移。

Windows 11 之前

對於 Windows 11 之前的系統上根目錄列舉的軟體音訊裝置,具有相同參考字串值的音訊端點將無法正確遷移。

建立以 Windows 11 之前 Windows 版本為目標的根列舉軟體音訊裝置時,必須針對每個音訊端點使用唯一參考字串值,以確保成功移轉。

Windows 11 及更新版本

Windows 11 上和之後系統上的根列舉軟體音訊裝置,沒有硬體識別元,具有相同參考字串值的音訊端點將無法正確移轉。

建立以 Windows 11 之後 Windows 版本為目標的根列舉軟體音訊裝置時,必須在驅動程式 inf 中指定唯一的硬體識別碼,而且每個根列舉的軟體音訊裝置只能使用該硬體標識碼安裝一次。若要安裝相同驅動程式的多個復本,每個安裝都必須使用不同的參考字串,以確保成功移轉。

參考字串規則

強烈建議不要使用音訊範例驅動程式中使用的預設 「wave」 和 「topo」 參考字串。 應該改用更具描述性的參考字串。 使用預設參考字串的驅動程式有遺失移轉數據或將其套用到錯誤裝置的風險,當硬體識別元無法使用或匹配到其他使用這些參考字串的驅動程式時。 合理的策略類似 「ContosoSoftwareRender-output2」。。 包含唯一的廠商名稱有助於釐清參考字串。

音訊驅動程式安裝、更新、OS 更新、重新啟動等的參考字串必須保持靜態。如果參考字串變更,將會建立新的音訊端點,而且不會將用戶設定從先前的端點複製到新的端點。

硬體標識碼裝置實例名稱

音訊驅動程式硬體標識碼定義於 INF 檔案的 Models 區段中。 硬體標識碼會識別至少一個裝置,並參考該裝置 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 將比對的硬體識別碼會是 Root\contoso_ContosoSoftwareRender

登錄預存設定

音訊配接器驅動程式可以在系統登錄中追蹤其目前的裝置設定(主要音量層級和靜音設定)。 驅動程式通常會將這些設定儲存在系統提供的驅動程式密鑰(以 INF 關鍵詞 HKR 表示)的子機碼「設定」下。 當使用者透過控制面板或其他音訊應用程式改變這些設定時,驅動程式會更新適當的登錄專案。 每次系統開機時,驅動程式都會從登錄還原裝置設定。

使用者基本上偏好此行為,因為它會保留他們一段時間對系統所做的調整,而不是在每次升級作系統時,強制他們手動還原其設定。

不過,某些驅動程式會在每次安裝時,以預設值盲目覆寫這些設定。 更好的方法是讓驅動程式在安裝時間判斷特定驅動程式的專案是否已經存在。 如果它們確實存在,驅動程式應該保留這些專案中包含的設定,而不是覆寫這些設定。

驅動程式 INF 檔案的 add-registry 區段中的指令會指定是否要覆寫現有的登錄項目。 如需詳細資訊,請參閱 INF AddReg 指示 中對 FLG_ADDREG_NOCLOBBER 旗標的描述。

另請參閱

KSPROPERTY_JACK_DESCRIPTION3

DEVPKEY_Device_DeviceDesc

INF DDInstall 區段

DCH 設計原則和最佳做法

適用於音訊處理物件的 Windows 11 API