структура 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 см. в документации по Microsoft Windows SDK для функции Win32 CreateHardLink.

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

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

Требования

Требование Значение
Заголовок ntifs.h (включая Ntifs.h, Fltkernel.h)

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

FltSetInformationFile

IRP_MJ_SET_INFORMATION

ZwQueryInformationFile

ZwSetInformationFile