IRP_MJ_FILE_SYSTEM_CONTROL (pilotes FS et filtre)

Date d’envoi

Le Gestionnaire d’E/S, d’autres composants du système d’exploitation et d’autres pilotes en mode noyau envoient IRP_MJ_FILE_SYSTEM_CONTROL demandes. Il peut être envoyé, par exemple, lorsqu’une application en mode utilisateur a appelé la fonction Win32 DeviceIoControl pour envoyer une demande de contrôle d’E/S du système de fichiers (FSCTL).

Opération : Pilotes du système de fichiers

Le pilote ou le module de reconnaissance du système de fichiers doit case activée le code de fonction secondaire pour déterminer quelle opération de contrôle de système de fichiers est demandée.

Les pilotes de système de fichiers doivent gérer les codes de fonction secondaires suivants :

Code Description
IRP_MN_KERNEL_CALL Cette requête est identique à IRP_MN_USER_FS_REQUEST (décrite ci-dessous), à ceci près que la source de la demande est un composant de noyau approuvé.
IRP_MN_MOUNT_VOLUME Indique une demande de montage de volume. Si un pilote de système de fichiers reçoit cette IRP pour un volume dont le format ne correspond pas à celui du système de fichiers, le pilote de système de fichiers doit retourner STATUS_UNRECOGNIZED_VOLUME.
IRP_MN_USER_FS_REQUEST Indique une requête FSCTL, éventuellement pour le compte d’une application en mode utilisateur qui a appelé la fonction Microsoft Win32 DeviceIoControl ou pour le compte d’un composant en mode noyau qui a appelé ZwDeviceIoControlFile ou IoBuildDeviceIoControlRequest. Pour plus d’informations sur les demandes FSCTL, consultez « Device Input and Output Control Codes » dans la documentation du Kit de développement logiciel (SDK) Windows.
IRP_MN_VERIFY_VOLUME Indique une demande de vérification de volume. Pour les supports amovibles, le système de fichiers doit vérifier le volume lorsqu’il détecte que le média a été supprimé et retourné pour s’assurer qu’il s’agit toujours du même volume connu. Si le volume a changé, le système de fichiers doit invalider tous les handles en attente. Il doit également retourner une erreur si le système de fichiers sur ce nouveau média a changé. Cette requête est le plus souvent utilisée pour les lecteurs de disquettes.

Les modules de reconnaissance du système de fichiers doivent gérer le code de fonction secondaire suivant :

Code Description
IRP_MN_LOAD_FILE_SYSTEM Indique une demande de système de fichiers de charge.

Le pilote ou le module de reconnaissance du système de fichiers doit effectuer l’opération demandée, puis terminer l’IRP.

Opération : Pilotes de filtre de système de fichiers hérités

Le pilote de filtre doit transmettre cette IRP au pilote inférieur suivant sur la pile.

Paramètres

