Installazione di interfacce di dispositivo per un adattatore audio
Un client accede a un dispositivo audio tramite un set di interfacce di dispositivo specificate da un fornitore nel file INF della scheda. Le interfacce del dispositivo specificate nel file INF hanno una corrispondenza uno-a-uno con i sottodispositivi creati dal driver dell'adattatore quando inizializza il dispositivo (vedere Creazione del dispositivo secondario). Per ogni interfaccia del dispositivo, il file INF specifica un valore di voce FriendlyName , accessibile in modalità utente, nella chiave del Registro di sistema dell'interfaccia.
Nell'architettura di streaming del kernel le categorie di topologia (vedere KSPROPERTY_TOPOLOGY_CATEGORIES) rappresentano classi di interfaccia del dispositivo.
Nella tabella seguente sono elencate le categorie di topologie che è molto probabile che gli adattatori audio usino per descrivere le funzionalità dei relativi sottodispositivi.
Category | Descrizione |
---|---|
KSCATEGORY_ACOUSTIC_ECHO_CANCEL | Un dispositivo audio in grado di eseguire l'annullamento dell'eco acustico (vedere Effetti di acquisizione DirectSound) si registra in questa categoria. |
KSCATEGORY_AUDIO | Tutti i dispositivi audio si registrano in questa categoria. |
KSCATEGORY_CAPTURE | Un dispositivo audio in grado di acquisire un flusso di dati si registra in questa categoria. |
KSCATEGORY_DATATRANSFORM | Un dispositivo audio che esegue una trasformazione dei dati in un flusso si registra in questa categoria. |
KSCATEGORY_MIXER | Un dispositivo audio in grado di combinare flussi di dati si registra in questa categoria. |
KSCATEGORY_RENDER | Un dispositivo audio in grado di eseguire il rendering di un flusso di dati si registra in questa categoria. |
KSCATEGORY_SYNTHESIZER | Un dispositivo audio in grado di convertire i messaggi MIDI in campioni audio wave o in un segnale di output analogico si registra in questa categoria (vedere Sintetizzatori e sink wave). |
KSCATEGORY_TOPOLOGY | Il driver miniport topologia di un dispositivo si registra in questa categoria. |
KSCATEGORY_DRM_DESCRAMBLE | Un dispositivo audio in grado di annullare la disinstallazione di un flusso d'onda protetto da DRM si registra in questa categoria (vedere Digital Rights Management). |
Per un elenco completo delle categorie di topologie, vedere i GUID KSCATEGORY_XXX definiti nei file di intestazione Ks.h e Ksmedia.h.
Tutti i dispositivi audio vengono classificati in KSCATEGORY_AUDIO, ma un dispositivo audio può essere classificato anche in categorie aggiuntive, ad esempio KSCATEGORY_RENDER (per un dispositivo di rendering audio) o KSCATEGORY_SYNTHESIZER (per un sintetizzatore). Per ogni categoria specificata dal file INF per un dispositivo, Windows Installer compila un set di voci del Registro di sistema per tale dispositivo sotto il nome della categoria (vedere Filter Factory).
Solo un dispositivo che contiene un sintetizzatore predefinito deve registrarsi nella categoria KSCATEGORY_SYNTHESIZER. Si noti che questa categoria esclude un dispositivo MPU-401 puro. Un dispositivo MPU-401 puro, che può restituire o inserire un midi non elaborato da o verso un UART, deve registrarsi in queste categorie:
KSCATEGORY_AUDIO
KSCATEGORY_RENDER
KSCATEGORY_CAPTURE
Si noti che il driver di sistema SysAudio riserva la categoria del Registro di sistema KSCATEGORY_AUDIO_DEVICE esclusivamente per i dispositivi audio virtuali. I driver degli adattatori non devono registrarsi in questa categoria.
Nell'esempio seguente vengono installate quattro interfacce di dispositivo comuni definite dal sistema supportate in genere da un adattatore per un dispositivo audio.
Esempio: Installazione di interfacce di dispositivo audio
In questo esempio, la sezione device-install per il dispositivo audio XYZ usa la direttiva INF AddInterface per installare quattro interfacce dell'adattatore audio. Di seguito, ognuna delle quattro direttive assegna una stringa di riferimento univoca a un'interfaccia, che il driver dell'adattatore può usare per distinguere le istanze di ogni classe di interfaccia.
[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
Le prime tre direttive AddInterface specificano una sezione add-interface denominata XYZ-Audio-Device.Wave. L'ultima specifica una sezione add-interface denominata XYZ-Audio-Device.Topology. Ogni sezione add-interface aggiunge le voci del Registro di sistema seguenti a una sottochiave dell'interfaccia del dispositivo, accessibile in modalità utente nella chiave del Registro di sistema \DeviceClasses\<InterfaceGUID> :
Una voce del Registro di sistema FriendlyName specifica un nome descrittivo per ogni interfaccia del dispositivo.
Microsoft DirectShow richiede una voce del Registro di sistema CLSID, impostata su un valore GUID proxy, che indica che l'adattatore può essere accessibile e controllato dal driver di sistema KSProxy.
Le due sezioni dell'interfaccia aggiuntiva vengono visualizzate nell'esempio seguente, che contiene voci di file INF che aggiungono friendlyName e CLSID di ogni interfaccia al Registro di sistema:
[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%
La parola chiave HKR in questo esempio indica il percorso del Registro di sistema fornito dal sistema per il dispositivo. Per altre informazioni, vedere Direttiva INF AddReg.
Di seguito è riportata la sezione Strings per questo esempio.
[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"
Il nome stringa specificato da una direttiva AddInterface per un'interfaccia di dispositivo KSCATEGORY_XXX non può essere localizzato perché il driver dell'adattatore utilizza internamente lo stesso nome di una costante stringa. I driver di adattatore di esempio in Windows Driver Kit (WDK) usano i nomi di stringa seguenti per le interfacce del dispositivo audio:
KSNAME_Wave="Wave"
KSNAME_UART="UART"
KSNAME_FMSynth="FMSynth"
KSNAME_Topology="Topology"
KSNAME_Wavetable="Wavetable"
KSNAME_DMusic="DMusic"
Per uniformità, il driver proprietario deve assegnare questi stessi nomi alle interfacce del dispositivo corrispondenti. Se il driver supporta interfacce di dispositivo aggiuntive proprietarie, è possibile inventare i propri nomi proprietari per queste interfacce. Assicurarsi che i nomi usati dal driver corrispondano a quelli nel file INF. Se le stringhe non corrispondono, il programma di installazione del sistema non caricherà il driver.