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 的“备注”部分。

言论

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 文档。

传递给 FltSetInformationFileZwSetInformationFile 的 fileInformation 缓冲区的大小必须至少 (FILE_LINK_INFORMATION)。

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

要求

要求 价值
标头 ntifs.h(包括 Ntifs.h、Fltkernel.h)

另请参阅

FltSetInformationFile

IRP_MJ_SET_INFORMATION

ZwQueryInformationFile

ZwSetInformationFile