Un système de fichiers ou un pilote de filtre appelle IoGetCurrentIrpStackLocation pour l’IRP donné afin d’obtenir un pointeur vers son propre emplacement de pile dans l’IRP. Dans les paramètres suivants, Irp pointe vers l’IRP et IrpSp pointe vers le IO_STACK_LOCATION. Le pilote peut utiliser les informations définies dans les membres suivants de l’emplacement de pile IRP et IRP pour traiter une demande de contrôle de système de fichiers :

  • DeviceObject est un pointeur vers l’objet d’appareil cible.

  • Irp->AssociatedIrp.SystemBuffer pointe vers une mémoire tampon d’entrée fournie par le système à passer au système de fichiers ou au pilote de filtre de système de fichiers pour le volume cible. Utilisé pour METHOD_BUFFERED ou METHOD_DIRECT E/S. Le fait que ce paramètre soit requis dépend du code de contrôle du système de fichiers spécifique.

  • Irp->IoStatus pointe vers une structure IO_STATUS_BLOCK qui reçoit la status d’achèvement finale et des informations sur l’opération demandée.

  • Irp->MdlAddress est l’adresse d’une liste de descripteurs mémoire (MDL) décrivant une mémoire tampon de sortie à passer au système de fichiers ou au pilote de filtre de système de fichiers pour le volume cible. Utilisé pour METHOD_DIRECT E/S. Le fait que ce paramètre soit requis dépend du code de contrôle d’E/S spécifique.

  • Irp->UserBuffer pointe vers une mémoire tampon de sortie fournie par l’appelant à passer au système de fichiers ou au pilote de filtre de système de fichiers pour le volume cible. Utilisé pour METHOD_BUFFERED ou METHOD_NEITHER E/S. Le fait que ce paramètre soit facultatif ou obligatoire dépend du code de contrôle d’E/S spécifique.

  • IrpSp->FileObject pointe vers l’objet file associé à DeviceObject.

    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_FILE_SYSTEM_CONTROL et ne doit pas être utilisé.

  • IrpSp->Les indicateurs peuvent être définis sur SL_ALLOW_RAW_MOUNT pour IRP_MN_VERIFY_VOLUME.

  • IrpSp->MajorFunction est défini sur IRP_MJ_FILE_SYSTEM_CONTROL.

  • IrpSp->MinorFunction peut être défini sur l’une des valeurs suivantes.

    • IRP_MN_KERNEL_CALL
    • IRP_MN_LOAD_FILE_SYSTEM
    • IRP_MN_MOUNT_VOLUME
    • IRP_MN_USER_FS_REQUEST
    • IRP_MN_VERIFY_VOLUME
  • IrpSp->Parameters.FileSystemControl.FsControlCode est le code de fonction FSCTL à transmettre au système de fichiers ou au pilote de filtre de système de fichiers pour le volume cible. À utiliser avec IRP_MN_USER_FS_REQUEST uniquement.

    Pour plus d’informations sur les demandes IOCTL et FSCTL, consultez Utilisation des codes de contrôle d’E/S et « Codes de contrôle d’entrée et de sortie des appareils » dans la documentation du Kit de développement logiciel (SDK) Windows.

  • IrpSp->Parameters.FileSystemControl.InputBufferLength est la taille en octets de la mémoire tampon pointée par Irp-AssociatedIrp.SystemBuffer>.

  • IrpSp->Parameters.FileSystemControl.OutputBufferLength est la taille en octets de la mémoire tampon pointée par Irp-UserBuffer>.

  • IrpSp->Parameters.FileSystemControl.Type3InputBuffer est la mémoire tampon d’entrée pour les requêtes en mode noyau à l’aide de METHOD_NEITHER.

  • IrpSp->Parameters.MountVolume.DeviceObject pointe vers l’objet d’appareil pour l’appareil réel sur lequel le volume doit être monté. Les pilotes de filtre de système de fichiers ne doivent pas utiliser ce paramètre.

  • IrpSp->Parameters.MountVolume.Vpb pointe vers le bloc de paramètres de volume (VPB) pour le volume à monter. Les systèmes de fichiers qui prennent en charge les supports amovibles peuvent remplacer un VPB précédemment utilisé par celui passé dans ce paramètre. Sur ces systèmes de fichiers, une fois le volume monté, ce pointeur ne peut plus être considéré comme valide. Les pilotes de filtre de système de fichiers qui filtrent ces systèmes de fichiers doivent utiliser ce paramètre comme suit : Le filtre doit enregistrer la valeur de IrpSp-Parameters.MountVolume.Vpb-RealDevice>> avant d’envoyer l’IRP aux pilotes de niveau inférieur. Une fois le volume monté, le filtre peut utiliser ce pointeur vers l’objet de périphérique de stockage pour obtenir le pointeur VPB approprié.

  • IrpSp->Parameters.VerifyVolume.DeviceObject pointe vers l’objet d’appareil pour que le volume soit vérifié.

  • IrpSp->Parameters.VerifyVolume.Vpb pointe vers le VPB pour le volume à vérifier.

Voir aussi

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoBuildAsynchronousFsdRequest

IoBuildDeviceIoControlRequest

IoBuildSynchronousFsdRequest

IoGetCurrentIrpStackLocation

IRP

ZwDeviceIoControlFile