Функция ZwSetInformationFile (wdm.h)
Подпрограмма ZwSetInformationFile изменяет различные типы сведений об объекте файла.
Синтаксис
NTSYSAPI NTSTATUS ZwSetInformationFile(
[in] HANDLE FileHandle,
[out] PIO_STATUS_BLOCK IoStatusBlock,
[in] PVOID FileInformation,
[in] ULONG Length,
[in] FILE_INFORMATION_CLASS FileInformationClass
);
Параметры
[in] FileHandle
Дескриптор объекта файла. Этот дескриптор создается путем успешного вызова ZwCreateFile или ZwOpenFile.
[out] IoStatusBlock
Указатель на структуру IO_STATUS_BLOCK , которая получает окончательное состояние завершения и сведения о запрошенной операции. Элемент Information получает количество байтов, заданное в файле.
[in] FileInformation
Указатель на буфер, содержащий сведения, которые необходимо задать для файла. Конкретная структура в этом буфере определяется параметром FileInformationClass . Например, если для параметра FileInformationClass задана константа FileDispositionInformationEx , этот параметр должен быть указателем на структуру FILE_DISPOSITION_INFORMATION_EX .
[in] Length
Размер буфера FileInformation в байтах.
[in] FileInformationClass
Тип сведений, предоставленных в буфере, на который указывает FileInformation, который необходимо задать для файла. Драйверы устройства и промежуточные драйверы могут указывать любое из следующих FILE_INFORMATION_CLASS значений .
FileInformationClass Значение | Значение |
---|---|
FileBasicInformation | Изменение сведений, предоставленных в структуре FILE_BASIC_INFORMATION . Вызывающий объект должен открыть файл с флагом FILE_WRITE_ATTRIBUTES, установленным в параметре DesiredAccess . |
FileDispositionInformation | Запрос на удаление файла при его закрытии или отмена ранее запрошенного удаления. Выбор удаления или отмены предоставляется в FILE_DISPOSITION_INFORMATION структуре. Вызывающий объект должен открыть файл с флагом DELETE, установленным в параметре DesiredAccess . |
FileDispositionInformationEx | Запрос на удаление файла или отмену ранее запрошенного удаления. Выбор удаления или отмены, а также параметры времени и способа удаления предоставляются в FILE_DISPOSITION_INFORMATION_EX структуре. Вызывающий объект должен открыть файл с флагом DELETE**, установленным в параметре DesiredAccess . |
FileEndOfFileInformation | Измените текущие сведения о конце файла, предоставленные в FILE_END_OF_FILE_INFORMATION структуре. Операция может усечь или расширить файл. Вызывающий объект должен открыть файл с флагом FILE_WRITE_DATA, установленным в параметре DesiredAccess . |
FileIoPriorityHintInformation | Измените текущее указание приоритета IRP по умолчанию для дескриптора файла. Новое значение предоставляется в FILE_IO_PRIORITY_HINT_INFORMATION структуре. Эта структура должна быть выровнена по 8 байтам. |
FileLinkInformation | Создайте жесткую ссылку на существующий файл, который указан в FILE_LINK_INFORMATION структуре. Не все файловые системы поддерживают жесткие ссылки; Например, NTFS делает , а FAT — нет. |
FilePositionInformation | Изменение текущих сведений о файле, которые хранятся в FILE_POSITION_INFORMATION структуре. |
FileRenameInformation | Измените текущее имя файла, которое предоставляется в FILE_RENAME_INFORMATION структуре. Вызывающий объект должен иметь доступ delete к файлу. |
FileShortNameInformation | Измените текущее короткое имя файла, которое предоставляется в FILE_NAME_INFORMATION структуре. Файл должен находиться на томе NTFS, а вызывающий объект должен открыть файл с флагом DesiredAccess DELETE, установленным в параметре DesiredAccess . |
FileValidDataLengthInformation | Измените текущую допустимую длину данных для файла, которая предоставляется в FILE_VALID_DATA_LENGTH_INFORMATION структуре. Файл должен находиться на томе NTFS, а вызывающий объект должен открыть файл с флагом FILE_WRITE_DATA, установленным в параметре DesiredAccess . Неадминистраторы и удаленные пользователи должны иметь привилегию SeManageVolumePrivilege . |
FileReplaceCompletionInformation | Измените или удалите порт завершения ввода-вывода для указанного дескриптора файла. Вызывающий объект предоставляет указатель на структуру FILE_COMPLETION_INFORMATION , которая указывает дескриптор порта и ключ завершения. Если дескриптор порта не равен NULL, этот дескриптор указывает новый порт завершения ввода-вывода для связи с дескриптором файла. Чтобы удалить порт завершения ввода-вывода, связанный с дескриптором файла, задайте для дескриптора порта в структуре значение NULL. Чтобы получить дескриптор порта, вызывающий объект пользовательского режима может вызвать функцию CreateIoCompletionPort . |
Возвращаемое значение
ZwSetInformationFile возвращает STATUS_SUCCESS или соответствующее состояние ошибки.
Комментарии
ZwSetInformationFile изменяет сведения о файле. Он игнорирует любой элемент структуры FILE_XXXX_INFORMATION , которая не поддерживается определенным устройством или файловой системой.
Если для параметра FileInformationClass задано значение FileDispositionInformation, можно передать FileHandle в ZwClose , но не в любую другую подпрограмму ZwXxxFile . Так как fileDispositionInformation помечает файл для удаления, это ошибка программирования при попытке выполнения любой последующей операции с дескриптором, кроме его закрытия.
Если для параметра FileInformationClass задано значение FilePositionInformation и предыдущий вызов ZwCreateFile включал флаг FILE_NO_INTERMEDIATE_BUFFERING в параметр CreateOptions , применяются определенные ограничения для элемента CurrentByteOffsetструктуры FILE_POSITION_INFORMATION . Дополнительные сведения см. в разделе ZwCreateFile.
Если для параметра FileInformationClass задано значение FileEndOfFileInformation, а член EndOfFileFILE_END_OF_FILE_INFORMATION указывает смещение после текущей метки окончания файла, ZwSetInformationFile расширяет файл и заполняет расширение нулем.
Дополнительные сведения о работе с файлами см. в разделе Использование файлов в драйвере.
Вызывающие файлы ZwSetInformationFile должны выполняться по адресу IRQL = PASSIVE_LEVEL и с включенными специальными APC ядра.
Если вызов этой функции выполняется в пользовательском режиме, следует использовать имя NtSetInformationFile вместо ZwSetInformationFile.
Для вызовов из драйверов режима ядра версии NtXxx и ZwXxx подпрограммы собственных системных служб Windows могут вести себя по-разному, так как они обрабатывают и интерпретируют входные параметры. Дополнительные сведения о связи между версиями процедуры NtXxx и ZwXxx см. в разделе Использование версий Nt и Zw для процедур собственных системных служб.
Требования
Требование | Значение |
---|---|
Целевая платформа | Универсальное |
Верхняя часть | wdm.h (включая Wdm.h, Ntddk.h, Ntifs.h) |
Библиотека | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL (см. раздел "Примечания") |
Правила соответствия DDI | HwStorPortProhibitedDDIs(storport), PowerIrpDDis(wdm) |
См. также раздел
FILE_IO_PRIORITY_HINT_INFORMATION
FILE_VALID_DATA_LENGTH_INFORMATION
Использование версий Nt и Zw собственных процедур системных служб
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по