IRP_MN_READ_CONFIG
Les pilotes de bus pour les bus disposant d’un espace de configuration doivent gérer cette demande pour leurs appareils enfants (PDO enfants). Les pilotes de filtre et de fonction ne gèrent pas cette demande.
Valeur
0x0F
Code majeur
Date d’envoi
Un pilote ou un autre composant système envoie cette IRP pour lire l’espace de configuration du bus parent d’un appareil.
Un pilote ou un autre composant système envoie cette IRP à IRQL < DISPATCH_LEVEL dans un contexte de thread arbitraire.
Paramètres d’entrée
Le membre Parameters.ReadWriteConfig de la structure IO_STACK_LOCATION est lui-même une structure contenant les informations suivantes :
ULONG WhichSpace;
PVOID Buffer;
ULONG Offset;
ULONG Length
Les membres de la structure peuvent être interprétés différemment par différents pilotes de bus, mais les membres sont généralement définis comme suit :
WhichSpace
Spécifie la zone de mémoire à laquelle accéder. Ce paramètre peut prendre les valeurs suivantes :
Valeur | Bus | Signification |
---|---|---|
PCI_WHICHSPACE_CONFIG |
PCI |
Espace de configuration PCI. |
PCI_WHICHSPACE_ROM |
PCI |
Mémoire en lecture seule. |
PCCARD_COMMON_MEMORY PCCARD_COMMON_MEMORY_INDIRECT |
PCMCIA |
Mémoire PCCARD principale. |
PCCARD_ATTRIBUTE_MEMORY PCCARD_ATTRIBUTE_MEMORY_INDIRECT |
PCMCIA |
Espace d’attribut (configuration) PCMCIA. |
PCCARD_PCI_CONFIGURATION_SPACE |
PCMCIA |
Espace de configuration PCI. |
Les valeurs PCI_XXX sont définies dans Wdm.h. Les valeurs PCCARD_XXX sont définies dans Ntddpcm.h.
Tampon
Pointe vers une mémoire tampon dans laquelle retourner les informations demandées. Le composant qui envoie l’IRP alloue cette structure à partir de la mémoire paginée. Le format de la mémoire tampon est spécifique au bus.
Compenser
Spécifie un décalage dans l’espace de configuration.
Longueur
Spécifie le nombre d’octets à lire.
Paramètres de sortie
En cas de réussite, un pilote de bus remplit la mémoire tampon sur Parameters.ReadWriteConfig.Buffer avec les données demandées.
Bloc d’état E/S
Un pilote de bus définit Irp-IoStatus.Status> sur STATUS_SUCCESS ou sur un status d’erreur approprié, comme STATUS_INVALID_PARAMETER_n, STATUS_NO_SUCH_DEVICE ou STATUS_DEVICE_NOT_READY.
En cas de réussite, un pilote de bus définit Irp-IoStatus.Information> sur le nombre d’octets retournés.
Si un pilote de bus ne parvient pas à effectuer cette demande immédiatement, il peut marquer l’IRP en attente, retourner STATUS_PENDING et terminer l’IRP ultérieurement.
Opération
Un pilote de bus gère cette IRP pour ses appareils enfants (PDO enfants).
Les pilotes de fonction et de filtre ne gèrent pas cette IRP ; ils le passent au pilote inférieur suivant sans aucune modification à Irp-IoStatus>. État et ils ne définissent pas de routine IoCompletion.
Un pilote de bus qui gère cette requête doit case activée le paramètre WhichSpace pour s’assurer qu’il contient une valeur prise en charge par le pilote.
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
En règle générale, un pilote de fonction envoie cette IRP au pilote supérieur de la pile de périphériques à laquelle il est attaché et l’IRP est géré par le pilote de bus parent.
Pour plus d’informations sur l’envoi de IRP, consultez Gestion des IRP . Les étapes suivantes s’appliquent spécifiquement à cette IRP :
Allouez une mémoire tampon à partir d’un pool paginé et initialisez-la à zéros.
Définissez les valeurs dans l’emplacement de pile d’E/S suivant de l’IRP : définissez MajorFunctionsur IRP_MJ_PNP, définissez MinorFunction sur IRP_MN_READ_CONFIG et définissez les valeurs appropriées dans Parameters.ReadWriteConfig.
Initialisez IoStatus.Status pour STATUS_NOT_SUPPORTED.
Libérez l’IRP et la mémoire tampon quand ils ne sont plus nécessaires.
Les pilotes doivent envoyer cette IRP à partir d’IRQL < DISPATCH_LEVEL.
Un pilote peut accéder à l’espace de configuration d’un bus à DISPATCH_LEVEL via une routine d’interface de bus, si le pilote de bus parent prend en charge une telle interface. Pour obtenir une interface de bus, un pilote envoie une requête IRP_MN_QUERY_INTERFACE à la pile d’appareils dans laquelle le pilote est attaché. Le pilote appelle ensuite la routine appropriée retournée dans l’interface.
Par exemple, pour lire l’espace de configuration à partir de DISPATCH_LEVEL, un pilote peut appeler IRP_MN_QUERY_INTERFACE lors de l’initialisation du pilote pour obtenir l’interface BUS_INTERFACE_STANDARD à partir du pilote de bus parent. Le pilote envoie l’IRP de requête à partir du PASSIVE_LEVEL IRQL. Plus tard, à partir du code de l’IRQL DISPATCH_LEVEL, le pilote appelle la routine appropriée retournée dans l’interface, telle que la routine Interface.GetBusData .
Spécifications
En-tête |
Wdm.h (inclure Wdm.h, Ntddk.h ou Ntifs.h) |