Fabbriche di Filtri
Un driver di adattatore audio fornisce fabbriche di filtri per gestire l'istanziazione dei filtri. Ogni fabbrica di filtri può creare un'istanza di uno o più filtri KS di un tipo specifico. Se un tipo di filtro incapsula una determinata funzione hardware, il numero di filtri di quel tipo di cui la factory può creare un'istanza è limitata dalle risorse hardware sottostanti.
Poiché una factory di filtri gestisce un blocco di funzionalità hardware in gran parte autonomo, ciascuna factory di filtri può essere considerata un driver di dispositivo a tutti gli effetti. Infatti, il termine driver dell'adattatore usato nel paragrafo precedente fa riferimento a una raccolta di driver correlati,-filter factory- che vengono inseriti insieme per gestire le varie funzioni hardware in una scheda adattatore.
Come per qualsiasi altro driver del modello di driver Microsoft Windows (WDM), una fabbrica di filtri gestisce la gestione dell'energia e la funzionalità di configurazione. Durante l'installazione, il file INF per il driver registra uno o più nomi dei dispositivi filtro (vedere Stringhe di identificazione dei dispositivi). Questo processo carica i nomi nel registro di sistema e associa ogni fabbrica di filtri a una o più categorie di filtri KS, come descritto in Installazione delle interfacce dispositivo per un adattatore audio. Tutti i dispositivi audio sono classificati in KSCATEGORY_AUDIO, ma un dispositivo audio potrebbe essere classificato anche in categorie aggiuntive, ad esempio KSCATEGORY_RENDER (per un dispositivo di rendering audio) o KSCATEGORY_CAPTURE (per un dispositivo di acquisizione audio). Il driver annuncia le funzionalità generali di un dispositivo tramite le varie categorie in cui registra il filtro per il dispositivo. Quando il driver di sistema SysAudio , ad esempio, richiede un dispositivo audio di un particolare tipo, cerca nel Registro di sistema i dispositivi che rientrano nelle categorie appropriate.
Il sistema operativo usa l'API di installazione, come descritto in Device and Driver Installation, per individuare ed enumerare tutte le factory di filtro KSCATEGORY_AUDIO nel Registro di sistema. La voce del Registro di sistema per ogni factory specifica sia il nome descrittivo della factory del filtro che il nome del dispositivo, ovvero una stringa lunga che un client passa alla chiamata create-file che crea un'istanza del filtro. Questa chiamata potrebbe essere effettuata per ZwCreateFile dalla modalità kernel o per CreateFile dalla modalità utente. Un filtro è un oggetto in modalità kernel e viene identificato da un handle del kernel. La chiamata create-file restituisce un handle di istanza a cui i client possono fare riferimento per riferirsi al filtro. I client in modalità utente o i filtri upstream nel grafico audio possono usare questo handle per inviare o inoltrare richieste IOCTL al filtro. Per altre informazioni su CreateFile, vedere la documentazione di Microsoft Windows SDK.
Una tipica scheda adattatore audio WDM può risiedere in un bus PCI, ad esempio, e contenere diversi connettori di I/O per il rendering o l'acquisizione di dati audio. Un singolo dispositivo audio su questa scheda può contenere jack audio-out analogici per alimentare un set di altoparlanti e un cavo line-out, e jack audio-in analogici per ricevere segnali da un microfono e un cavo line-in. Il sistema audio WDM rappresenta il dispositivo come filtro e rappresenta i jack audio come pin su tale filtro.
Il filtro per un dispositivo audio viene implementato come driver di porta e miniporta separati, collegati insieme per agire all'unisono.
- Il driver miniport contiene il codice specifico dell'hardware.
- Il driver di porta contiene il codice generico comune a tutti i filtri di un particolare tipo.
Il fornitore scrive il driver miniport, che contiene tutto il codice proprietario necessario affinché il filtro possa gestire l'hardware audio. Il sistema operativo fornisce il driver di porta, accessibile tramite il driver di sistema PortCls (Portcls.sys; vedere driver della classe di porta e driver di sistema PortCls). Dividendo l'implementazione del filtro in driver porta e miniport semplifica l'attività di scrittura di un driver per un dispositivo proprietario.
Quando una fabbrica di filtri crea un'istanza di un filtro, crea prima di tutto l'oggetto driver miniport per il filtro. La fabbrica di filtri crea quindi un'istanza dell'oggetto porta appropriato e collega l'oggetto driver miniport a tale istanza per formare un filtro completamente funzionante. L'esempio di codice in Creazione del dispositivo secondario illustra questo processo. I driver porta e miniport comunicano tra loro tramite interfacce software ben definite. Per altre informazioni su queste interfacce, vedere interfacce miniport e supporto di un dispositivo.
Un filtro audio espone la struttura del dispositivo audio sottostante in quanto raccolta di fabbriche di pin, nodi e connessioni interne. Il driver miniport consolida queste informazioni in un descrittore di filtro, ovvero una struttura di tipo PCFILTER_DESCRIPTOR. Questa struttura, a sua volta, contiene singoli descrittori per le fabbriche di pin, i nodi e le connessioni interne del filtro. Questi descrittori sono strutture dei tipi seguenti:
Per ottenere il descrittore di filtro dal driver miniport, il driver di porta chiama il metodo IMiniport::GetDescription.
Per un esempio di come un driver configura la struttura PCFILTER_DESCRIPTOR, vedere il driver di esempio Sysvad, descritto in Driver audio di esempio.