Utilisation du pilote de bus multifonction System-Supplied
Si le bus sous-jacent d’un appareil prend en charge une norme de bus multifonction, telle que la carte PC, le fournisseur d’un appareil multifonctions sur une plateforme NT peut utiliser le pilote de bus multifonction fourni par le système (mf.sys) pour prendre en charge l’appareil.
Le pilote de bus mf.sys gère l’énumération PnP des fonctions d’appareil et arbitre les ressources, telles que les ports d’E/S et les IRQs, entre les fonctions. Le pilote mf.sys gère la gestion de l’alimentation pour les fonctions enfants en gérant l’alimentation du périphérique multifonction parent.
Pour utiliser mf.sys, un appareil multifonction doit répondre aux exigences suivantes :
Le bus sous-jacent de l’appareil doit avoir une norme multifonction.
La DEVICE_CAPABILITIES des fonctions enfants doit être identique et doit correspondre à celles de l’appareil parent. Lorsqu’il est interrogé sur les fonctionnalités de l’appareil d’une fonction enfant (IRP_MN_QUERY_CAPABILITIES), le pilote mf.sys indique les fonctionnalités de l’appareil parent.
Le pilote du bus sur lequel réside l’appareil multifonction, tel que pcmcia.sys, doit gérer les demandes IRP_MN_READ_CONFIG et IRP_MN_WRITE_CONFIG . Le pilote mf.sys transmet simplement ces IIP au pilote de bus parent.
Les fonctions doivent être indépendantes : elles ne peuvent pas avoir de dépendances d’ordre de démarrage ; les besoins en ressources d’une fonction ne peuvent pas être exprimés en termes de ressources d’une autre fonction (par exemple, function1 utilise le port D/S X et function2 utilise portX + 200) ; et chaque fonction doit être en mesure de fonctionner comme un appareil distinct, même si elle est gérée par les mêmes pilotes qu’une autre fonction.
Pour utiliser mf.sys, un fournisseur fournit un INF pour l’appareil multifonction qui spécifie mf.sys comme pilote pour l’appareil. Si un appareil est entièrement et précisément conforme à la norme multifonction pour son bus sous-jacent, le fournisseur d’un tel appareil peut utiliser le mf.inf fourni par le système. Si un appareil n’est pas entièrement conforme à la norme, le fournisseur doit fournir un INF personnalisé.
Dans les deux cas, le fournisseur fournit également des pilotes et des fichiers INF pour les fonctions individuelles sur l’appareil.
Le squelette suivant d’un INF multifonction personnalisé illustre la syntaxe requise pour spécifier mf.sys comme pilote pour un périphérique multifonction :
[Version]
; ...
Class = Multifunction ; the system-defined class for MF devices
ClassGUID = {4d36e971-e325-11ce-bfc1-08002be10318} ; GUID for MF
; ...
; ...
[ControlFlags]
ExcludeFromSelect = * ; don't include PnP devices in a displayed list of
; devices available for manual installation
[Manufacturer]
; ...
; ...
[ModelsSection.NTamd64] ; models section
; ...
; ...
[DDInstall.NT] ; install section
Include = mf.inf ; specify that this device requires mf.sys
Needs = MFINSTALL.mf
; ...
[DDinstall.NT.Services]
Include = mf.inf
Needs = MFINSTALL.mf.Services
[DDInstall.NT.HW]
AddReg=DDInstall.RegHW
[DDInstall.RegHW]
; put entries with child function hardware IDs here
; ...
; put override sections here...
; ...
[Strings]
; ...
Envisagez une combinaison d’appareils LAN/modem PC Card. Sans prise en charge des fonctions multifonctions spéciales, un tel appareil peut être signalé par le pilote de bus PCMCIA en tant que périphérique modem unique. Avec la prise en charge supplémentaire d’un INF multifonction et du pilote de bus mf.sys, les deux fonctions de l’appareil sont énumérées. L’illustration suivante montre les exemples de piles d’appareils qui peuvent être créées pour une telle carte PC combinée avec la prise en charge multifonction requise.
Comme indiqué dans la figure précédente, le pilote du bus sur lequel réside l’appareil multifonction énumère un appareil. L’ID matériel dans le fichier INF multifonctions oblige le gestionnaire PnP à charger le pilote de bus mf.sys en tant que pilote de fonction pour l’appareil. Le pilote de bus mf.sys énumère deux appareils enfants, un périphérique LAN et un modem.
Le gestionnaire PnP traite chaque appareil enfant comme un appareil classique, en localisant les fichiers INF, en chargeant les pilotes appropriés, en appelant leurs routines AddDevice, et ainsi de suite jusqu’à ce qu’une pile d’appareils soit créée pour chaque appareil. Le pilote de bus mf.sys arbitre les ressources pour les appareils enfants et gère tout autre aspect multifonction de l’appareil. Le fournisseur du carte multifonction fournit des pilotes de fonction et des INF pour les fonctions multiples (LAN et modem), comme s’il s’agissait d’appareils distincts.
L’illustration se concentre sur les pilotes de fonction et les pilotes de bus parent, ainsi que sur les FDO et les PDO associés. Tous les pilotes de filtre (et les DO de filtre) sont omis par souci de simplicité.