作業系統升級

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

音訊端點移轉程式

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

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

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

音訊端點移轉程式

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

  • 複製轉送使用者控制的端點屬性。
  • 複製轉送 CAPX 屬性。

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

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

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

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

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

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

請注意,由於已建立新的端點,所以在端點移轉程式期間,快取 mmdevice id 將無法運作。

已註冊的 Subdevice

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

參考字串使用方式

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

如果兩或多個已安裝音訊裝置與參考字串之間的硬體識別碼相同,移轉系統將無法正確移轉設定,因為移轉在移轉後無法比對端點之前的端點。

在所有 Windows 版本上安裝相同根列舉軟體音訊裝置的多個複本,這些版本全都使用相同的硬體識別碼和參考字串,將不會正確移轉。

Windows 11之前

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

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

Windows 11和更新版本

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

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

參考字串規則

強烈建議不要使用音訊範例驅動程式中使用的預設 「wave」 和 「topo」 參考字串, (s) 。 應改用更描述性的參考字串。 使用預設參考字串的驅動程式可能會遺失移轉資料,或在硬體識別碼無法使用時套用至錯誤的裝置,或使用這些參考字串比對其他驅動程式。 合理的策略會像 「ContosoSoftwareRender-output2」。 包含唯一廠商名稱有助於厘清參考字串。

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

硬體識別碼裝置實例名稱

音訊驅動程式硬體識別碼定義于 INF 檔案的 Models 區段中。 硬體識別碼至少會識別一個裝置,並參考該裝置之 INF 檔案的 DDInstall 區段。 它也會指定該裝置的唯一對模型區段硬體識別碼 (識別碼) 。 如需詳細資訊,請參閱 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