IRP_MN_QUERY_BUS_INFORMATION
Le gestionnaire PnP utilise cette IRP pour demander le type et instance numéro du bus parent d’un appareil.
Les pilotes de bus doivent gérer cette demande pour leurs appareils enfants (PDO). Les pilotes de fonction et de filtre ne gèrent pas cette IRP.
Valeur
0x15
Code majeur
Date d’envoi
Le gestionnaire PnP envoie cette IRP lorsqu’un appareil est énuméré.
Le gestionnaire PnP envoie cette IRP à IRQL PASSIVE_LEVEL dans un contexte de thread arbitraire.
Paramètres d’entrée
Aucun
Paramètres de sortie
Retourné dans le bloc d’E/S status.
Bloc d’état E/S
Un pilote de bus définit Irp-IoStatus.Status> sur STATUS_SUCCESS ou sur une status d’erreur appropriée.
En cas de réussite, un pilote de bus définit Irp-IoStatus.Information> sur un pointeur vers une structure PNP_BUS_INFORMATION terminée. (Pour plus d’informations, consultez la section « Opération ». En cas d’erreur, le pilote de bus définit Irp-IoStatus.Information> sur zéro.
Les pilotes de fonction et de filtre ne gèrent pas cette IRP.
Opération
Les informations retournées en réponse à cette IRP sont disponibles pour les pilotes de fonction et de filtre pour les appareils du bus. Les pilotes de fonction et de filtre peuvent appeler IoGetDeviceProperty pour demander un DevicePropertyBusTypeGuid, DevicePropertyLegacyBusType ou DevicePropertyBusNumber. Les pilotes de fonction et de filtre qui prennent en charge des appareils sur plusieurs bus peuvent utiliser ces informations pour déterminer sur quel bus réside un appareil particulier.
Si un pilote de bus retourne des informations en réponse à cette IRP, il alloue une structure PNP_BUS_INFORMATION à partir de la mémoire paginée. Le gestionnaire PnP libère la structure quand elle n’est plus nécessaire.
Une structure PNP_BUS_INFORMATION a le format suivant :
typedef struct _PNP_BUS_INFORMATION {
GUID BusTypeGuid;
INTERFACE_TYPE LegacyBusType;
ULONG BusNumber;
} PNP_BUS_INFORMATION, *PPNP_BUS_INFORMATION;
Les membres de la structure sont définis comme suit :
BusTypeGuid
Un pilote de bus définit BusTypeGuid sur le GUID du type de bus sur lequel réside l’appareil. Les GUID pour les types de bus standard sont répertoriés dans Wdmguid.h. Les enregistreurs de pilotes doivent générer des GUID pour d’autres types de bus à l’aide d’Uuidgen.
LegacyBusType
Un pilote de bus PnP définit LegacyBusType sur le INTERFACE_TYPE du bus parent. Les types d’interface sont définis dans Wdm.h. Certains bus ont une valeur INTERFACE_TYPE spécifique, comme PCMCIABus, PCIBus ou PNPISABus. Pour d’autres bus, en particulier les bus plus récents comme USB, le pilote de bus définit ce membre sur PNPBus.
LegacyBusType spécifie l’interface utilisée pour communiquer avec l’appareil. Cela peut correspondre ou non au type du bus parent. Par exemple, l’interface d’une carte CardBus connectée à un contrôleur PCI CardBus est PCIBus. Toutefois, l’interface d’un carte PCMCIA sur un contrôleur PCI CardBus est PCMCIABus.
Numéro de bus
Un pilote de bus définit BusNumber sur un nombre qui distingue le bus des autres bus du même type sur l’ordinateur. Le schéma de numérotation des bus est spécifique au bus. Les numéros de bus peuvent être virtuels, mais doivent correspondre à n’importe quelle numérotation utilisée par les interfaces héritées telles que IoReportResourceUsage.
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.
Appelez IoGetDeviceProperty pour obtenir des informations sur le bus auquel un appareil est attaché.
Spécifications
En-tête |
Wdm.h (inclure Wdm.h, Ntddk.h ou Ntifs.h) |