Partager via


IRP_MN_FILTER_RESOURCE_REQUIREMENTS

Le gestionnaire PnP envoie cette IRP à une pile de périphériques afin que le pilote de fonction puisse ajuster les ressources requises par l’appareil, le cas échéant.

Le pilote de fonction gère généralement cette IRP.

Le pilote de bus parent (et les pilotes de filtre de bus) ne doivent pas gérer cette demande pour un AOP enfant ; au lieu de cela, un tel pilote doit signaler les besoins en ressources en réponse à une demande de IRP_MN_QUERY_RESOURCE_REQUIREMENTS .

Les pilotes de filtre supérieur et inférieur ne gèrent pas cette IRP.

Valeur

0x0D

Code majeur

IRP_MJ_PNP

Date d’envoi

Le gestionnaire PnP envoie cette IRP lorsqu’il se prépare à allouer des ressources à un appareil.

Le gestionnaire PnP envoie cette IRP à IRQL PASSIVE_LEVEL dans le contexte d’un thread arbitraire.

Paramètres d’entrée

Irp-> IoStatus.Information pointe vers un IO_RESOURCE_REQUIREMENTS_LIST contenant les ressources matérielles requises pour l’appareil. Le pointeur a la valeur NULL si l’appareil ne consomme aucune ressource matérielle.

Parameters.FilterResourceRequirements.IoResourceRequirementList pointe également vers un IO_RESOURCE_REQUIREMENTS_LIST, mais le pilote de fonction doit utiliser la liste dans le bloc IoStatus .

Paramètres de sortie

Retourné dans le bloc d’E/S status.

Bloc d’état E/S

Si un pilote de fonction gère cette IRP, il le gère sur le chemin de l’IRP de la sauvegarde de la pile. Si le pilote de fonction gère correctement l’IRP, il définit Irp-IoStatus.Status> sur STATUS_SUCCESS et définit Irp-IoStatus.Information> vers un pointeur vers un IO_RESOURCE_REQUIREMENTS_LIST contenant les exigences de ressources filtrées. Pour plus d’informations sur la définition de la liste des ressources filtrées, consultez la section « Opération » ci-dessous. Si un pilote de fonction rencontre une erreur lors de la gestion de cette IRP, il définit l’erreur dans Irp-IoStatus.Status>. Si un pilote de fonction ne gère pas cette IRP, il utilise IoSkipCurrentIrpStackLocation pour passer l’IRP dans la pile inchangée.

Les pilotes de filtre supérieur et inférieur ne gèrent pas cette IRP. Un tel pilote appelle IoSkipCurrentIrpStackLocation, transmet l’IRP au pilote suivant, ne doit pas modifier Irp-IoStatus> et ne doit pas terminer l’IRP.

Le pilote de bus parent ne gère pas cette IRP. Il laisse Irp-IoStatus> en l’état et termine l’IRP.

Opération

Le gestionnaire PnP envoie une requête IRP_MN_QUERY_RESOURCE_REQUIREMENTS au pilote de bus parent pour l’appareil, avant que le pilote de fonction n’ait attaché son objet d’appareil à la pile d’appareils. Pour permettre au pilote de fonction de modifier les besoins en ressources de l’appareil, le cas échéant, le gestionnaire PnP envoie ultérieurement une requête IRP_MN_FILTER_RESOURCE_REQUIREMENTS à la pile d’appareils complète. Le gestionnaire PnP envoie cette IRP avant d’allouer des ressources matérielles à l’appareil lors de la configuration initiale de l’appareil. Le gestionnaire PnP peut également envoyer cette IRP pendant le rééquilibrage des ressources.

Lorsque le gestionnaire PnP envoie cette IRP, il fournit à la pile des pilotes une liste de ressources requises, que les pilotes peuvent modifier et retourner. Le gestionnaire PnP fournit l’un des types suivants de liste des besoins en ressources (répertoriés par ordre de priorité) :

  • Configuration forcée (d’une liste de ressources à une liste de ressources requise)

  • Remplacer la configuration

  • Configuration de base

  • Configuration de démarrage (modifiée d’une liste de ressources à une liste de besoins en ressources)

Si un pilote de fonction gère cette IRP, il doit définir une routine d’achèvement et gérer l’IRP lors de la sauvegarde de la pile d’appareils. Consultez Plug-and-Play pour plus d’informations sur la gestion d’un IRP PnP lors de la sauvegarde de la pile des appareils.

Si le pilote de fonction ne modifie pas la taille de la liste actuelle pointée par Irp-IoStatus.Information>, le pilote peut modifier la liste en place. Si le pilote doit modifier la taille de la liste requise, il doit allouer une nouvelle IO_RESOURCE_REQUIREMENTS_LIST liste à partir de la mémoire paginée et libérer la liste précédente. Le gestionnaire PnP libère la structure retournée lorsqu’elle n’est plus nécessaire.

Un pilote de fonction doit conserver l’ordre des ressources dans la liste pointée par Irp-IoStatus.Information> et ne doit pas modifier les balises de ressources qu’il ne gère pas. Le pilote doit veiller à ajuster la liste des exigences d’une manière prise en charge par le bus parent de l’appareil. Si un pilote de fonction ajoute une nouvelle ressource à la liste des exigences et que cette ressource est affectée à l’appareil, le pilote de fonction doit filtrer cette ressource de l’IRP_MN_START_DEVICE avant de passer l’IRP de démarrage au pilote de bus.

Si le pilote de fonction de l’appareil ne gère pas cette IRP, le gestionnaire PnP utilise les ressources requises comme spécifié par le pilote de bus parent en réponse à la demande IRP_MN_QUERY_RESOURCE_REQUIREMENTS .

Un pilote de fonction doit être prêt à gérer cette IRP pour un appareil à tout moment après l’appel de la routine AddDevice du pilote pour l’appareil.

Consultez Plug-and-Play pour connaître les règles générales relatives à la gestion des Plug-and-Play irps mineurs.

Envoi de cet IRP

Réservé pour le système. Les pilotes ne doivent pas envoyer cette IRP.

Spécifications

En-tête

Wdm.h (inclure Wdm.h, Ntddk.h ou Ntifs.h)

Voir aussi

ExAllocatePoolWithTag

ExFreePool

IO_RESOURCE_REQUIREMENTS_LIST

IRP_MN_START_DEVICE