Installieren von Geräteschnittstellen für einen Audioadapter
Ein Client greift auf ein Audiogerät über eine Reihe von Geräteschnittstellen zu, die ein Anbieter in der INF-Datei des Adapters angibt. Die in der INF-Datei angegebenen Geräteschnittstellen weisen eine 1:1-Korrespondenz mit den Untergeräten auf, die der Adaptertreiber beim Initialisieren des Geräts erstellt (siehe Untergeräteerstellung). Für jede Geräteschnittstelle gibt die INF-Datei einen FriendlyName-Eintragswert an, auf den im Benutzermodus unter dem Registrierungsschlüssel der Schnittstelle zugegriffen werden kann.
In der Kernelstreamingarchitektur stellen Topologiekategorien (siehe KSPROPERTY_TOPOLOGY_CATEGORIES) Geräteschnittstellenklassen dar.
In der folgenden Tabelle sind die Topologiekategorien aufgeführt, die Audioadapter höchstwahrscheinlich verwenden, um die Funktionen ihrer Untergeräte zu beschreiben.
Category | BESCHREIBUNG |
---|---|
KSCATEGORY_ACOUSTIC_ECHO_CANCEL | Ein Audiogerät, das akustische Echounterdrückung durchführen kann (siehe DirectSound Capture Effects), registriert sich in dieser Kategorie. |
KSCATEGORY_AUDIO | Alle Audiogeräte registrieren sich selbst unter dieser Kategorie. |
KSCATEGORY_CAPTURE | Ein Audiogerät, das einen Datenstrom erfassen kann, registriert sich selbst unter dieser Kategorie. |
KSCATEGORY_DATATRANSFORM | Ein Audiogerät, das eine Datentransformation für einen Stream durchführt, registriert sich unter dieser Kategorie. |
KSCATEGORY_MIXER | Ein Audiogerät, das Datenströme mischen kann, registriert sich unter dieser Kategorie. |
KSCATEGORY_RENDER | Ein Audiogerät, das einen Datenstrom rendern kann, registriert sich unter dieser Kategorie. |
KSCATEGORY_SYNTHESIZER | Ein Audiogerät, das MIDI-Nachrichten entweder in Wellenaudiobeispiele oder ein analoges Ausgangssignal konvertieren kann, registriert sich unter dieser Kategorie (siehe Synthesizer und Wellensenken). |
KSCATEGORY_TOPOLOGY | Der Topologie-Miniporttreiber eines Geräts wird in dieser Kategorie registriert. |
KSCATEGORY_DRM_DESCRAMBLE | Ein Audiogerät, das einen DRM-geschützten Wellenstrom aufheben kann, registriert sich selbst unter dieser Kategorie (siehe Digital Rights Management). |
Eine vollständige Liste der Topologiekategorien finden Sie in den KSCATEGORY_XXX-GUIDs , die in den Headerdateien Ks.h und Ksmedia.h definiert sind.
Alle Audiogeräte werden unter KSCATEGORY_AUDIO klassifiziert, aber ein Audiogerät kann auch in zusätzliche Kategorien wie KSCATEGORY_RENDER (für ein Audiorenderinggerät) oder KSCATEGORY_SYNTHESIZER (für einen Synthesizer) klassifiziert werden. Für jede Kategorie, die die INF-Datei für ein Gerät angibt, erstellt Windows Installer eine Reihe von Registrierungseinträgen für dieses Gerät unter dem Kategorienamen (siehe Filter Factories).
Nur ein Gerät, das einen integrierten Synthesizer enthält, sollte sich unter der Kategorie KSCATEGORY_SYNTHESIZER registrieren. Beachten Sie, dass diese Kategorie ein reines MPU-401-Gerät ausschließt. Ein reines MPU-401-Gerät, das unformatiertes MIDI in oder aus einem UART ausgeben oder eingeben kann, sollte sich unter diesen Kategorien registrieren:
KSCATEGORY_AUDIO
KSCATEGORY_RENDER
KSCATEGORY_CAPTURE
Beachten Sie, dass der SysAudio-Systemtreiber die Registrierungskategorie KSCATEGORY_AUDIO_DEVICE ausschließlich für seine virtuellen Audiogeräte reserviert. Adaptertreiber sollten sich nicht selbst in dieser Kategorie registrieren.
Im folgenden Beispiel werden vier allgemeine systemdefinierte Geräteschnittstellen installiert, die ein Adapter normalerweise für ein Audiogerät unterstützt.
Beispiel: Installieren von Audiogeräteschnittstellen
In diesem Beispiel verwendet der Abschnitt geräteinstallation für das XYZ-Audiogerät die INF AddInterface-Anweisung , um vier Audioadapterschnittstellen zu installieren. Im Folgenden weist jede der vier Anweisungen einer Schnittstelle eine eindeutige Verweiszeichenfolge zu, die der Adaptertreiber verwenden kann, um zwischen Instanzen jeder Schnittstellenklasse zu unterscheiden.
[XYZ-Audio-Device.Interfaces]
AddInterface=%KSCATEGORY_AUDIO%,%KSName_Wave%,XYZ-Audio-Device.Wave
AddInterface=%KSCATEGORY_RENDER%,%KSName_Wave%,XYZ-Audio-Device.Wave
AddInterface=%KSCATEGORY_CAPTURE%,%KSName_Wave%,XYZ-Audio-Device.Wave
AddInterface=%KSCATEGORY_TOPOLOGY%,%KSName_Topology%,XYZ-Audio-Device.Topology
Die ersten drei AddInterface-Anweisungen geben einen Add-Interface-Abschnitt namens XYZ-Audio-Device.Wave an. Der letzte gibt einen Add-Interface-Abschnitt mit dem Namen XYZ-Audio-Device.Topology an. Jeder Abschnitt "add-interface" fügt die folgenden Registrierungseinträge zu einem Unterschlüssel der Geräteschnittstelle hinzu, auf den im Benutzermodus unter dem Registrierungsschlüssel \DeviceClasses\<InterfaceGUID> zugegriffen werden kann:
Ein FriendlyName-Registrierungseintrag gibt einen Anzeigenamen für jede Geräteschnittstelle an.
Microsoft DirectShow erfordert einen CLSID-Registrierungseintrag, der auf einen Proxy-GUID-Wert festgelegt ist, der angibt, dass auf den Adapter zugegriffen und vom KSProxy-Systemtreiber gesteuert werden kann.
Die beiden Add-Interface-Abschnitte werden im folgenden Beispiel angezeigt, das INF-Dateieinträge enthält, die die FriendlyName und CLSID jeder Schnittstelle zur Registrierung hinzufügen:
[XYZ-Audio-Device.Wave]
AddReg=XYZ-Audio-Device.Wave.AddReg
[XYZ-Audio-Device.Wave.AddReg]
HKR,,FriendlyName,,%WaveDeviceName%
HKR,,CLSID,,%Proxy.CLSID%
[XYZ-Audio-Device.Topology]
AddReg=XYZ-Audio-Device.Topology.AddReg
[XYZ-Audio-Device.Topology.AddReg]
HKR,,FriendlyName,,%WaveDeviceMixerName%
HKR,,CLSID,,%Proxy.CLSID%
Der Schlüsselwort (keyword) HKR in diesem Beispiel gibt den vom System bereitgestellten Registrierungspfad für das Gerät an. Weitere Informationen finden Sie unter INF AddReg-Direktive.
Im Folgenden wird der Abschnitt Zeichenfolgen für dieses Beispiel beschrieben.
[Strings]
KSCATEGORY_AUDIO="{6994AD04-93EF-11D0-A3CC-00A0C9223196}"
KSCATEGORY_RENDER="{65E8773E-8F56-11D0-A3B9-00A0C9223196}"
KSCATEGORY_CAPTURE="{65E8773D-8F56-11D0-A3B9-00A0C9223196}"
KSCATEGORY_TOPOLOGY="{DDA54A40-1E4C-11D1-A050-405705C10000}"
Proxy.CLSID="{17CCA71B-ECD7-11D0-B908-00A0C9223196}"
WaveDeviceName="XYZ Audio Device"
WaveDeviceMixerName="XYZ Audio Device Super Mixer"
Der Zeichenfolgenname, den eine AddInterface-Anweisung für eine KSCATEGORY_XXX-Geräteschnittstelle angibt, kann nicht lokalisiert werden, da der Adaptertreiber intern denselben Namen wie eine Zeichenfolgenkonstante verwendet. Die Beispieladaptertreiber im Windows Driver Kit (WDK) verwenden die folgenden Zeichenfolgennamen für ihre Audiogeräteschnittstellen:
KSNAME_Wave="Wave"
KSNAME_UART="UART"
KSNAME_FMSynth="FMSynth"
KSNAME_Topology="Topology"
KSNAME_Wavetable="Wavetable"
KSNAME_DMusic="DMusic"
Aus Gründen der Einheitlichkeit sollte Ihr proprietärer Treiber den entsprechenden Geräteschnittstellen dieselben Namen zuweisen. Wenn Ihr Treiber zusätzliche Geräteschnittstellen unterstützt, die proprietär sind, können Sie ihre eigenen proprietären Namen für diese Schnittstellen erfinden. Stellen Sie sicher, dass die vom Treiber verwendeten Namen mit denen in Ihrer INF-Datei übereinstimmen. Wenn die Zeichenfolgen nicht übereinstimmen, wird der Treiber nicht geladen.