IRP_MJ_SET_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 la requête IRP_MJ_SET_INFORMATION. Il peut être envoyé, par exemple, lorsqu’une application en mode utilisateur a appelé une fonction Win32 telle que SetEndOfFile ou lorsqu’un composant en mode noyau a appelé ZwSetInformationFile.

Opération : Pilotes de système de fichiers

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

Les types d’informations suivants peuvent être définis sur les fichiers et les répertoires :

  • FileBasicInformation
  • FileDispositionInformation
  • FileLinkInformation (pour les systèmes de fichiers qui permettent la création de cycles dans la hiérarchie de répertoires)
  • FilePositionInformation
  • FileRenameInformation

Les types d’informations suivants ne peuvent être définis que sur les fichiers :

  • FileAllocationInformation
  • FileEndOfFileInformation
  • FileLinkInformation : pour les systèmes de fichiers (par exemple, NTFS) qui n’autorisent pas la création de cycles dans la hiérarchie de répertoires
  • FileValidDataLengthInformation

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

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

Paramètres

Un système de fichiers ou un pilote de filtre appelle IoGetCurrentIrpStackLocation pour que l’IRP donné obtienne 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 la pile IRP pour traiter une demande d’informations de fichier défini :

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

  • Irp->AssociatedIrp.SystemBuffer pointe vers une mémoire tampon d’entrée qui contient les informations de fichier ou de répertoire à définir. Ces informations sont stockées dans l’une des structures suivantes :

  • 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 pour ZwSetInformationFile.

  • IrpSp->FileObject pointe vers l’objet de fichier associé à DeviceObject. Ce paramètre 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_SET_INFORMATION et ne doit pas être utilisé.

  • IrpSp->MajorFunction* est défini sur IRP_MJ_SET_INFORMATION.

  • IrpSp->MinorFunction* peut être IRP_MN_KERNEL_CALL lorsque Irp-Parameters.SetFile.FileInformationClass> est FileValidDataLengthInformation. Ce code indique que la source de la demande est un composant de noyau approuvé, ce qui permet aux pilotes de contourner les vérifications de sécurité.

  • IrpSp->Parameters.SetFile.AdvanceOnly est un indicateur pour les opérations de fin de fichier. Cet indicateur détermine l’utilisation du membre EndOfFileFILE_END_OF_FILE_INFORMATION structure lorsque FileInformationClass est FileEndOfFileInformationInformation. Si la valeur est TRUE, une nouvelle longueur de données valide pour le fichier est définie à partir de EndOfFile uniquement si elle augmente la longueur de données valide actuelle. Si la valeur est FALSE, une nouvelle taille de fichier est définie à partir de EndOfFile.

  • IrpSp->Parameters.SetFile.ClusterCount est réservé à l’utilisation du système.

  • IrpSp->Parameters.SetFile.DeleteHandle est réservé à l’utilisation du système.

  • IrpSp->Parameters.SetFile.FileInformationClass indique le type d’informations à définir pour le fichier et peut être l’une des valeurs suivantes.

    Valeur Signification
    FileAllocationInformation Définissez FILE_ALLOCATION_INFORMATION pour le fichier.
    FileBasicInformation Définissez FILE_BASIC_INFORMATION pour le fichier.
    FileDispositionInformation Définissez FILE_DISPOSITION_INFORMATION pour le fichier.
    FileEndOfFileInformation Définissez FILE_END_OF_FILE_INFORMATION pour le fichier.
    FileLinkInformation Définissez FILE_LINK_INFORMATION pour le fichier.
    FilePositionInformation Définissez FILE_POSITION_INFORMATION pour le fichier.
    FileRenameInformation Définissez FILE_RENAME_INFORMATION pour le fichier.
    FileValidDataLengthInformation Définissez FILE_VALID_DATA_LENGTH_INFORMATION pour le fichier. Pour plus d’informations, consultez Irp-MinorFunction>.
  • IrpSp->Parameters.SetFile.FileObject est destiné aux opérations de renommage ou de liaison. Si Irp-AssociatedIrp.SystemBuffer-FileName>> contient un nom de fichier complet, ou si Irp-AssociatedIrp.SystemBuffer-RootDirectory>> n’a pas la valeur NULL, ce membre est un pointeur d’objet de fichier pour le répertoire parent du fichier qui est la cible de l’opération. Sinon, il est NULL.

  • IrpSp->Parameters.SetFile.Length est la longueur, en octets, de la mémoire tampon pointée par Irp-AssociatedIrp.SystemBuffer>.

  • IrpSp->Parameters.SetFile.ReplaceIfExists a la valeur TRUE pour spécifier que si un fichier portant le même nom existe déjà, il doit être remplacé par le fichier donné. Définissez sur FALSE si l’opération de renommage échoue si un fichier portant le nom donné existe déjà.

Remarques

Le membre AdvanceOnly est défini sur TRUE par le gestionnaire de cache pour informer le système de fichiers d’avancer la longueur des données valides actuelle sur le disque jusqu’à la nouvelle longueur de données valide dans EndOfFile. Si AdvanceOnly a la valeur FALSE, une nouvelle taille de fichier, dans le membre EndOfFile , est définie qui peut être supérieure ou inférieure à la taille de fichier actuelle.

Voir aussi

FILE_ALLOCATION_INFORMATION

FILE_BASIC_INFORMATION

FILE_DISPOSITION_INFORMATION

FILE_END_OF_FILE_INFORMATION

FILE_LINK_INFORMATION

FILE_POSITION_INFORMATION

FILE_RENAME_INFORMATION

FILE_VALID_DATA_LENGTH_INFORMATION

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoGetCurrentIrpStackLocation

IRP

IRP_MJ_QUERY_INFORMATION

ZwSetInformationFile