Delen via


Een aangepaste audio-eindpunten-enumerator implementeren

Vanaf Windows Server 2008 R2 kunt u een aangepaste enumerator voor externe audio-eindpunten implementeren als onderdeel van een Terminal Server-protocolprovider. Een externe bureaubladprotocolprovider kan een aangepaste audio-eindpuntenumerator gebruiken om een verzameling audio-eindpunten op te halen die een specifieke set functies hebben.

Een aangepaste op afstand audio-eindpunt-enumerator implementeren

  1. Uw aangepaste eindpuntenumeratoroplossing moet vier hoofdtypen objecten implementeren: apparaat-enumeratorobjecten, apparaatverzamelingsobjecten, apparaatobjecten en eigenschappenarchiefobjecten.
Objecttype Beschrijving
Apparaat-enumeratie-object
Een apparatenumeratorobject biedt de functionaliteit van een eindpuntenumerator. Er worden methoden weergegeven die een standaardeindpunt en opgegeven verzamelingen eindpunten retourneren. Afhankelijk van de opgegeven criteria kan de enumerator bijvoorbeeld communicatie-eindpunten, afspeeleindpunten retourneren of eindpunten vastleggen. Het apparaat-enumerator-object moet de IMMDeviceEnumerator interface implementeren.
Apparaatverzamelingsobject
Een apparaatverzamelingsobject vertegenwoordigt een verzameling audioapparaten. De IMMDeviceCollection-interface moet geïmplementeerd worden.
Apparaatobject
Een apparaatobject vertegenwoordigt een bepaald audioapparaat. Het biedt toegang tot het eigenschappenarchief van het audioapparaat en stelt de audioweergave- en opnameinterfaces beschikbaar op het apparaat. Het apparaatobject moet de IMMDevice-- en IMMEndpoint--interfaces implementeren.
Object voor eigenschapsopslag
Een eigenschapsarchiefobject toont de eigenschappen die zijn gekoppeld aan een audioapparaat. Sommige van deze eigenschappen worden door het systeem gebruikt, maar toepassingen kunnen ook willekeurige eigenschappen opslaan met het audio-eindpunt.
Alle audioapparaten hebben de volgende drie eigenschappen:
Het eigenschapsarchiefobject moet de IPropertyStore-interface implementeren.
  1. De aangepaste eindpuntenumerator moet worden geïmplementeerd in een DLL die kan worden geladen in het audiosysteem en andere toepassingen. Het DLL-bestand moet zijn ondertekend, zodat beveiligde processen deze kunnen laden. Het DLL-bestand moet de GetTSAudioEndpointEnumeratorForSession-functie implementeren en exporteren, die fungeert als een toegangspunt naar de aangepaste eindpuntenumerator.

De service Extern bureaublad-services roept de methode QueryProperty aan en stelt de parameter QueryType in op WTS_QUERY_AUDIOENUM_DLL om de naam van het enumerator-object op te halen.

Aangepaste enumerator-objecten maken gebruik van COM-achtige interfaces en een COM-achtig verwijzingstelmechanisme, maar ze zijn geen echte COM-objecten. De aangepaste eindpuntenumerator moet de mogelijkheid hebben om te werken met verouderde audio-interfaces die worden gebruikt door toepassingen die COM niet ondersteunen. Daarom mag de aangepaste eindpuntenumerator niet vertrouwen op het levenscyclusbeheermechanisme van COM. Gebruikers van uw audio-eindpunten-enumerator, zoals MMDevAPI.dll, laden de DLL van het aangepaste eindpunten-enumerator wanneer dit nodig is voor gebruikerstoepassingen, en zij zullen de enumerator niet ontladen zolang de enumerator een verwijzing bevat naar een apparaat-enumeratorobject, apparaatverzamelingsobject, apparaatobject of eigenschap opslagobject. Het is echter niet mogelijk voor deze gebruikers om verwijzingen naar andere typen objecten bij te houden die eigendom zijn van de aangepaste eindpuntenumerator. Daarom raden we u aan dat uw aangepaste eindpuntenumerator geen objecten maakt die deze vier typen objecten kunnen overleven.

Een aangepast audio-eindpunt implementeren

Als u een aangepaste enumerator voor audioapparaten wilt implementeren, moet u een aangepast audio-eindpunt implementeren. De manier waarop uw aangepaste audioapparaten zijn gekoppeld, is met behulp van de volgende twee instructies:

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

We verwachten niet dat u de volledige lijst met IMMDevice::Activate interfaces in uw aangepaste audioapparaat enumerator implementeert. In plaats daarvan moet u IAudioOutputEndpointRT- en IAudioInputEndpointRT-implementeren. U kunt desgewenst nog een paar implementeren, zoals IAudioEndpointVolume. Voor elke interface die u niet implementeert, moet u E_NOINTERFACE retourneren (u moet deze specifieke foutcode gebruiken). Windows valt vervolgens terug op een stock-implementatie van de interface (bijvoorbeeld IAudioClient2).

Zie IAudioInputEndpointRT-voor aanvullende referentiedocumentatie over het implementeren en registreren van audio-eindpunten. Zie User-Mode Audio Componentsvoor een diagram dat laat zien hoe WASAPI werkt. Alle audio in de gebruikersmodus is nieuw vanaf Windows Server 2008.

Een Remote Desktop Protocol Provider- maken

GetTSAudioEndpointEnumeratorForSession

IMMDevice

IMMDeviceCollection

IMMDeviceEnumerator

IMMEndpoint

IPropertyStore