IRP_MJ_READ (IFS)

Date d’envoi

La requête IRP_MJ_READ est envoyée par le Gestionnaire d’E/S ou par un pilote de système de fichiers. Cette demande peut être envoyée, par exemple, lorsqu’une application en mode utilisateur a appelé une fonction Microsoft Win32 telle que ReadFile ou lorsqu’un composant en mode noyau a appelé ZwReadFile.

Opération : Pilotes du système de fichiers

Le pilote du système de fichiers doit extraire et décoder l’objet de fichier pour déterminer les paramètres et le code de fonction secondaire.

Pour les demandes de lecture de la liste de descripteur de mémoire (MDL), le système de fichiers doit vérifier le code de fonction mineur pour déterminer l’opération demandée. Voici les codes de fonction mineurs valides, qui peuvent être utilisés uniquement pour les E/S de fichier mis en cache :

  • IRP_MN_COMPLETE

  • IRP_MN_COMPLETE_MDL

  • IRP_MN_COMPLETE_MDL_DPC

  • IRP_MN_COMPRESSED

  • IRP_MN_DPC

  • IRP_MN_MDL

  • IRP_MN_MDL_DPC

  • IRP_MN_NORMAL

Pour plus d’informations sur la gestion de cet IRP, étudiez les exemples CDFS et FASTFAT inclus dans le Kit de pilotes Windows (WDK).

Opération : Pilotes de filtre du système de fichiers

Le pilote de filtre doit effectuer tout traitement nécessaire et, selon la nature du filtre, terminer ou échouer l’IRP ou le transmettre au pilote inférieur suivant sur la pile.

Paramètres

Un système de fichiers ou un pilote de filtre appelle IoGetCurrentIrpStackLocation avec l’IRP donné pour obtenir un pointeur vers son propre emplacement de pile dans l’IRP, illustré dans la liste suivante en tant que IrpSp. ( L’IRP est indiqué comme Irp.) Le pilote peut utiliser les informations contenues dans les membres suivants de l’IRP et de l’emplacement de pile IRP dans le traitement d’une demande de lecture :

DeviceObject

Pointeur vers l’objet d’appareil cible.

Irp-AssociatedIrp.SystemBuffer>

Pointeur vers une mémoire tampon fournie par le système à utiliser comme mémoire tampon système intermédiaire, si l’indicateur DO_BUFFERED_IO est défini dans DeviceObject-Flags>. Sinon, ce membre a la valeur NULL.

Irp-IoStatus>

Pointeur vers une structure IO_STATUS_BLOCK qui reçoit l’état d’achèvement final et les informations relatives à l’opération demandée. Pour plus d’informations, consultez la description du paramètre IoStatusBlock à ZwReadFile.

Irp-MdlAddress>

Adresse d’une liste de descripteur de mémoire (MDL) décrivant les pages qui contiennent les données à lire.

Irp-UserBuffer>

Pointeur vers une mémoire tampon de sortie fournie par l’appelant qui reçoit les données lues à partir du fichier.

IrpSp-FileObject>

Pointeur vers l’objet de fichier associé à DeviceObject. Si l’indicateur FO_SYNCHRONOUS_IO est défini dans IrpSp-FileObject-Flags>>, l’objet de fichier a été ouvert pour les E/S synchrones.

Le paramètre IrpSp-FileObject> contient un pointeur vers le champ RelatedFileObject, qui est également une structure FILE_OBJECT. Le champ RelatedFileObject de la structure FILE_OBJECT n’est pas valide pendant le traitement de IRP_MJ_READ et ne doit pas être utilisé.

IrpSp-MajorFunction>

Spécifie IRP_MJ_READ.

IrpSp-MinorFunction>

Spécifie l’opération demandée et contient l’une des opérations suivantes :

  • IRP_MN_COMPLETE

  • IRP_MN_COMPLETE_MDL

  • IRP_MN_COMPLETE_MDL_DPC

  • IRP_MN_COMPRESSED

  • IRP_MN_DPC

  • IRP_MN_MDL

  • IRP_MN_MDL_DPC

  • IRP_MN_NORMAL

IrpSp-Parameters.Read.ByteOffset>

Variable LARGE_INTEGER qui spécifie le décalage d’octet de départ dans le fichier des données à lire.

IrpSp-Parameters.Read.Key>

Valeur de clé associée à un verrou de plage d’octets sur le fichier cible.

IrpSp-Parameters.Read.Length>

Longueur en octets des données à lire. Si l’opération de lecture réussit, le nombre d’octets lus est retourné dans le membre Information de la structure IO_STATUS_BLOCK pointée par Irp-IoStatus>.

Remarques

Les systèmes de fichiers arrondint les opérations d’écriture et de lecture à la fin du fichier jusqu’à un multiple de la taille du secteur de l’appareil de stockage de fichiers sous-jacent. Lors du traitement des opérations de pré-lecture ou de préécriture, les filtres qui allouent et échangent des mémoires tampons doivent arrondir la taille d’une mémoire tampon allouée jusqu’à un multiple de la taille du secteur de l’appareil associé. Si ce n’est pas le cas, la longueur des données transférées à partir du système de fichiers sous-jacent dépasse la longueur allouée de la mémoire tampon. Pour plus d’informations sur l’échange de mémoires tampons, consultez swapBuffers Minifilter Sample.

Voir aussi

CcMdlRead

CcMdlReadComplete

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoGetCurrentIrpStackLocation

IRP

IRP_MJ_READ (référence du noyau WDK)

IRP_MJ_WRITE

ZwReadFile