Création d’une liste des ressources requises
Lorsqu’un pilote de bus détecte un appareil enfant, il est responsable de la création d’une liste des besoins en ressources pour l’appareil. Chaque élément de la liste est une configuration logique pour l’appareil.
Une fois que le pilote a signalé l’appareil pendant l’énumération du bus, l’infrastructure appelle la fonction de rappel EvtDeviceResourceRequirementsQuery du pilote. Cette fonction de rappel reçoit un handle pour un objet resource-requirements-list qui représente une liste de ressources requises vide.
Le pilote doit ensuite effectuer les opérations suivantes pour ajouter des informations à une liste des besoins en ressources :
Créez une configuration logique vide.
Pour chaque configuration logique que le pilote spécifie, le pilote doit appeler WdfIoResourceListCreate pour créer une configuration logique vide.
Ajoutez des descripteurs de ressources à la configuration logique.
Pour ajouter des descripteurs de ressources à une configuration logique, le pilote doit effectuer les opérations suivantes, pour chaque type de ressource matérielle dont l’appareil a besoin :
- Renseignez une structure de IO_RESOURCE_DESCRIPTOR allouée par le pilote, qui spécifie une plage de valeurs valides pour une ressource particulière.
- Appelez WdfIoResourceListAppendDescriptor ou WdfIoResourceListInsertDescriptor pour ajouter le contenu de la structure IO_RESOURCE_DESCRIPTOR à une configuration logique.
Si un appareil utilise plusieurs instance d’un type de ressource, tous les pilotes de la pile qui accèdent à la ressource doivent connaître l’ordre dans lequel les ressources sont ajoutées. Par exemple, si un appareil nécessite deux plages d’adresses de port d’E/S, tous les pilotes qui accèdent aux descripteurs de ressources doivent connaître l’ordre dans lequel les deux plages sont ajoutées à la configuration logique.
Ajoutez la configuration logique à la liste des ressources requises.
Pour ajouter une configuration logique à la liste des besoins en ressources de l’appareil, le pilote appelle WdfIoResourceRequirementsListAppendIoResList ou WdfIoResourceRequirementsListInsertIoResList.
Lors de l’affectation de ressources à un appareil, le gestionnaire PnP tente de répondre aux exigences de la première configuration logique de la liste. Si les ressources requises pour cette configuration ne sont pas disponibles, le gestionnaire PnP correspond à la configuration suivante dans la liste pour laquelle les ressources sont disponibles.
Si votre pilote prend en charge un périphérique non PnP, il doit généralement appeler WdfIoResourceRequirementsListSetSlotNumber et WdfIoResourceRequirementsListSetInterfaceType.
Une fois la fonction de rappel EvtDeviceResourceRequirementsQuery du pilote retournée, l’infrastructure transmet la liste des besoins en ressources au gestionnaire PnP.