Partager via


IRP_MJ_READ

Chaque pilote de périphérique qui transfère des données de son appareil vers le système doit gérer les demandes de lecture dans une routine DispatchRead ou DispatchReadWrite , de même que tout pilote de niveau supérieur superposé sur ce pilote de périphérique.

Date d’envoi

À tout moment après l’achèvement réussi d’une demande de création.

Éventuellement, une application en mode utilisateur ou un composant Win32 avec un handle pour l’objet fichier représentant l’objet d’appareil cible a demandé un transfert de données à partir de l’appareil. Il est possible qu’un pilote de niveau supérieur ait créé et configuré l’IRP de lecture.

Paramètres d’entrée

L’emplacement de la pile d’E/S du pilote dans l’IRP indique le nombre d’octets à transférer dans Parameters.Read.Length.

Certains pilotes utilisent la valeur de Parameters.Read.Key pour trier les demandes de lecture entrantes dans un ordre déterminé par le pilote dans la file d’attente des appareils ou dans une file d’attente interne de IRP gérée par le pilote.

Certains types de pilotes utilisent également la valeur dans Parameters.Read.ByteOffset, qui indique le décalage de départ de l’opération de transfert. Par exemple, consultez la rubrique IRP_MJ_READ dans la documentation système de fichiers installable (IFS).

Paramètres de sortie

Selon que le pilote de périphérique sous-jacent configure les indicateurs de l’objet de périphérique cible avec DO_BUFFERED_IO ou avec DO_DIRECT_IO, les données sont transférées dans l’un des éléments suivants :

  • Mémoire tampon sur Irp-AssociatedIrp.SystemBuffer> si le pilote utilise des E/S mises en mémoire tampon.

  • Mémoire tampon décrite par le MDL sur Irp-MdlAddress si le pilote de périphérique sous-jacent> utilise des E/S directes (DMA ou PIO).

Opération

À la réception d’une demande de lecture, un pilote de niveau supérieur configure l’emplacement de la pile d’E/S dans l’IRP pour le pilote inférieur suivant, ou il crée et configure des IRP supplémentaires pour un ou plusieurs pilotes inférieurs. Il peut configurer sa routine IoCompletion , qui est facultative pour l’IRP d’entrée, mais requise pour les irps créées par le pilote, en appelant IoSetCompletionRoutine. Ensuite, le pilote transmet la requête au pilote inférieur suivant avec IoCallDriver.

À la réception d’une demande de lecture, un pilote de périphérique transfère les données de son appareil à la mémoire système. Le pilote de périphérique définit le champ Informations du bloc d’E/S status sur le nombre d’octets transférés lorsqu’il termine l’IRP.

Spécifications

En-tête

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

Voir aussi

DispatchRead

DispatchReadWrite

IoCallDriver

IoSetCompletionRoutine