Vue d’ensemble du pilote miniport du synthétiseur
Un synthé et un récepteur sont nécessaires pour la prise en charge de DirectMusic. Les implémentations par défaut de chacune d’elles sont fournies avec DirectMusic. Le synthétiseur logiciel Microsoft en mode utilisateur est fourni comme synthé par défaut et DirectSound est le récepteur d’ondes par défaut. Ceux-ci fournissent une émulation matérielle complète, mais d’autres améliorations des performances peuvent généralement être obtenues avec des implémentations logicielles ou matérielles en mode noyau.
Si vous implémentez la prise en charge du matériel, le seul choix consiste à écrire un pilote en mode noyau. En mode noyau, le récepteur d’ondes est fourni par le pilote de port DMus dans PortCls et ne doit pas avoir besoin d’être remplacé pour les implémentations personnalisées (comme cela est parfois fait en mode utilisateur).
Pour les pilotes DirectMusic en mode noyau, le fichier d’en-tête le plus important est dmusicks.h. Il contient les interfaces main en mode noyau dont vous avez besoin pour implémenter votre pilote miniport. Ces interfaces sont les suivantes :
Les trois dernières interfaces sont implémentées dans PortCls.sys.
Deux autres fichiers d’en-tête intéressants sont dmusprop.h, qui contient des éléments de propriété DirectMusic, et dmusbuff.h, qui contient la structure IRP main, DMUS_EVENTHEADER.
Le diagramme suivant montre la relation entre le pilote de l’adaptateur IHV et le reste du système DirectMusic.
Au niveau supérieur, le pilote est exposé via un pilote de port DirectMusic (une interface IDirectMusicPort instance). C’est ainsi qu’une application parle à DirectMusic. Ce pilote de port communique vers le bas vers un instance de broche via des appels de streaming de noyau standard via la fonction DeviceIoControl (décrite dans la documentation Microsoft Windows SDK).
Notez que le terme « port » a deux significations en conflit dans la figure ci-dessus. Évitez de confondre l’utilisation du terme port par l’API DirectMusic, en mode utilisateur ci-dessus, avec le pilote de port DMus en mode noyau. Les termes ont des significations similaires, mais légèrement différentes dans les deux contextes. En particulier, notez que l’interface IDirectMusicPort en haut de la figure présente une abstraction d’une broche unique instance que le pilote de port DMus implémente dans la moitié inférieure de la figure.
Chaque objet de pilote miniport est connecté à un objet pilote de port correspondant. L’objet pilote de port fournit des services de base au pilote miniport. Chaque épingle instance qui est mappée à un instance ouvert de l’appareil a des services tels que la conversion de format, le séquencement et le « thruing » (pour une présentation de l’utilisation, consultez la description de l’interface IDirectMusicThru dans la documentation du Kit de développement logiciel (SDK) Windows). Les épingles peuvent être des cibles ou des sources et prendre en charge plusieurs formats et plages de données. Chaque broche instance spécifie la cible ou la source, et spécifie le format et la plage de données pris en charge.
L’objet pilote miniport est créé par le pilote d’adaptateur de l’IHV. Bien qu’il existe une broche instance et un séquenceur par instance ouvert du pilote, il n’existe qu’une seule paire de pilotes port-miniport par élément matériel (ou synthétiseur logiciel noyau chargé). La communication avec le pilote miniport se fait par le biais d’un flux d’événements qui est transmis au pilote miniport et par les éléments de propriété pris en charge par le pilote miniport.
La section Interface du pilote de miniport DirectMusic présente les détails d’une implémentation de pilote de miniport DirectMusic.