Filter Factory
Un driver dell'adattatore audio fornisce factory di filtro per gestire l'istanza dei filtri. Ogni factory di filtro può creare un'istanza di uno o più filtri KS di un particolare tipo. 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 filtro gestisce un blocco di funzionalità hardware in gran parte autonomo, ogni factory di filtro può essere considerata un driver di dispositivo a proprio diritto. Infatti, il termine driver dell'adattatore come viene usato nel paragrafo precedente, fa riferimento a una raccolta di driver correlati,-filter factory- che vengono inclusi in un pacchetto per gestire le varie funzioni hardware in una scheda scheda.
Come per qualsiasi altro driver WDM (Microsoft Windows Driver Model), una factory di filtro gestisce la funzionalità di risparmio energia e configurazione. Durante l'installazione, il file INF per il driver registra uno o più nomi di dispositivi di filtro (vedere Stringhe di identificazione del dispositivo). Questo processo carica i nomi nel Registro di sistema e associa ogni factory di filtro a una o più categorie di filtro KS, come descritto in Installazione di interfacce dispositivo per un adattatore audio. 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_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 tale 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 Componenti di installazione del dispositivo, 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 può essere effettuata a ZwCreateFile dalla modalità kernel o a 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 che i client possono usare per fare riferimento 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 wave. Un singolo dispositivo audio su questa scheda può contenere jack audio-out analogici per guidare un set di altoparlanti e un cavo lineout e jack audio analogici per ricevere segnali da un microfono e un cavo linein. Il sistema audio WDM rappresenta il dispositivo come filtro e rappresenta i jack audio come puntini su tale filtro.
Il filtro per un dispositivo audio viene implementato come driver porta e miniport separati che sono associati 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 che il filtro deve gestire l'hardware audio. Il sistema operativo fornisce il driver di porta, accessibile tramite il driver di sistema PortCls (Portcls.sys; vedere Driver dell'adapter di classe porta e driver di sistema PortCls). La divisione dell'implementazione del filtro in driver porta e miniport semplifica l'attività di scrittura di un driver per un dispositivo proprietario.
Quando una factory di filtro crea un'istanza di un filtro, crea innanzitutto l'oggetto driver miniport per il filtro. La factory di filtro crea quindi un'istanza dell'oggetto porta appropriato e associa 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 come raccolta di pin factory, 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 factory, 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 della 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.