IRP_MJ_SET_INFORMATION (FS и драйверы фильтров)

При отправке

Диспетчер ввода-вывода, другие компоненты операционной системы и другие драйверы режима ядра отправляют запрос IRP_MJ_SET_INFORMATION. Его можно отправить, например, если приложение пользовательского режима вызывает функцию Win32, например SetEndOfFile , или компонент режима ядра называется ZwSetInformationFile.

Операция: драйверы файловой системы

Драйвер файловой системы должен извлечь и декодировать файловый объект, чтобы определить, представляет ли он открытый пользовательский файл или каталог. Если это так, драйвер файловой системы должен обработать запрос соответствующим образом и завершить IRP.

Для файлов и каталогов можно задать следующие типы сведений:

  • FileBasicInformation
  • FileDispositionInformation
  • FileLinkInformation (для файловых систем, которые позволяют создавать циклы в иерархии каталогов)
  • FilePositionInformation
  • FileRenameInformation

Следующие типы сведений можно задать только для файлов:

  • FileAllocationInformation
  • FileEndOfFileInformation
  • FileLinkInformation: для файловых систем (например, NTFS), которые не позволяют создавать циклы в иерархии каталогов.
  • FileValidDataLengthInformation

Операция: устаревшие драйверы фильтров файловой системы

Драйвер фильтра должен передать этот IRP в следующий нижний драйвер в стеке.

Параметры

Драйвер файловой системы или фильтра вызывает IoGetCurrentIrpStackLocation для заданного IRP, чтобы получить указатель на собственное расположение стека в IRP. В следующих параметрах Irp указывает на IRP , а IrpSpна IO_STACK_LOCATION. Драйвер может использовать сведения, заданные в следующих элементах IRP и расположении стека IRP, для обработки запроса сведений о файле набора:

  • DeviceObject — это указатель на целевой объект устройства.

  • Irp->AssociatedIrp.SystemBuffer указывает на входной буфер, содержащий устанавливаемые сведения о файле или каталоге. Эти сведения хранятся в одной из следующих структур:

  • Irp->IoStatus указывает на структуру IO_STATUS_BLOCK , которая получает окончательное состояние завершения и сведения о запрошенной операции. Дополнительные сведения см. в описании параметра IoStatusBlock в ZwSetInformationFile.

  • IrpSp->FileObject указывает на объект файла, связанный с DeviceObject. Этот параметр содержит указатель на поле RelatedFileObject , которое также является FILE_OBJECT структурой. Поле RelatedFileObject структуры FILE_OBJECT недопустимо во время обработки IRP_MJ_SET_INFORMATION и не должно использоваться.

  • IrpSp->MajorFunction* имеет значение IRP_MJ_SET_INFORMATION.

  • IrpSp->MinorFunction* можно IRP_MN_KERNEL_CALL, если Irp-Parameters.SetFile.FileInformationClass> имеет значение FileValidDataLengthInformation. Этот код указывает, что источником запроса является доверенный компонент ядра, позволяющий драйверам обходить проверки безопасности.

  • IrpSp->Parameters.SetFile.AdvanceOnly — это флаг для операций с завершением работы с файлами. Этот флаг определяет использование элемента EndOfFileFILE_END_OF_FILE_INFORMATION структуры, если FileInformationClass имеет значение FileEndOfFileInformation. Если задано значение TRUE, новая допустимая длина данных для файла устанавливается из EndOfFile , только если она увеличивает текущую допустимую длину данных. Если значение РАВНО FALSE, новый размер файла задается из EndOfFile.

  • IrpSp->Parameters.SetFile.ClusterCount зарезервирован для использования системой.

  • IrpSp->Parameters.SetFile.DeleteHandle зарезервирован для использования системой.

  • IrpSp->Parameters.SetFile.FileInformationClass указывает тип сведений, которые необходимо задать для файла, и может иметь одно из следующих значений.

    Значение Значение
    FileAllocationInformation Задайте FILE_ALLOCATION_INFORMATION для файла.
    FileBasicInformation Задайте FILE_BASIC_INFORMATION для файла.
    FileDispositionInformation Задайте FILE_DISPOSITION_INFORMATION для файла.
    FileEndOfFileInformation Задайте FILE_END_OF_FILE_INFORMATION для файла.
    FileLinkInformation Задайте FILE_LINK_INFORMATION для файла.
    FilePositionInformation Задайте FILE_POSITION_INFORMATION для файла.
    FileRenameInformation Задайте FILE_RENAME_INFORMATION для файла.
    FileValidDataLengthInformation Задайте FILE_VALID_DATA_LENGTH_INFORMATION для файла. Дополнительные сведения см. в разделе Irp-MinorFunction>.
  • IrpSp->Parameters.SetFile.FileObject предназначен для операций переименования или связывания. Если Irp-AssociatedIrp.SystemBuffer-FileName>> содержит полное имя файла или если Irp-AssociatedIrp.SystemBuffer-RootDirectory>> имеет значение, отличное от NULL, этот элемент является указателем объекта файла для родительского каталога файла, который является целью операции. В противном случае это ЗНАЧЕНИЕ NULL.

  • IrpSp->Parameters.SetFile.Length — это длина (в байтах) буфера, на который указывает Irp-AssociatedIrp.SystemBuffer>.

  • IrpSp->Параметр Parameters.SetFile.ReplaceIfExists имеет значение TRUE , чтобы указать, что если файл с таким же именем уже существует, он должен быть заменен указанным файлом. Установите значение FALSE , если операция переименования завершится ошибкой, если файл с заданным именем уже существует.

Комментарии

Для элемента AdvanceOnly диспетчер кэша задает значение TRUE , чтобы уведомить файловую систему о переходе текущей допустимой длины данных на диске до новой допустимой длины данных в EndOfFile. Если параметр AdvanceOnly имеет значение FALSE, в элементе EndOfFile устанавливается новый размер файла, который может быть больше или меньше текущего размера файла.

См. также раздел

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