Partager via


IRP_MJ_WRITE

Chaque pilote de périphérique qui transfère des données du système à son appareil doit gérer les demandes d’écriture dans une routine DispatchWrite 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.

Peut-être, 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 vers l’appareil. Il est possible qu’un pilote de niveau supérieur ait créé et configuré l’IRP d’écriture.

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.Write.Length.

Certains pilotes utilisent la valeur de Parameters.Write.Key pour trier les demandes d’écriture entrantes dans un ordre déterminé par le pilote dans la file d’attente des périphériques ou dans une file d’attente interne de runtimes d’intégration gérées par le pilote.

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

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 à partir de 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)

Paramètres de sortie

None

Opération

À la réception d’une demande d’écriture, 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 d’écriture, un pilote de périphérique transfère les données de la mémoire système à son appareil. 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

DispatchReadWrite

DispatchWrite

IoCallDriver

IoCompletion

IoSetCompletionRoutine