Introduction à la classe de port
La plupart des pilotes matériels pour les périphériques audio PCI et DMA sont basés sur la bibliothèque de classe de port, qui est accessible via le pilote système PortCls (Portcls.sys). PortCls est un pilote de classe de port audio que Microsoft inclut dans le système d’exploitation. PortCls fournit un ensemble de pilotes de port qui implémentent la plupart des fonctionnalités de filtre de diffusion en continu par noyau (KS) génériques. Par conséquent, PortCls simplifie la tâche du développeur du pilote audio. Le fournisseur de matériel doit uniquement fournir un ensemble de pilotes miniport pour gérer les fonctions spécifiques au matériel d’une carte audio.
Bien que les fournisseurs de matériel aient la possibilité d’implémenter leurs propres filtres KS pour leurs périphériques audio, cette option est à la fois difficile et inutile pour les périphériques audio classiques. Vous pouvez développer un filtre KS pour qu’il soit conforme à Stream.sys, au pilote de classe Stream ou à Avstream.sys, au pilote de classe AVStream. Toutefois, un filtre KS basé sur Stream.sys ne peut pas tirer parti des améliorations disponibles uniquement dans AVStream. Pour plus d’informations sur les filtres KS et les PortCls, consultez Prise en main avec les pilotes audio WDM.
L’implémentation interne de PortCls peut évoluer pour tirer parti des améliorations de la diffusion en continu du noyau dans les versions windows successives tout en conservant la compatibilité avec les pilotes existants.
PortCls est implémenté dans le fichier système Portcls.sys en tant que pilote d’exportation (une DLL en mode noyau) et contient les éléments suivants :
Ensemble de fonctions d’assistance qui peuvent être appelées par le pilote de l’adaptateur
Collection de pilotes de port audio
Il incombe au fournisseur de matériel d’un périphérique audio de fournir un pilote d’adaptateur. Le pilote de l’adaptateur inclut le code d’initialisation et de gestion des pilotes miniport (y compris la fonction DriverEntry ) et une collection de pilotes miniport audio .
Lorsque le système d’exploitation charge le pilote de l’adaptateur, celui-ci crée un ensemble d’objets de pilote miniport et invite le pilote système PortCls à créer un ensemble correspondant d’objets de pilote de port. (L’exemple de code dans La création d’un sous-appareil illustre ce processus.) Ces pilotes de port sont généralement un sous-ensemble de ceux qui sont disponibles dans le fichier Portcls.sys. Chaque pilote miniport se lie à un pilote de port correspondant à partir de Portcls.sys pour former un pilote de sous-appareil complet. Le pilote de sous-appareil port et miniport combiné est un filtre KS (voir Filtres audio). Par exemple, un pilote d’adaptateur standard peut contenir trois pilotes miniport : WaveRT, DMusUART et Topologie (avec les interfaces IMiniportWaveRT, IMiniportDMus et IMiniportTopology ). Pendant l’initialisation, ces pilotes miniport sont liés aux pilotes de port WaveRT, DMus et Topologie (avec les interfaces IPortWaveRT, IPortDMus et IPortTopology ) contenus dans le fichier Portcls.sys. Chacun de ces trois pilotes de sous-appareil prend la forme d’un filtre KS. Les trois filtres exposent ensemble les fonctionnalités complètes de l’adaptateur audio.
En règle générale, les pilotes de port fournissent la majorité des fonctionnalités pour chaque classe de sous-appareil audio. Par exemple, le pilote de port WaveRT effectue la majeure partie du travail nécessaire pour diffuser en continu des données audio vers un périphérique audio DMA, tandis que le pilote miniport fournit des détails spécifiques au périphérique, tels que l’adresse DMA et le nom de l’appareil.
Les pilotes d’adaptateur audio et les pilotes miniport sont généralement écrits en Microsoft C++ et utilisent largement les interfaces COM. L’architecture du pilote port-miniport favorise la conception modulaire. Les enregistreurs de pilotes Miniport doivent implémenter leur pilote en tant que classe C++ dérivée de l’interface IMiniport , qui est définie dans le fichier d’en-tête Portcls.h. L’initialisation matérielle a lieu au moment du chargement du pilote, généralement dans la méthode Init de la classe dérivée de IMiniport (par exemple, IMiniportWaveRT ::Init). Pour plus d’informations sur les implémentations COM des pilotes de miniport audio, consultez COM dans le noyau.
Le diagramme suivant illustre la relation entre les pilotes de port et de miniport et leur position dans la pile audio.
Dans le diagramme précédent, le composant KSEndpoint est un fichier fourni par le système qui est fourni avec Windows Vista et les versions ultérieures de Windows. Ce composant est fourni sous la forme d’une DLL (Audiokse.dll). KSEndpoint extrait le point de terminaison d’appareil en mode noyau et fournit au moteur audio un accès au point de terminaison abstrait. Pour plus d’informations sur le moteur audio, consultez Exploration du moteur audio Windows Vista.
La légende du diagramme précédent montre les zones qui représentent les composants de pilote que le fournisseur fournit. Notez que le bord supérieur de chaque pilote miniport s’interface avec le bord inférieur de chaque pilote de port. Par exemple, le pilote de port WaveRT expose une interface IPortWaveRT au pilote de miniport WaveRT, qui expose une interface IMiniportWaveRT au pilote de port. Ces interfaces sont parfois appelées interfaces de bord supérieur et inférieur .
La classe de port et les pilotes de classe AVStream sont similaires dans la mesure où ils sont tous deux des pilotes WDM et ils prennent tous les deux en charge l’architecture de streaming du noyau WDM. Toutefois, les pilotes de classe de port diffèrent des pilotes de classe AVStream dans les domaines de la gestion et de la réentrance du multiprocesseur. Les pilotes de classe de port effectuent les opérations suivantes :
Utilisez une approche à trois niveaux qui combine le pilote de classe, les pilotes de port et les pilotes miniport fournis par le fournisseur.
Avoir un nombre limité de fonctions audio, ce qui permet aux pilotes miniport de fonctionner plus près du matériel audio.
Autoriser plusieurs pilotes de port ou miniport à être liés pour un appareil spécifique. Cette fonctionnalité permet une meilleure prise en charge des cartes multifonctions.
Ne prenez pas en charge les bus externes (par exemple, USB). Tous les pilotes de port prennent en charge les périphériques qui résident sur les bus système (PCMCIA et PCI).
La terminologie utilisée pour décrire les ports audio WDM et les pilotes miniport diffère à certains égards des termes utilisés pour d’autres classes de pilotes Windows. Ces différences sont expliquées dans la terminologie audio WDM.
Cette section traite des sujets suivants :