Présentation des ressources matérielles
Les ressources matérielles d’un système sont les ports d’E/S, les vecteurs d’interruption, les canaux d’accès direct à la mémoire (DMA) et d’autres chemins de communication qui doivent être affectés à chaque appareil connecté au système. Les rubriques de cette section décrivent comment Kernel-Mode pilotes KMDF (Driver Framework) négocient les exigences en ressources matérielles pour un appareil, passent en revue la liste des ressources proposées, puis reçoivent les ressources affectées. Cette section explique également comment les pilotes KMDF et User-Mode Driver Framework (UMDF) accèdent aux ressources affectées et les mappent.
Une fois qu’un utilisateur a branché un appareil PnP, le pilote qui énumère l’appareil crée généralement une ou plusieurs configurations logiques, qui sont des combinaisons de ressources matérielles que l’appareil peut utiliser. Ces configurations sont les suivantes :
Configuration de démarrage qui répertorie les ressources matérielles dont l’appareil a besoin au démarrage du système. (Pour les appareils PnP, ces informations sont fournies par le BIOS.)
Configurations supplémentaires dans lesquelles l’appareil peut fonctionner. Le pilote regroupe ces configurations supplémentaires dans une liste des exigences en matière de ressources. Le gestionnaire PnP finira par sélectionner les ressources de cette liste à affecter à l’appareil.
Une fois que le pilote a créé les configurations logiques, il les envoie au framework et l’infrastructure les envoie au gestionnaire PnP.
Ensuite, le gestionnaire PnP détermine les pilotes dont le périphérique a besoin et les charge s’ils ne sont pas déjà chargés. Le gestionnaire PnP envoie la liste de la configuration matérielle requise de l’appareil aux pilotes de l’appareil pour révision. Les pilotes de fonction et de filtre peuvent modifier cette liste et la renvoyer au gestionnaire PnP.
Le gestionnaire PnP examine la liste des configurations matérielles requises modifiées et détermine les ressources spécifiées qui sont réellement disponibles sur le système. Si l’appareil nécessite des ressources que le gestionnaire PnP a précédemment affectées à un autre appareil, le gestionnaire PnP peut tenter de redistribuer des ressources entre les appareils du système.
Ensuite, le gestionnaire PnP crée une liste de ressources, qui est une liste de ressources que le gestionnaire PnP a l’intention d’affecter à l’appareil. Le gestionnaire PnP envoie cette liste aux pilotes de l’appareil pour révision. À ce stade, les pilotes de fonction et de filtre peuvent supprimer des ressources de la liste, mais ils ne peuvent pas y ajouter de ressources.
Enfin, le gestionnaire PnP affecte des ressources à l’appareil. L’infrastructure transmet la liste des ressources aux pilotes de fonction et de filtre de l’appareil, et le pilote de fonction de l’appareil effectue toute initialisation nécessaire pour que le périphérique et le pilote puissent accéder aux ressources.
Les étapes suivantes décrivent le processus plus en détail :
Un pilote de bus détecte l’appareil et l’énumère .
L’infrastructure appelle la fonction de rappel EvtDeviceResourcesQuery du pilote de bus, qui crée une liste de ressources qui décrit la configuration de démarrage de l’appareil.
L’infrastructure appelle la fonction de rappel EvtDeviceResourceRequirementsQuery du pilote de bus, qui crée une liste des besoins en ressources pour l’appareil.
Le gestionnaire PnP détermine les pilotes dont le périphérique a besoin et les charge, s’ils ne sont pas déjà chargés, pour créer une pile de pilotes pour l’appareil.
Le gestionnaire PnP envoie la liste des besoins en ressources de l’appareil à la pile des pilotes pour révision. À mesure que la liste se déplace dans la pile des pilotes, l’infrastructure appelle chaque fonction et la fonction de rappel EvtDeviceFilterRemoveResourceRequirements du pilote de filtre. À mesure que la liste remonte la pile, l’infrastructure appelle la fonction de rappel EvtDeviceFilterAddRequirements de chaque fonction et du pilote de filtre. Ces deux fonctions de rappel peuvent modifier la liste des ressources requises.
Le gestionnaire PnP crée une liste de ressources pour l’appareil et l’envoie à la pile des pilotes pour révision. L’infrastructure appelle chaque fonction et la fonction de rappel EvtDeviceRemoveAddedResources de chaque fonction et filtre, ce qui supprime les ressources que la fonction de rappel EvtDeviceFilterAddRequirements du pilote a ajoutées afin que le pilote de bus n’essaie pas de les utiliser.
L’infrastructure reçoit la liste finale des ressources du gestionnaire PnP et la stocke.
Si un pilote appelle WdfInterruptCreate pour créer des objets d’interruption, l’infrastructure recherche les ressources d’interruption dans la liste des ressources et les affecte aux objets d’interruption.
Une fois que l’appareil est entré dans un état D0 non initialisé, le framework appelle la fonction de rappel EvtDevicePrepareHardware de chaque pilote, en passant des versions brutes et traduites de la liste de ressources de l’appareil en tant qu’argument d’entrée. Le pilote peut enregistrer la liste des ressources, qui est valide jusqu’à ce que le framework appelle la fonction de rappel EvtDeviceReleaseHardware du pilote.