Fabriques de filtres
Un pilote d’adaptateur audio fournit des fabriques de filtres pour gérer l’instanciation des filtres. Chaque fabrique de filtre peut instancier un ou plusieurs filtres KS d’un type particulier. Si un type de filtre encapsule une fonction matérielle particulière, le nombre de filtres de ce type que la fabrique peut instancier est limité par les ressources matérielles sous-jacentes.
Étant donné qu’une fabrique de filtres gère un bloc de fonctionnalités matérielles largement autonome, chaque fabrique de filtre peut être considérée comme un pilote de périphérique à part entière. En fait, le terme pilote d’adaptateur tel qu’il est utilisé dans le paragraphe précédent fait référence à une collection de pilotes connexes, à savoir des fabriques de filtre, qui sont empaquetées ensemble pour gérer les différentes fonctions matérielles sur un adaptateur carte.
Comme avec n’importe quel autre pilote Windows Driver Model (WDM), une fabrique de filtre gère les fonctionnalités de configuration et de gestion de l’alimentation. Pendant l’installation, le fichier INF du pilote enregistre un ou plusieurs noms de périphériques de filtre (voir Chaînes d’identification des appareils). Ce processus charge les noms dans le registre système et associe chaque fabrique de filtres à une ou plusieurs catégories de filtreS KS, comme décrit dans Installation des interfaces d’appareil pour une carte audio. Tous les périphériques audio sont classés sous KSCATEGORY_AUDIO, mais un périphérique audio peut également être classé sous des catégories supplémentaires, telles que KSCATEGORY_RENDER (pour un périphérique de rendu audio) ou KSCATEGORY_CAPTURE (pour un périphérique de capture audio). Le pilote publie les fonctionnalités générales d’un appareil au moyen des différentes catégories sous lesquelles il inscrit le filtre pour cet appareil. Lorsque le pilote système SysAudio, par exemple, nécessite un périphérique audio d’un type particulier, il recherche dans le Registre les appareils qui appartiennent aux catégories appropriées.
Le système d’exploitation utilise l’API d’installation, comme décrit dans Composants d’installation d’appareil, pour découvrir et énumérer toutes les fabriques de filtre KSCATEGORY_AUDIO dans le Registre. L’entrée de Registre pour chaque fabrique spécifie à la fois le nom convivial de la fabrique de filtre et son nom d’appareil, qui est une longue chaîne qu’un client transmet à l’appel create-file qui instancie le filtre. Cet appel peut être effectué à ZwCreateFile à partir du mode noyau ou à CreateFile à partir du mode utilisateur. Un filtre est un objet en mode noyau et est identifié par un handle de noyau. L’appel de create-file retourne un handle de instance que les clients peuvent utiliser pour faire référence au filtre. Les clients en mode utilisateur ou les filtres de amont dans le graphique audio peuvent utiliser ce handle pour envoyer ou transférer des requêtes IOCTL au filtre. Pour plus d’informations sur CreateFile, consultez la documentation Microsoft Windows SDK.
Une carte audio WDM classique carte peut résider sur un bus PCI, par exemple, et contenir plusieurs connecteurs d’E/S pour le rendu ou la capture des données d’ondes. Un seul périphérique audio sur ce carte peut contenir des prises audio-sortie analogiques pour la conduite d’un ensemble de haut-parleurs et d’un câble de sortie, ainsi que des prises audio-entrantes analogiques pour recevoir des signaux provenant d’un microphone et d’un câble linein. Le système audio WDM représente l’appareil sous la forme d’un filtre et représente les prises audio en tant que broches sur ce filtre.
Le filtre d’un périphérique audio est implémenté en tant que pilotes de port et de miniport distincts qui sont liés ensemble pour agir à l’unisson :
Le pilote miniport contient le code spécifique au matériel.
Le pilote de port contient le code générique commun à tous les filtres d’un type particulier.
Le fournisseur écrit le pilote miniport, qui contient tout le code propriétaire dont le filtre a besoin pour gérer le matériel audio. Le système d’exploitation fournit le pilote de port, qui est accessible via le pilote système PortCls (Portcls.sys ; consultez Pilote d’adaptateur de classe de port et Pilote système PortCls). La division de l’implémentation du filtre en pilotes de port et de miniport simplifie la tâche d’écriture d’un pilote pour un appareil propriétaire.
Lorsqu’une fabrique de filtre instancie un filtre, elle crée d’abord l’objet pilote miniport pour le filtre. La fabrique de filtre crée ensuite un instance de l’objet de port approprié et lie l’objet pilote miniport à ce instance afin de former un filtre entièrement fonctionnel. L’exemple de code dans Subdevice Creation illustre ce processus. Les pilotes de port et de miniport communiquent entre eux par le biais d’interfaces logicielles bien définies. Pour plus d’informations sur ces interfaces, consultez Interfaces miniport et Prise en charge d’un appareil.
Un filtre audio expose la structure du périphérique audio sous-jacent sous la forme d’une collection de fabriques de broches, de nœuds et de connexions internes. Le pilote miniport regroupe ces informations dans un descripteur de filtre, qui est une structure de type PCFILTER_DESCRIPTOR. Cette structure, à son tour, contient des descripteurs individuels pour les fabriques d’épingles, les nœuds et les connexions internes du filtre. Ces descripteurs sont des structures des types suivants :
Pour obtenir le descripteur de filtre à partir du pilote miniport, le pilote de port appelle la méthode IMiniport::GetDescription .
Pour obtenir un exemple de la façon dont un pilote configure sa structure PCFILTER_DESCRIPTOR, consultez l’exemple de pilote Sysvad, qui est décrit dans Exemples de pilotes audio.