Nomi descrittivi per dispositivi endpoint audio

In Windows Vista, Windows Server 2008 e versioni successive di Windows, il sottosistema audio supporta la nozione di un dispositivo endpoint audio, ad esempio altoparlanti, cuffie, microfoni e lettori CD. Questo concetto di endpoint audio consente di creare applicazioni audio descrittive con interfacce utente che fanno riferimento ai dispositivi endpoint che gli utenti modificano direttamente. Questi endpoint hanno nomi descrittivi come "altoparlanti", "cuffie", "microfono" e "lettore CD" che le applicazioni possono visualizzare nelle loro interfacce utente. Per altre informazioni sui dispositivi endpoint, vedere Dispositivi endpoint audio.

Il sottosistema audio modella un dispositivo Plug and Play (PnP) in una scheda audio come filtro KS. I flussi di dati entrano e escono dal filtro tramite i pin KS. Un pin bridge è un pin KS tramite il quale un dispositivo endpoint audio si connette a un filtro KS. Per altre informazioni sui pin bridge, vedere Grafici filtro audio.

Il sottosistema audio ottiene informazioni su un dispositivo endpoint audio esaminando le proprietà del pin del bridge a cui si connette il dispositivo endpoint. Una di queste proprietà è la proprietà della categoria di pin (KSPROPERTY_PIN_CATEGORY).

Per ogni filtro KS, il driver dell'adattatore fornisce una tabella di strutture PCPIN_DESCRIPTOR che descrivono le proprietà dei pin KS nel filtro. Il GUID della categoria pin viene archiviato nel membro KsPinDescriptor.Category della struttura PCPIN_DESCRIPTOR. Per un pin bridge, il valore del GUID della categoria di pin indica il tipo di endpoint che si connette al pin del bridge. Ad esempio, il GUID della categoria di pin KSNODETYPE_MICROPHONE indica che il pin del bridge si connette a un microfono, il GUID KSNODETYPE_SPEAKER indica che il pin del bridge si connette agli altoparlanti e così via. I GUID KSNODETYPE_XXX sono definiti nel file di intestazione Ksmedia.h.

Inoltre, la PCPIN_DESCRIPTOR include un GUID che può essere usato per identificare il pin da un nome univoco. Questo GUID del pin viene archiviato nel membro KsPinDescriptor.Name della struttura PCPIN_DESCRIPTOR . Questo GUID nome viene usato dalla proprietà (KSPROPERTY_PIN_NAME) per associare un nome descrittivo trovato nel Registro di sistema al pin.

Il sottosistema audio richiama la proprietà KSPROPERTY_PIN_NAME per associare un nome descrittivo a un endpoint audio. KS gestisce questa richiesta cercando prima una stringa unicode nel Registro di sistema che descrive il GUID di KsPinDescriptor.Name . Se KS non trova una voce, cerca nel Registro di sistema una stringa unicode che descrive il GUID KsPinDescriptor.Category .

A partire da Aggiornamento di Windows 10 (ottobre 2018), versione 1809, durante la ricerca nel Registro di sistema, KS cerca prima una voce nella chiave software del dispositivo. Questa operazione viene creata da INF tramite una sezione AddReg a cui fa riferimento la sezione [Modelli] dell'INF del driver di dispositivo. La sezione AddReg costruisce queste voci usando la chiave HKR\MediaCategories. Ciò consente allo sviluppatore del driver di creare nomi descrittivi specifici del dispositivo per i GUID nome e categoria, indipendentemente dal fatto che il GUID sia univoco per il dispositivo o meno.

Se una voce non è stata installata nella chiave software del dispositivo o il driver è in esecuzione in un sistema operativo prima di Windows 10 versione 1809, KS controlla la chiave del Registro di sistema MediaCategories. Questa seconda chiave viene considerata come uno spazio di nomi globale. A partire da Windows 10 versione 1809 questo spazio è riservato per le definizioni globali e non deve essere modificato dai nuovi driver. La modifica delle voci in questa chiave non sarà supportata in una versione futura del sistema operativo.

I dispositivi audio che espongono pin con GUID di categorie standard devono includere/devono essere inclusi nella casella di posta in arrivo KS. INF o KSCAPTUR. Registrazione dei nomi INF nel dispositivo INF. Questi INFS in arrivo contengono definizioni predefinite di nomi descrittivi per GUID di categoria pre-definiti che il driver potrebbe voler popolare. Questi sono gli stessi GUID presenti nel membro KsPinDescriptor.Category della struttura PCPIN_DESCRIPTOR. Ad esempio, la voce GUID categoria KSNODETYPE_MICROPHONE ha il nome descrittivo associato "microfono" e la voce GUI KSNODETYPE_SPEAKER D categoria ha il nome descrittivo associato "altoparlanti" e così via.

