Implementacja niestandardowego enumeratora punktów końcowych audio

Począwszy od Windows Server 2008 R2, można zaimplementować niestandardowy moduł wyliczający zdalny punkt końcowy audio jako część dostawcy protokołu Remote Desktop. Dostawca protokołu Remote Desktop może użyć niestandardowego modułu wyliczającego punktu końcowego audio w celu pobrania kolekcji punktów końcowych audio, które mają określony zestaw możliwości.

Implementowanie niestandardowego modułu wyliczającego zdalne punkty końcowe audio

  1. Niestandardowe rozwiązanie modułu wyliczającego punktu końcowego powinno implementować cztery główne typy obiektów: obiekty modułu wyliczającego urządzenia, obiekty kolekcji urządzeń, obiekty urządzeń i obiekty magazynu właściwości.
Typ obiektu Description
Obiekt wyliczający urządzenia
Obiekt wyliczający urządzenia udostępnia funkcjonalność modułu wyliczającego punkty końcowe. Udostępnia metody zwracające domyślny punkt końcowy i określone kolekcje punktów końcowych. Na przykład w zależności od określonych kryteriów moduł wyliczający może zwracać punkty końcowe komunikacji, punkty końcowe odtwarzania lub przechwytywać punkty końcowe. Obiekt modułu wyliczającego urządzenia musi implementować interfejs IMMDeviceEnumerator .
Obiekt kolekcji urządzeń
Obiekt kolekcji urządzeń reprezentuje kolekcję urządzeń audio. Musi zaimplementować interfejs IMMDeviceCollection .
Obiekt urządzenia
Obiekt urządzenia reprezentuje określone urządzenie audio. Zapewnia dostęp do magazynu właściwości urządzenia audio i uwidacznia interfejsy odtwarzania i przechwytywania dźwięku dostępne na urządzeniu. Obiekt urządzenia musi implementować interfejsy IMMDevice i IMMEndpoint .
obiekt magazynu właściwości
Obiekt magazynu właściwości udostępnia właściwości powiązane z urządzeniem audio. Niektóre z tych właściwości są używane przez system, ale aplikacje mogą również przechowywać dowolne właściwości powiązane z punktem końcowym dźwięku.
Wszystkie urządzenia audio mają następujące trzy właściwości:
Obiekt magazynu właściwości musi implementować interfejs IPropertyStore .
  1. Niestandardowy moduł wyliczający punkt końcowy musi być zaimplementowany w bibliotece DLL, którą można załadować do systemu audio i innych aplikacji. Biblioteka DLL musi być podpisana, aby bezpieczne procesy mogły go załadować. Biblioteka DLL musi implementować i eksportować funkcję GetTSAudioEndpointEnumeratorForSession, która pełni funkcję punktu wejścia do niestandardowego modułu wyliczającego punktów końcowych.

Usługa Remote Desktop Services wywołuje metodę QueryProperty i ustawia parametr QueryType na WTS_QUERY_AUDIOENUM_DLL w celu pobrania nazwy obiektu modułu wyliczającego.

Niestandardowe obiekty enumeratora używają interfejsów podobnych do modelu COM oraz mechanizmu zliczania odwołań podobnego do modelu COM, ale nie są prawdziwymi obiektami COM. Niestandardowy enumerator punktów końcowych musi mieć możliwość współpracy ze starszymi interfejsami audio używanymi przez aplikacje, które nie obsługują modelu COM. Z tego powodu niestandardowy enumerator punktów końcowych nie może opierać się na mechanizmie zarządzania cyklem życia w modelu COM. Użytkownicy modułu wyliczającego punktu końcowego audio, na przykład MMDevAPI.dll, ładują niestandardową bibliotekę DLL modułu wyliczającego punktu końcowego, jeśli jest to wymagane przez aplikacje użytkownika i nie zwolnią modułu wyliczającego, podczas gdy moduł wyliczający przechowuje odwołanie do obiektu modułu wyliczającego urządzenia, obiektu kolekcji urządzeń, obiektu urządzenia lub obiektu magazynu właściwości. Nie jest jednak możliwe, aby ci odbiorcy śledzili odwołania do innych typów obiektów będących własnością niestandardowego modułu wyliczającego punkty końcowe. W związku z tym zalecamy, aby niestandardowy moduł wyliczający punkty końcowe nie tworzył żadnych obiektów, których czas życia mógłby być dłuższy niż czas życia tych czterech typów obiektów.

Aby wdrożyć niestandardowy punkt końcowy audio

Aby zaimplementować niestandardowy moduł wyliczający urządzenia audio, należy zaimplementować niestandardowy punkt końcowy audio. Sposób połączenia niestandardowych urządzeń audio odbywa się przy użyciu następujących dwóch instrukcji:

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

Nie spodziewamy się zaimplementowania pełnej listy interfejsów IMMDevice::Activate w niestandardowym module wyliczania urządzeń audio. Zamiast tego należy zaimplementować IAudioOutputEndpointRT i IAudioInputEndpointRT. Opcjonalnie możesz zaimplementować kilka innych elementów, takich jak IAudioEndpointVolume. Dla każdego interfejsu, którego nie implementujesz, należy zwrócić E_NOINTERFACE (musisz użyć tego konkretnego kodu błędu). Windows następnie użyje standardowej implementacji interfejsu (na przykład IAudioClient2).

Aby uzyskać dodatkową dokumentację referencyjną dotyczącą implementowania i rejestrowania punktów końcowych audio, zobacz IAudioInputEndpointRT. Schemat pokazujący, jak działa WASAPI, można znaleźć w sekcji User-Mode Audio Components. Należy pamiętać, że cały dźwięk w trybie użytkownika jest nowy począwszy od Windows Server 2008.

Tworzenie dostawcy protokołu Remote Desktop

GetTSAudioEndpointEnumeratorForSession

IMMDevice

IMMDeviceCollection

IMMDeviceEnumerator

IMMEndpoint

IPropertyStore