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) 如果已存在具有给定名称的文件,则应将其替换为新链接。 等效于用于 FileLinkInformation 信息类的 ReplaceIfExists 字段。
FILE_LINK_POSIX_SEMANTICS (0x00000002) 如果还指定了FILE_LINK_REPLACE_IF_EXISTS,则即使存在文件的现有句柄,也允许替换文件。 已替换文件的现有句柄继续对读取和写入等操作有效。 目标名称的任何后续打开都将打开新链接,而不是替换的文件。
FILE_LINK_SUPPRESS_STORAGE_RESERVE_INHERITANCE (0x00000008) 在新目录中创建链接时,禁止显示与文件的存储保留 ID 属性相关的任何继承规则。
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 的“备注”部分,详细了解此文件名 string.)

注解

FILE_LINK_INFORMATION 结构用于创建指向现有文件的 NTFS 硬链接。 可以通过以下任一方式执行此操作:

  • 调用 FltSetInformationFileZwSetInformationFile,将 FileLinkInformation 作为 FileInformationClass 的值传递,并将调用方分配FILE_LINK_INFORMATION结构化缓冲区作为 FileInformation 的值传递。 FileHandle 参数指定硬链接应指向的现有文件。

  • 使用主函数代码IRP_MJ_SET_INFORMATION创建 IRP。

无需特定访问权限即可设置此信息。

文件系统微筛选器必须使用 FltSetInformationFile(而不是 ZwSetInformationFile)来为文件设置此信息。

有关 NTFS 硬链接的详细信息,请参阅 Win32 CreateHardLink 函数Microsoft Windows SDK文档。

传递给 FltSetInformationFile 或 ZwSetInformationFileFileInformation 缓冲区的大小必须至少为 (FILE_LINK_INFORMATION) 。

此结构必须在 4 字节的长 () 边界上对齐。

要求

要求
Header ntifs.h (包括 Ntifs.h、Fltkernel.h)

另请参阅

FltSetInformationFile

IRP_MJ_SET_INFORMATION

ZwQueryInformationFile

ZwSetInformationFile