Delen via


Apparaatinterfaces voor een audioadapter installeren

Een client opent een audioapparaat via een set apparaatinterfaces die een leverancier opgeeft in het INF-bestand van de adapter. De apparaatinterfaces die zijn opgegeven in het INF-bestand hebben een een-op-een-correspondentie met de subapparaten die het adapterstuurprogramma maakt wanneer het apparaat wordt geïnitialiseerd (zie Subdevice Maken). Voor elke apparaatinterface geeft het INF-bestand een FriendlyName-vermeldingswaarde op, die toegankelijk is in de gebruikersmodus, onder de registersleutel van de interface.

In de kernelstreamingarchitectuur vertegenwoordigen topologiecategorieën (zie KSPROPERTY_TOPOLOGY_CATEGORIES) apparaatinterfaceklassen.

De volgende tabel bevat de topologiecategorieën die audioadapters waarschijnlijk zullen gebruiken om de mogelijkheden van hun subapparaten te beschrijven.

Categorie Beschrijving
KSCATEGORIE_AKOESTISCHE_ECHO_ONDERDRUKKING Een audioapparaat dat akoestische echo-annulering kan uitvoeren (zie DirectSound Capture Effects) registreert zich onder deze categorie.
KSCATEGORY_AUDIO Alle audioapparaten registreren zich onder deze categorie.
KSCATEGORY_CAPTURE Een audioapparaat dat een gegevensstroom kan vastleggen, registreert zich onder deze categorie.
KSCATEGORY_DATATRANSFORM Een audioapparaat dat een gegevenstransformatie op een stream uitvoert, registreert zich onder deze categorie.
KSCATEGORY_MIXER Een audioapparaat dat gegevensstromen kan combineren, registreert zich onder deze categorie.
KSCATEGORY_RENDER Een audioapparaat dat een gegevensstroom kan weergeven, registreert zich onder deze categorie.
KSCATEGORY_SYNTHESIZER Een audioapparaat dat MIDI-berichten kan converteren naar golfgeluidsvoorbeelden of een analoog uitgangssignaal registreert zich onder deze categorie (zie Synthesizers en Wave Sinks).
KSCATEGORY_TOPOLOGY Het topologie-miniportstuurprogramma van een apparaat registreert zich onder deze categorie.
KSCATEGORY_DRM_DESCRAMBLE Een audioapparaat dat een met DRM beveiligde golfstroom kan ontramen, registreert zich onder deze categorie (zie Digital Rights Management).

Zie de KSCATEGORY_XXX GUID's die zijn gedefinieerd in de headerbestanden Ks.h en Ksmedia.h voor een volledige lijst met topologiecategorieën.

Alle audioapparaten worden geclassificeerd onder KSCATEGORY_AUDIO, maar een audioapparaat kan ook worden geclassificeerd onder extra categorieën, zoals KSCATEGORY_RENDER (voor een audiorenderingsapparaat) of KSCATEGORY_SYNTHESIZER (voor een synthesizer). Voor elke categorie die het INF-bestand opgeeft voor een apparaat, bouwt Windows Installer een set registervermeldingen voor dat apparaat onder de categorienaam (zie Filter Factory's).

Alleen een apparaat dat een ingebouwde synthesizer bevat, moet zich registreren onder de categorie KSCATEGORY_SYNTHESIZER. Houd er rekening mee dat deze categorie een puur MPU-401-apparaat uitsluit. Een puur MPU-401-apparaat, dat onbewerkte MIDI naar of van een UART kan invoeren, moet zich registreren onder deze categorieën:

  • KSCATEGORIE_AUDIO

  • KSCATEGORY_RENDER

  • KSCATEGORY_CAPTURE

Houd er rekening mee dat het SysAudio-systeemstuurprogramma de registercategorie KSCATEGORY_AUDIO_DEVICE exclusief voor de virtuele audioapparaten reserveert. Adapterstuurprogramma's mogen zich niet registreren in deze categorie.

In het volgende voorbeeld worden vier gangbare door het systeem gedefinieerde apparaatinterfaces geïnstalleerd die een adapter doorgaans ondersteunt voor een audioapparaat.

Voorbeeld: Audioapparaatinterfaces installeren

In dit voorbeeld wordt in de sectie apparaatinstallatie voor het XYZ-audioapparaat de INF AddInterface-instructie gebruikt om vier audioadapterinterfaces te installeren. In het volgende wijst elk van de vier instructies een unieke referentietekenreeks toe aan een interface, die het adapterstuurprogramma kan gebruiken om onderscheid te maken tussen exemplaren van elke interfaceklasse.

  [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

De eerste drie AddInterface-instructies geven een sectie met de naam XYZ-Audio-Device.Wave op. De laatste geeft een sectie voor de invoegtoepassingsinterface met de naam XYZ-Audio-Device.Topology op. Elke sectie met de invoegtoepassingsinterface voegt de volgende registervermeldingen toe aan een subsleutel van de apparaatinterface, die toegankelijk is in de gebruikersmodus onder de registersleutel \DeviceClasses\<InterfaceGUID> :

  • Een FriendlyName-registervermelding specificeert een gebruiksvriendelijke naam voor elk apparaatinterface.

  • Microsoft DirectShow vereist een CLSID-registervermelding, ingesteld op een proxy-GUID-waarde, die aangeeft dat de adapter kan worden geopend en beheerd door het KSProxy-systeemstuurprogramma.

De twee secties van de invoegtoepassingsinterface worden weergegeven in het volgende voorbeeld, dat INF-bestandsvermeldingen bevat waarmee de FriendlyName en CLSID van elke interface aan het register worden toegevoegd:

  [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%

Het trefwoord HKR in dit voorbeeld geeft het door het systeem geleverde registerpad voor het apparaat aan. Zie INF AddReg Directivevoor meer informatie.

Hier volgt de sectie Strings voor dit voorbeeld.

  [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"

De tekenreeksnaam die een AddInterface-instructie opgeeft voor een KSCATEGORY_XXX-apparaatinterface kan niet worden gelokaliseerd omdat het adapterstuurprogramma intern dezelfde naam gebruikt als een tekenreeksconstante. De voorbeeldadapterstuurprogramma's in de Windows Driver Kit (WDK) gebruiken de volgende tekenreeksnamen voor hun audioapparaatinterfaces:

  KSNAME_Wave="Wave"
  KSNAME_UART="UART"
  KSNAME_FMSynth="FMSynth"
  KSNAME_Topology="Topology"
  KSNAME_Wavetable="Wavetable"
  KSNAME_DMusic="DMusic"

Omwille van uniformiteit moet uw eigen stuurprogramma dezelfde namen toewijzen aan de bijbehorende apparaatinterfaces. Als uw stuurprogramma ondersteuning biedt voor extra apparaatinterfaces die eigendom zijn, kunt u uw eigen eigen namen voor deze interfaces bedenken. Zorg ervoor dat de namen die het stuurprogramma gebruikt overeenkomen met de namen in uw INF-bestand. Als de tekenreeksen niet overeenkomen, wordt het stuurprogramma niet geladen door de systeeminstallatie.