Fabriques de filtres
Un pilote d’adaptateur audio fournit des fabriques de filtres pour gérer l’instanciation des filtres. Chaque fabrique de filtres 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 filtre gère un bloc largement autonome de fonctionnalités matérielles, chaque fabrique de filtre peut être considérée comme un pilote de périphérique en son propre droit. 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 appelés fabriques de filtres, qui sont regroupés pour gérer les diverses fonctions matérielles d'une carte adaptateur.
Comme pour tout autre pilote du modèle de pilotes Windows de Microsoft (WDM), une fabrique de filtres gère la gestion de l’alimentation et les fonctionnalités de configuration. Lors de l’installation, le fichier INF du pilote enregistre un ou plusieurs noms d’appareil de filtres (veuillez consulter la section 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’appareils pour un adaptateur audio. Tous les appareils audio sont classés sous KSCATEGORY_AUDIO, mais un appareil audio peut également être classé sous des catégories supplémentaires telles que KSCATEGORY_RENDER (pour un appareil de rendu audio) ou KSCATEGORY_CAPTURE (pour un périphérique de capture audio). Le pilote annonce les capacités générales d’un appareil au moyen des différentes catégories sous lesquelles il enregistre 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 filtres KSCATEGORY_AUDIO dans le Registre. L’entrée de registre pour chaque fabrique spécifie à la fois le nom convivial de la fabrique de filtres et son nom d’appareil, qui est une longue chaîne qu’un client transmet à l’appel de création de fichier qui instancie le filtre. Cet appel peut être effectué pour zwCreateFile à partir du mode noyau ou pour createFile à partir du mode utilisateur. Un filtre est un objet en mode noyau et est identifié par un handle de noyau. L’appel create-file retourne un handle d’instance que les clients peuvent utiliser pour faire référence au filtre. Les clients en mode utilisateur ou les filtres en 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 du Kit de développement logiciel (SDK) Microsoft Windows.
Une carte d’adaptateur audio WDM classique 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’onde. Un seul appareil audio sur cette carte peut contenir des prises analogiques de sortie audio pour alimenter un ensemble de haut-parleurs et un câble de sortie ligne, ainsi que des prises analogiques d’entrée audio pour recevoir des signaux provenant d’un microphone et d’un câble d’entrée ligne. Le système audio WDM représente l’appareil sous la forme d’un filtre et représente les jacks audio sous forme de broches sur ce filtre.
Le filtre pour un appareil audio est implémenté en tant que pilotes de port et de miniport distincts qui sont liés ensemble pour fonctionner de manière unifiée :
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, accessible via le pilote système PortCls (Portcls.sys; voir pilote d’adaptateur de classe de port et pilote système PortCls). La division de l’implémentation de filtre en pilotes port et 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 de pilote miniport pour le filtre. La fabrique de filtre crée ensuite une instance de l’objet de port approprié et lie l’objet de pilote miniport à cette instance afin de former un filtre entièrement fonctionnel. L’exemple de code dans Création de sous-éléments illustre ce processus. Les pilotes port et miniport communiquent entre eux via des interfaces logicielles bien définies. Pour plus d’informations sur ces interfaces, veuillez consulter la section Interfaces Miniport et Prise en charge d’un appareil.
Un filtre audio expose la structure de l'appareil audio sous-jacent en tant que collection d'usines de pins, de nœuds et d'unités internes. Le pilote miniport consolide ces informations dans un descripteur de filtre, qui est une structure de type PCFILTER_DESCRIPTOR. Cette structure contient à son tour des descripteurs individuels pour les fabriques de broches du filtre, les nœuds et les connexions internes. 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 abordé dans les exemples de pilotes audio.