IRP_MN_WRITE_CONFIG
Les pilotes de bus pour les bus avec un espace de configuration doivent gérer cette demande pour leurs appareils enfants (PPO enfants). Les pilotes de fonction et de filtre ne gèrent pas cette requête.
Valeur
0x10
Code majeur
Date d’envoi
Un pilote ou un autre composant système envoie cette IRP pour écrire des données dans l’espace de configuration du bus parent d’un appareil.
Un pilote ou un autre composant système envoie cette IRP au DISPATCH_LEVEL IRQL < dans un contexte de thread arbitraire.
Paramètres d’entrée
Parameters.ReadWriteConfig est 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 l’espace de configuration. Pour plus d’informations sur les valeurs qui peuvent être spécifiées pour WhichSpace, consultez IRP_MN_READ_CONFIG.
Tampon
Pointe vers une mémoire tampon qui contient les données à écrire. 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 à écrire.
Paramètres de sortie
Retourné dans le bloc de status d’E/S.
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 écrits.
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 (PPO enfants).
Les pilotes de fonction et de filtre ne gèrent pas cette IRP ; ils le passent au pilote inférieur suivant sans modification de Irp-IoStatus.Status> et ne définissent pas de routine IoCompletion.
Consultez Plug-and-Play pour connaître les règles générales de gestion Plug-and-Play irps mineurs.
Envoi de cette IRP
En règle générale, un pilote de fonction envoie cette IRP à 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 des IRP, consultez Gestion des irps . Les étapes suivantes s’appliquent spécifiquement à cette IRP :
Allouez une mémoire tampon à partir d’un pool paginé et initialisez-la avec les données à écrire.
Définissez les valeurs dans l’emplacement de pile d’E/S suivant de l’IRP : définissez MajorFunction sur IRP_MJ_PNP, définissez MinorFunction sur IRP_MN_WRITE_CONFIG et définissez les valeurs appropriées dans Parameters.ReadWriteConfig.
Initialisez IoStatus.Status sur 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 exporte une telle interface. Pour obtenir une interface de bus, un pilote envoie une requête IRP_MN_QUERY_INTERFACE à son pilote de bus parent. Le pilote appelle ensuite la routine appropriée retournée dans l’interface.
Par exemple, pour écrire de l’espace de configuration à partir de DISPATCH_LEVEL un pilote peut appeler IRP_MN_QUERY_INTERFACE pendant 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 d’IRQL PASSIVE_LEVEL. Plus tard, à partir du code dans irQL DISPATCH_LEVEL, le pilote appelle la routine appropriée retournée dans l’interface, telle que la routine Interface.SetBusData .
Spécifications
En-tête |
Wdm.h (inclure Wdm.h, Ntddk.h ou Ntifs.h) |