Поделиться через


структура FILE_LINK_INFORMATION (ntifs.h)

Структура FILE_LINK_INFORMATION используется для создания жесткой ссылки NTFS на существующий файл.

Синтаксис

typedef struct _FILE_LINK_INFORMATION {
#if (_WIN32_WINNT >= _WIN32_WINNT_WIN10_RS5)
    union {
        BOOLEAN ReplaceIfExists;  // FileLinkInformation
        ULONG Flags;              // FileLinkInformationEx
    } DUMMYUNIONNAME;
#else
    BOOLEAN ReplaceIfExists;
#endif
    HANDLE RootDirectory;
    ULONG FileNameLength;
    WCHAR FileName[1];
} FILE_LINK_INFORMATION, *PFILE_LINK_INFORMATION;

Члены

DUMMYUNIONNAME

DUMMYUNIONNAME.ReplaceIfExists

Задайте значение TRUE, чтобы указать, что если ссылка уже существует, ее следует заменить новой ссылкой. Установите значение FALSE, если операция создания ссылки должна завершиться ошибкой, если ссылка уже существует. Доступно начиная с Windows 10 версии 1809.

DUMMYUNIONNAME.Flags

Флаги для операции ссылки. Это поле применимо только при использовании с классом сведений FileLinkInformationEx. Доступно начиная с Windows 10 версии 1809.

Ниже приведены возможные значения:

Ценность Значение
FILE_LINK_REPLACE_IF_EXISTS (0x00000001) Если файл с заданным именем уже существует, его следует заменить новой ссылкой. Эквивалент поля ReplaceIfExists, используемого с классом сведений FileLinkInformation.
FILE_LINK_POSIX_SEMANTICS (0x00000002) Если FILE_LINK_REPLACE_IF_EXISTS также указан, можно заменить файл, даже если в нем есть дескриптор. Существующие дескрипторы для замененного файла продолжают быть допустимыми для таких операций, как чтение и запись. Любое последующее открытие целевого имени откроет новую ссылку, а не замененный файл.
FILE_LINK_SUPPRESS_STORAGE_RESERVE_INHERITANCE (0x00000008) При создании ссылки в новом каталоге отключите все правила наследования, связанные со свойством идентификатора резервирования хранилища файла.
FILE_LINK_NO_INCREASE_AVAILABLE_SPACE (0x00000010) Если FILE_LINK_SUPPRESS_STORAGE_RESERVE_INHERITANCE не указано, при создании ссылки в новом каталоге автоматически измените размер затронутых областей хранения, чтобы предотвратить увеличение свободного места пользователя на томе. Требуется управление доступом к томам.
FILE_LINK_NO_DECREASE_AVAILABLE_SPACE (0x00000020) Если FILE_LINK_SUPPRESS_STORAGE_RESERVE_INHERITANCE не указано, при создании ссылки в новом каталоге автоматически измените размер затронутых областей резервирования хранилища, чтобы предотвратить уменьшение свободного места на томе. Требуется управление доступом к томам.
FILE_LINK_PRESERVE_AVAILABLE_SPACE (0x00000030) Эквивалентно указанию FILE_LINK_NO_INCREASE_AVAILABLE_SPACE и FILE_LINK_NO_DECREASE_AVAILABLE_SPACE.
FILE_LINK_IGNORE_READONLY_ATTRIBUTE (0x00000040) Если FILE_LINK_REPLACE_IF_EXISTS также задано, можно заменить файл, даже если он доступен только для чтения. Требуется WRITE_ATTRIBUTES доступ к заменяемом файлу.
FILE_LINK_FORCE_RESIZE_TARGET_SR (0x00000080) Если FILE_LINK_SUPPRESS_STORAGE_RESERVE_INHERITANCE не указан, при создании ссылки в новом каталоге, который является частью другой области резервирования хранилища, всегда увеличивает резервную область хранения целевого каталога на полный размер связанного файла. Требуется управление доступом к томам.
FILE_LINK_FORCE_RESIZE_SOURCE_SR (0x00000100) Если FILE_LINK_SUPPRESS_STORAGE_RESERVE_INHERITANCE не указан, при создании ссылки в новом каталоге, который входит в другую резервную область хранилища, всегда сжимайте резервную область хранилища исходного каталога на полный размер связанного файла. Требуется управление доступом к томам.
FILE_LINK_FORCE_RESIZE_SR (0x00000180) Эквивалентно указанию FILE_LINK_FORCE_RESIZE_TARGET_SR и FILE_LINK_FORCE_RESIZE_SOURCE_SR.

ReplaceIfExists

Задайте значение TRUE, чтобы указать, что если ссылка уже существует, ее следует заменить новой ссылкой. Установите значение FALSE, если операция создания ссылки должна завершиться ошибкой, если ссылка уже существует.

RootDirectory

Если ссылка должна быть создана в том же каталоге, что и связанный файл, или если элемент FileName содержит полное имя пути для создаваемой ссылки, это значение NULL. В противном случае это дескриптор каталога, в котором должна быть создана ссылка.

FileNameLength

Длина в байтах строки имени файла.

FileName[1]

Первый символ имени, назначаемого только что созданной ссылке. За этим следует в памяти оставшаяся часть строки. Если элемент RootDirectory имеет значение NULL, а ссылка должна быть создана в другом каталоге из связанного файла, этот элемент указывает полное имя пути для создаваемой ссылки. В противном случае указывает только имя файла. (Дополнительные сведения о синтаксисе строки имени файла см. в разделе "Примечания" для ZwQueryInformationFile.)

Замечания

Структура FILE_LINK_INFORMATION используется для создания жесткой ссылки NTFS на существующий файл. Эта операция может выполняться в любом из следующих способов:

  • Вызовите FltSetInformationFile или ZwSetInformationFile, передав FileLinkInformation в качестве значения FileInformationClass и передав выделенный вызывающим FILE_LINK_INFORMATION структурированный буфер в качестве значения FileInformation. Параметр FileHandle указывает существующий файл, к которому должна указывать жесткая ссылка.

  • Создайте IRP с основным кодом функции IRP_MJ_SET_INFORMATION.

Для задания этих сведений не требуются определенные права доступа.

Мини-фильтры файловой системы должны использовать FltSetInformationFile, а не ZwSetInformationFile, чтобы задать эти сведения для файла.

Дополнительные сведения о жестких ссылках NTFS см. в документации по пакету SDK Microsoft Windows для функции Win32 CreateHardLink.

Размер буфера FileInformation, переданного FltSetInformationFile или ZwSetInformationFile, должен быть по крайней мере размер(FILE_LINK_INFORMATION).

Эта структура должна быть выровнена по границе LONG (4-байтов).

Требования

Требование Ценность
заголовка ntifs.h (include Ntifs.h, Fltkernel.h)

См. также

FltSetInformationFile

IRP_MJ_SET_INFORMATION

ZwQueryInformationFile

ZwSetInformationFile