Ressources matérielles

Les ressources matérielles sont les chemins de bus assignables et adressables qui permettent aux périphériques et aux processeurs système de communiquer entre eux. Les ressources matérielles incluent généralement des adresses de port d’E/S, des vecteurs d’interruption et des blocs d’adresses mémoire relatives au bus.

Avant que le système puisse communiquer avec un appareil instance, le gestionnaire PnP doit affecter des ressources matérielles à l’appareil instance en fonction de la connaissance des ressources disponibles et de celles que l’appareil instance est en mesure d’utiliser. Les ressources sont affectées à chaque nœud d’appareil dans l’arborescence de l’appareil (en supposant que l’appareil représenté a besoin de ressources et que ces ressources sont disponibles). Le gestionnaire PnP effectue le suivi des ressources matérielles à l’aide de listes, qu’il associe aux nœuds d’appareil. Il utilise deux types de listes :

Liste des ressources requises
Les appareils sont généralement conçus pour fonctionner dans des plages d’affectations de ressources. Par instance, un appareil peut nécessiter un seul vecteur d’interruption, mais il peut être en mesure d’utiliser n’importe quel vecteur d’une plage de vecteurs. Pour chaque appareil instance, le gestionnaire PnP gère une liste des besoins en ressources qui spécifie toutes les plages de ressources matérielles dans lesquelles l’appareil peut fonctionner. Le nom de la liste provient du fait que le gestionnaire PnP est requis pour choisir les ressources de cette liste lors de leur affectation à l’appareil.

Le code en mode noyau spécifie les listes de ressources requises à l’aide de structures IO_RESOURCE_REQUIREMENTS_LIST (soit comme entrée dans les routines système, soit en réponse aux IRP). Le code en mode utilisateur spécifie les listes de ressources requises utilisant des structures de gestionnaire de configuration PnP comme entrée pour les fonctions du gestionnaire de configuration PnP.

Liste des ressources
Lorsque le gestionnaire PnP affecte des ressources à un appareil, il effectue le suivi de ces affectations en créant une liste des ressources affectées pour chaque appareil instance. Ces listes peuvent être appelées listes d’affectation de ressources, mais ce nom est généralement abrégé en listes de ressources. Le gestionnaire PnP peut modifier le contenu de la liste de ressources à mesure que les appareils sont ajoutés ou supprimés d’un système et que les ressources sont ensuite réaffectées. (Les ressources peuvent également être affectées par un BIOS PnP. En outre, le logiciel d’installation (à l’aide de fichiers INF ou d’une entrée utilisateur) peut forcer le gestionnaire PnP à affecter des ressources spécifiques à un appareil.)

Le code en mode noyau spécifie des listes de ressources à l’aide de structures CM_RESOURCE_LIST (soit comme entrée dans les routines système, soit en réponse aux IRP). Le code en mode utilisateur spécifie des listes de ressources utilisant des structures de gestionnaire de configuration PnP comme entrée dans les fonctions du gestionnaire de configuration PnP.

Le gestionnaire PnP stocke les listes de ressources requises et les listes de ressources dans le Registre, où elles peuvent être consultées à l’aide de Regedit.exe. Les pilotes peuvent accéder indirectement à ces listes via Plug-and-Play routines et Plug-and-Play LES IRP secondaires. Les applications en mode utilisateur peuvent utiliser des fonctions de gestionnaire de configuration PnP. (Les pilotes et les applications ne doivent pas accéder directement à ces listes à l’aide de fonctions de Registre, car le format de stockage est susceptible d’être modifié dans une version ultérieure.)

Configurations logiques

Les listes de ressources requises et les listes de ressources contiennent une ou plusieurs configurations logiques. Chaque configuration logique identifie une plage de ressources acceptables ou un ensemble de ressources spécifiques pour un appareil spécifique instance. En outre, chaque configuration logique d’un appareil instance appartient à l’un des types de configuration logique. Les types de configuration sont répertoriés ci-dessous. Plusieurs configurations logiques, de types identiques ou différents, peuvent être affectées à chaque appareil instance.

