Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Ab Windows Server 2008 R2 können Sie einen benutzerdefinierten Remote-Audioendpunkt-Enumerator als Teil eines Remotedesktop Protokollanbieters implementieren. Ein Remotedesktop-Protokollanbieter kann einen benutzerdefinierten Audioendpunkt-Enumerator verwenden, um eine Sammlung von Audioendpunkten abzurufen, die über einen bestimmten Satz von Funktionen verfügen.
So implementieren Sie einen benutzerdefinierten Enumerator für Remoteaudio-Endpunkte
- Ihre benutzerdefinierte Endpunktenumeratorlösung sollte vier Haupttypen von Objekten implementieren: Geräteaufzählungsobjekte, Gerätesammlungsobjekte, Geräteobjekte und Objektspeicherobjekte.
| Objekttyp | Description |
|---|---|
| Geräteaufzählungsobjekt |
Ein Geräteumeratorobjekt stellt die Endpunktenumeratorfunktionalität bereit. Sie macht Methoden verfügbar, die einen Standardendpunkt und angegebene Auflistungen von Endpunkten zurückgeben. Abhängig von den angegebenen Kriterien kann der Enumerator beispielsweise Kommunikationsendpunkte, Wiedergabeendpunkte oder Aufnahmeendpunkte zurückgeben. Das Geräteumeratorobjekt muss die IMMDeviceEnumerator-Schnittstelle implementieren. |
| Gerätesammlungsobjekt |
Ein Gerätesammlungsobjekt stellt eine Auflistung von Audiogeräten dar. Sie muss die IMMDeviceCollection-Schnittstelle implementieren. |
| Geräteobjekt |
Ein Geräteobjekt stellt ein bestimmtes Audiogerät dar. Sie bietet Zugriff auf den Eigenschaftenspeicher des Audiogeräts und macht die auf dem Gerät verfügbaren Audiowiedergabe- und Aufnahmeschnittstellen verfügbar. Das Geräteobjekt muss die IMMDevice - und IMMEndpoint-Schnittstellen implementieren. |
| Eigenschaftenspeicherobjekt |
Ein Eigenschaftenspeicherobjekt macht die Eigenschaften verfügbar, die einem Audiogerät zugeordnet sind. Einige dieser Eigenschaften werden vom System verwendet, anwendungen können jedoch auch beliebige Eigenschaften mit dem Audioendpunkt speichern. Alle Audiogeräte haben die folgenden drei Eigenschaften: Das Eigenschaftenspeicherobjekt muss die IPropertyStore-Schnittstelle implementieren. |
- Der benutzerdefinierte Endpunkt-Enumerator muss in einer DLL implementiert werden, die in das Audiosystem und andere Anwendungen geladen werden kann. Die DLL muss signiert sein, damit sichere Prozesse sie laden können. Die DLL muss die GetTSAudioEndpointEnumeratorForSession-Funktion implementieren und exportieren, die als Einstiegspunkt zum benutzerdefinierten Endpunktenumerator fungiert.
Der Remotedesktop Services-Dienst ruft die QueryProperty-Methode auf und legt den QueryType-Parameter auf WTS_QUERY_AUDIOENUM_DLL fest, um den Namen des Enumerationsobjekts abzurufen.
Benutzerdefinierte Enumeratorobjekte verwenden COM-ähnliche Schnittstellen und einen COM-ähnlichen Verweiszählmechanismus, sind jedoch keine echten COM-Objekte. Der benutzerdefinierte Endpunkt-Enumerator muss die Möglichkeit haben, mit älteren Audioschnittstellen zu arbeiten, die von Anwendungen verwendet werden, die COM nicht unterstützen. Aus diesem Grund darf der benutzerdefinierte Endpunktenumerator nicht auf den Lebenszyklusverwaltungsmechanismus von COM zurückgreifen. Nutzer Ihres Audioendpunktenumerators, z. B. MMDevAPI.dll, laden die benutzerdefinierte Endpunktenumerator-DLL, wenn dies von Benutzeranwendungen benötigt wird, und entladen den Enumerator nicht, solange dieser eine Referenz auf ein Geräteenumeratorobjekt, ein Gerätesammlungsobjekt, ein Geräteobjekt oder ein Eigenschaftenspeicherobjekt hält. Es ist jedoch nicht möglich, dass diese Verbraucher Verweise auf andere Objekttypen nachverfolgen, die dem benutzerdefinierten Endpunktenumerator gehören. Dementsprechend wird empfohlen, dass Ihr benutzerdefinierter Endpunktenumerator keine Objekte erstellt, die diese vier Objekttypen überleben könnten.
So implementieren Sie einen benutzerdefinierten Audioendpunkt
Um einen benutzerdefinierten Audiogeräte-Enumerationsgeber zu implementieren, müssen Sie einen benutzerdefinierten Audioendpunkt implementieren. Die Art und Weise, wie Ihre benutzerdefinierten Audiogeräte verknüpft sind, besteht in den folgenden beiden Anweisungen:
IMMDevice::Activate(IAudioOutputEndpointRT)IMMDevice::Activate(IAudioInputEndpointRT)
Wir erwarten nicht, dass Sie in Ihrem benutzerdefinierten Enumerator für Audiogeräte die vollständige Liste der IMMDevice::Activate-Schnittstellen implementieren. Stattdessen sollten Sie IAudioOutputEndpointRT und IAudioInputEndpointRT implementieren. Optional können Sie einige weitere Implementieren, z. B. IAudioEndpointVolume. Für alle Schnittstellen, die Sie nicht implementieren, sollten Sie E_NOINTERFACE zurückgeben (Sie müssen diesen spezifischen Fehlercode verwenden). Windows wird dann auf eine Bestandsimplementierung der Schnittstelle (z. B. IAudioClient2) zurückfallen.
Weitere Referenzdokumentation zum Implementieren und Registrieren von Audioendpunkten finden Sie unter IAudioInputEndpointRT. Ein Diagramm, das zeigt, wie WASAPI funktioniert, finden Sie unter User-Mode Audiokomponenten. Beachten Sie, dass das gesamte Audio im Benutzermodus ab Windows Server 2008 neu ist.