共用方式為


實作自訂音訊端點列舉值

從 Windows Server 2008 R2 開始,您可以將自訂遠端音訊端點列舉值實作為遠端桌面通訊協定提供者的一部分。 遠端桌面通訊協定提供者可以使用自訂音訊端點列舉值來擷取具有一組特定功能的音訊端點集合。

實作自訂遠端音訊端點列舉值

  1. 您的自訂端點列舉值解決方案應該實作四種主要物件類型:裝置列舉值物件、裝置集合物件、裝置物件和屬性存放區物件。
物件型別 說明
裝置列舉值物件
裝置列舉值物件提供端點列舉值功能。 它會公開傳回預設端點和指定端點集合的方法。 例如,根據指定的準則,列舉值可以傳回通訊端點、播放端點或擷取端點。 裝置列舉值物件必須實作 IMMDeviceEnumerator 介面。
裝置集合物件
裝置集合物件代表音訊裝置的集合。 它必須實作 IMMDeviceCollection 介面。
裝置物件
裝置物件代表特定的音訊裝置。 它可讓您存取音訊裝置的屬性存放區,並公開裝置上可用的音訊播放和擷取介面。 裝置物件必須實作 IMMDeviceIMMEndpoint 介面。
屬性存放區物件
屬性存放區物件會公開與音訊裝置相關聯的屬性。 系統使用其中一些屬性,但應用程式也可以使用音訊端點來儲存任意屬性。
所有音訊裝置都有下列三個屬性:
屬性存放區物件必須實作 IPropertyStore 介面。
  1. 自訂端點列舉值必須在可載入音訊系統和其他應用程式的 DLL 中實作。 DLL 必須經過簽署,安全進程才能載入它。 DLL 必須實作並匯出 GetTSAudioEndpointEnumeratorForSession 函式 ,此函式可作為自訂端點列舉值的進入點。

遠端桌面服務服務會呼叫 QueryProperty 方法,並將 QueryType 參數設定為 WTS_QUERY_AUDIOENUM_DLL ,以擷取列舉值物件的名稱。

自訂列舉值物件使用類似 COM 的介面和類似 COM 的參考計數機制,但它們不是真正的 COM 物件。 自訂端點列舉值必須能夠使用不支援 COM 的應用程式所使用的舊版音訊介面。 基於這個理由,自訂端點列舉值不得依賴 COM 的生命週期管理機制。 音訊端點列舉值的取用者,例如MMDevAPI.dll、在使用者應用程式需要時載入自訂端點列舉值 DLL,而且列舉值在列舉值保留裝置列舉值物件的參考、裝置集合物件、裝置物件或屬性存放區物件時,不會卸載列舉值。 不過,這些取用者無法追蹤自訂端點列舉值所擁有之其他類型的物件的參考。 因此,我們建議您的自訂端點列舉值不會建立任何可能超過這四種物件類型的物件。

實作自訂音訊端點

若要實作自訂音訊裝置列舉值,您必須實作自訂音訊端點。 自訂音訊裝置連結的方式是使用下列兩個語句:

  • IMMDevice::Activate(IAudioOutputEndpointRT)
  • IMMDevice::Activate(IAudioInputEndpointRT)

我們不希望您在自訂音訊裝置列舉值中實作 IMMDevice::Activate 介面的完整清單。 相反地,您應該實作 IAudioOutputEndpointRTIAudioInputEndpointRT。 您可以選擇性地實作一些其他專案,例如 IAudioEndpointVolume。 對於您未實作的任何介面,您應該傳回 E_NOINTERFACE ( 您必須使用此特定失敗碼) 。 Windows 接著會回到介面的庫存實作 (,例如 IAudioClient2) 。

如需如何實作和註冊音訊端點的其他參考檔,請參閱 IAudioInputEndpointRT。 如需顯示 WASAPI 運作方式的圖表,請參閱 使用者模式音訊元件。 請注意,所有使用者模式音訊都是從 Windows Server 2008 開始的新功能。

建立遠端桌面通訊協定提供者

GetTSAudioEndpointEnumeratorForSession

IMMDevice

IMMDeviceCollection

IMMDeviceEnumerator

IMMEndpoint

IPropertyStore