I GUID e i nomi descrittivi per categoria e GUID nome vengono archiviati nel Registro di sistema. Per ogni coppia GUID-name nel Registro di sistema, la stringa GUID viene usata come sottochiave nella chiave MediaCategories. Nella chiave GUID il nome descrittivo di un valore stringa Unicode nella variabile "Name".

Se nessuno dei nomi descrittivi e delle categorie di pin definiti dal sottosistema audio descrive in modo adeguato il dispositivo, è possibile definire la propria categoria di pin e nomi GUID e associare nomi descrittivi a loro in INF. Per assicurarsi che il GUID della categoria di pin sia univoco, usare un'utilità come Uuidgen.exe per generare il GUID. Modificare quindi il file INF che installa la scheda audio per scrivere il GUID della categoria di pin e il nome descrittivo nel Registro di sistema. Nell'esempio di codice seguente viene illustrato un frammento di un file INF che aggiunge due GUID di categoria di pin e i relativi nomi descrittivi associati al Registro di sistema:

[Manufacturer]
MyOEMName=Unicorn,NTamd64

[Unicorn.NTamd64]
MyDeviceName=MyDevice,Root\MyDevice

[MyDevice.NT]
Include=ks.inf, kscaptur.inf
Needs=KS.Registration, KSCAPTUR.Registration.NT
CopyFiles=MyDevice.CopyFiles
AddReg=PinNameRegistration

...

[PinNameRegistration]
HKR,%MediaCategories%\%GUID.MyNewEndpointCategory%,Name,,%Name.MyNewEndpointCategory%
HKR,%MediaCategories%\%GUID.MyNewEndpointName%,Name,,%Name.MyNewEndpointName%

...

[Strings]
MyOEMName="Unicorns Inc."
MyDeviceName="Sparkly Unicorn"
MediaCategories="MediaCategories"

GUID.MyNewEndpointCategory="{B72FBD1A-4634-4240-B207-0E6B52F3701C}"
GUID.MyNewEndpoint_2="{71DD3A5D-E303-49A0-ACEE-908634AA9520}"

Name.MyNewEndpointCategory="Unicorn"
Name.MyNewEndpointName="Fred the Unicorn"

Entrambe le stringhe GUID sono state generate da Uuidgen.exe.

Le applicazioni possono accedere alle proprietà di un dispositivo endpoint audio usando l'interfaccia IPropertyStore del dispositivo. L'interfaccia usa le chiavi delle proprietà definite nei file di intestazione Functiondiscoverykeys_devpkey.h e Mmdeviceapi.h per identificare le proprietà. Un'applicazione può usare la chiave della proprietà PKEY_Device_FriendlyName per recuperare il nome descrittivo di un dispositivo endpoint. Per le interfacce utente vincolate dallo spazio, è possibile recuperare una versione più breve del nome descrittivo usando la chiave della proprietà PKEY_Device_DeviceDesc . Per altre informazioni su queste chiavi di proprietà, vedere IMMDevice::OpenPropertyStore.

Un'istanza dell'interfaccia IPropertyStore gestisce un archivio proprietà persistente per un dispositivo endpoint audio. L'archivio delle proprietà copia il valore iniziale per la chiave della proprietà PKEY_Device_DeviceDesc dalla stringa del nome descrittivo associata al GUID della categoria di pin KS nel Registro di sistema. Le applicazioni possono leggere il valore della proprietà PKEY_Device_DeviceDesc (stringa nome) dall'archivio delle proprietà, ma non possono modificare il valore. Tuttavia, gli utenti possono modificare il nome usando il pannello di controllo multimediale di Windows, Mmsys.cpl. Ad esempio, in Windows Vista, è possibile seguire questa procedura per modificare il nome di un dispositivo endpoint di rendering:

  1. Per eseguire Mmsys.cpl, aprire una finestra del prompt dei comandi e immettere il comando seguente:

    mmsys.cpl
    

    In alternativa, è possibile eseguire Mmsys.cpl facendo clic con il pulsante destro del mouse sull'icona dell'altoparlante nell'area di notifica, che si trova sul lato destro della barra delle applicazioni e facendo clic su Dispositivi di riproduzione.

  2. Fare clic sul nome di un dispositivo di rendering e quindi su Proprietà.

  3. Nella Finestra Proprietà fare clic sulla scheda Generale. Il nome descrittivo deve essere visualizzato in una casella di testo nella parte superiore del foglio delle proprietà. È possibile modificare il nome descrittivo e quindi salvare le modifiche facendo clic su OK.

I passaggi precedenti modificano il nome descrittivo archiviato nell'archivio delle proprietà per il dispositivo dell'endpoint audio. Questi passaggi non hanno alcun effetto sui nomi descrittivi associati ad altri dispositivi endpoint audio che appartengono alla stessa categoria di pin KS. Non hanno effetto anche su alcun componente che potrebbe eseguire una query diretta su KS per un nome.