IRP_MJ_QUERY_INFORMATION (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_QUERY_INFORMATION demandes. Cette requête peut être envoyée, par exemple, lorsqu’une application en mode utilisateur a appelé une fonction Win32 telle que GetFileInformationByHandle ou lorsqu’un composant en mode noyau a appelé ZwQueryInformationFile.

Opération : Pilotes du système de fichiers

Le pilote de système de fichiers doit extraire et décoder l’objet file pour déterminer s’il représente un utilisateur ouvert d’un fichier ou d’un répertoire. Si c’est le cas, le pilote doit traiter la requête et terminer l’IRP. Sinon, le pilote doit effectuer l’IRP comme il convient sans traiter la requête.

Les types d’informations sur les fichiers et les répertoires qui peuvent être interrogés dépendent du système de fichiers, mais incluent généralement les valeurs suivantes :

  • FileAllInformation
  • FileAlternateNameInformation
  • FileAttributeTagInformation
  • FileBasicInformation
  • FileCompressionInformation
  • FileEaInformation
  • FileInternalInformation
  • FileNameInformation
  • FileNetworkOpenInformation
  • FilePositionInformation
  • FileStandardInformation
  • FileStreamInformation
  • FileHardLinkInformation

Bien que les types d’informations FileAccessInformation, FileAlignmentInformation et FileModeInformation puissent également être transmis en tant que paramètre à ZwQueryInformationFile, ces informations sont indépendantes du système de fichiers. Ainsi , ZwQueryInformationFile fournit ces informations directement, sans envoyer de demande de IRP_MJ_QUERY_INFORMATION au système de fichiers.

Pour obtenir la liste de tous les types d’informations possibles, consultez l’énumération FILE_INFORMATION_CLASS dans ntifs.h.

Opération : Pilotes du redirecteur réseau

Un pilote de redirecteur réseau non basé sur RDBSS qui reçoit une demande de IRP_MJ_QUERY_INFORMATION pour FileAllInformation ou FileNameInformation doit répondre avec le chemin complet « \server\share\file » pour le nom de fichier avec une seule barre oblique inverse avant le nom du serveur. Ce format pour les informations de nom doit être retourné pour un fichier accessible en tant que nom UNC (Universal Naming Convention) (\\server\share\folder\filename.txt, par exemple) ou un fichier situé sur un lecteur mappé (x:\folder\filename.txt, par exemple).

Pour un pilote de mini-redirecteur réseau (pilote qui établit des liens dynamiques avec rdbss.sys ou qui établit des liens statiques avec rdbsslib.lib), RDBSS gère une demande de IRP_MJ_QUERY_INFORMATION pour FileNameInformation et retourne les informations de nom correctes. Pour un pilote de mini-redirecteur réseau, RDBSS gère une demande de IRP_MJ_QUERY_INFORMATION pour FileAllInformation pour la partie des informations de nom de la demande. Les autres parties de la requête FileAllInformation sont envoyées en tant que requêtes distinctes au pilote de mini-redirecteur réseau à résoudre.

Un redirecteur réseau qui reçoit une demande de IRP_MJ_QUERY_INFORMATION pour FileAlternateNameInformation doit répondre avec le nom court (8,3 caractères) du fichier sans aucune information de chemin d’accès, s’il existe un nom court pour le fichier.

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’IRP et de l’emplacement de pile IRP pour traiter une demande d’informations de fichier de requête :

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

  • Irp->AssociatedIrp.SystemBuffer pointe vers la mémoire tampon de sortie où les informations de fichier ou de répertoire doivent être retournées. Ces informations sont stockées dans l’une des structures suivantes :

  • FILE_ALL_INFORMATION

  • FILE_ATTRIBUTE_TAG_INFORMATION

  • FILE_BASIC_INFORMATION

  • FILE_COMPRESSION_INFORMATION

  • FILE_EA_INFORMATION

  • FILE_INTERNAL_INFORMATION

  • FILE_NAME_INFORMATION

  • FILE_NETWORK_OPEN_INFORMATION

  • FILE_POSITION_INFORMATION

  • FILE_STANDARD_INFORMATION

  • FILE_STREAM_INFORMATION

  • FILE_LINKS_INFORMATION

  • 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. Pour plus d’informations, consultez la description du paramètre IoStatusBlock dans ZwQueryInformationFile. Routine.

  • Irp->UserBuffer est un pointeur facultatif vers une mémoire tampon de sortie fournie par l’appelant dans laquelle le contenu de Irp-AssociatedIrp.SystemBuffer> est copié lors de l’achèvement des E/S par le gestionnaire d’E/S. Les pilotes n’utilisent pas cette mémoire tampon pour retourner des données pour la demande.

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

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

  • IrpSp->Parameters.QueryFile.FileInformationClass est le type d’informations de fichier à interroger. Ce membre peut être l’une des valeurs suivantes.

    Valeur Signification
    FileAllInformation Retourne une structure FILE_ALL_INFORMATION pour le fichier.
    FileAttributeTagInformation Retourne une structure FILE_ATTRIBUTE_TAG_INFORMATION pour le fichier.
    FileBasicInformation Retourne une structure FILE_BASIC_INFORMATION pour le fichier.
    FileCompressionInformation Retourne une structure FILE_COMPRESSION_INFORMATION pour le fichier.
    FileEaInformation Retourne une structure FILE_EA_INFORMATION pour le fichier.
    FileInternalInformation Retourne une structure FILE_INTERNAL_INFORMATION pour le fichier.
    FileNameInformation Retourne une structure FILE_NAME_INFORMATION pour le fichier.
    FileNetworkOpenInformation Retourne une structure de FILE_NETWORK_OPEN_INFORMATION unique pour le fichier.
    FilePositionInformation Retourne une structure de FILE_POSITION_INFORMATION unique pour le fichier.
    FileStandardInformation Retourne une structure de FILE_STANDARD_INFORMATION unique pour le fichier.
    FileStreamInformation Retourne une structure de FILE_STREAM_INFORMATION unique pour le fichier.
    FileHardLinkInformation Retourne une structure FILE_LINKS_INFORMATION pour le fichier.
  • IrpSp->Parameters.QueryFile.Length est la longueur, en octets, de la mémoire tampon pointée par Irp-AssociatedIrp.SystemBuffer>.

Remarques

Le gestionnaire d’E/S met toujours en mémoire tampon l’opération IRP_MJ_QUERY_INFORMATION. Le Gestionnaire d’E/S alloue à partir de la mémoire du pool non paginé l’Irp-AssociatedIrp.SystemBuffer> qui est utilisé pour retourner les informations de fichier ou de répertoire demandées. Par conséquent, le Irp-AssociatedIrp.SystemBuffer> retourné par le système d’exploitation est toujours une adresse valide pour la longueur spécifiée dans IrpSp-Parameters.QueryFile.Length>.

Irp-AssociatedIrp.UserBuffer> est utilisé en interne par le gestionnaire d’E/S et ne doit pas être utilisé par les pilotes de système de fichiers ou de filtre de système de fichiers.

Voir aussi

FILE_ALIGNMENT_INFORMATION

FILE_ATTRIBUTE_TAG_INFORMATION

FILE_BASIC_INFORMATION

FILE_INTERNAL_INFORMATION

FILE_NAME_INFORMATION

FILE_NETWORK_OPEN_INFORMATION

FILE_POSITION_INFORMATION

FILE_STANDARD_INFORMATION

FILE_STREAM_INFORMATION

FILE_LINKS_INFORMATION

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoCheckEaBufferValidity

IoGetCurrentIrpStackLocation

IRP

IRP_MJ_SET_INFORMATION

ZwQueryInformationFile