Types de configuration logique pour les listes de ressources requises

Configuration de base
Liste des besoins en ressources identifiant les plages de ressources fournies par un appareil Plug-and-Play. Un pilote doit retourner cette liste lorsqu’il reçoit le IRP_MN_QUERY_RESOURCE_REQUIREMENTS IRP. (La configuration de base d’un appareil non PnP peut être décrite dans un fichier INF. Dans ce cas, le logiciel d’installation de l’appareil lit le fichier INF et appelle les fonctions du gestionnaire de configuration PnP pour créer une liste de conditions requises.)

Configuration filtrée
Liste des besoins en ressources qui a été fournie à une pile de pilotes, éventuellement modifiée, puis retournée par la pile de pilotes, en réponse à l’IRP IRP_MN_FILTER_RESOURCE_REQUIREMENTS . Le gestionnaire PnP utilise la configuration filtrée résultante comme base pour l’allocation des ressources.

Configuration de remplacement
Liste des besoins en ressources qui remplace les configurations de base. En règle générale, un programme d’installation d’appareil crée une configuration de remplacement si le fichier INF de l’appareil inclut une section INF DDInstall.LogConfigOverride. Une configuration de remplacement n’est pas supprimée si son appareil est physiquement supprimé du système.

Types de configuration logique pour les listes de ressources

Configuration de démarrage
Liste de ressources identifiant les ressources affectées à un appareil instance au démarrage du système. (Pour les appareils PnP, il s’agit de la configuration fournie par le BIOS ; pour les appareils non PnP, ces ressources peuvent être sélectionnées par les cavaliers sur le carte.) Un pilote doit retourner cette liste de ressources lorsqu’il reçoit l’IRP IRP_MN_QUERY_RESOURCES. (Une configuration de démarrage peut être partiellement vide si le BIOS ne peut pas déterminer toutes les ressources utilisées par un appareil.) Le gestionnaire PnP peut modifier cette liste si un appareil est supprimé ou redémarré. Pour les appareils non PnP, ce type de configuration peut être utilisé à la place d’une configuration forcée, auquel cas il a une priorité de configuration inférieure à une configuration forcée équivalente. Une seule configuration de démarrage peut exister pour chaque appareil instance.

Configuration forcée
Liste de ressources identifiant les ressources qu’un appareil instance doit utiliser. Une configuration forcée empêche le gestionnaire PnP d’affecter d’autres ressources à l’appareil instance. Un programme d’installation d’appareil peut créer une configuration forcée basée sur des informations contenues dans un INF ou reçues d’un utilisateur. Une configuration forcée n’est pas supprimée si son appareil est physiquement supprimé du système. Une seule configuration forcée peut exister pour chaque appareil instance.

Configuration allouée
Liste de ressources identifiant les ressources actuellement utilisées par un instance d’appareil. Une seule configuration allouée peut exister pour chaque appareil instance.

Les pilotes de périphérique sont chargés de déterminer la configuration de base, la configuration filtrée et la configuration de démarrage d’un appareil compatible PnP, et de retourner ces informations en réponse aux IRP envoyés par le gestionnaire PnP. (Pour plus d’informations, consultez Ajout d’un appareil PnP à un système en cours d’exécution.) Le logiciel d’installation de pilote peut créer des configurations de remplacement, des configurations forcées et, pour les appareils non PnP, des configurations de démarrage. Le gestionnaire PnP gère la configuration allouée de chaque appareil instance.

Une priorité est affectée à chaque configuration lors de sa création. Si le gestionnaire PnP constate qu’un appareil instance a reçu plusieurs configurations logiques du même type, il tente d’utiliser d’abord celle qui a la priorité la plus élevée. Si cette configuration entraîne des conflits de ressources, elle tente la configuration avec la priorité inférieure suivante. (Pour obtenir la liste des priorités de configuration, consultez CM_Add_Empty_Log_Conf.)