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 устанавливается новый размер файла, который может быть больше или меньше текущего размера файла.