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 硬链接。 可以通过以下任一方式执行此操作:
调用 FltSetInformationFile 或 ZwSetInformationFile,将 FileLinkInformation 作为 FileInformationClass 的值传递,并将调用方分配FILE_LINK_INFORMATION结构化缓冲区作为 FileInformation 的值传递。 FileHandle 参数指定硬链接应指向的现有文件。
使用主函数代码IRP_MJ_SET_INFORMATION创建 IRP。
无需特定访问权限即可设置此信息。
文件系统微筛选器必须使用 FltSetInformationFile(而不是 ZwSetInformationFile)来为文件设置此信息。
有关 NTFS 硬链接的详细信息,请参阅 Win32 CreateHardLink 函数Microsoft Windows SDK文档。
传递给 FltSetInformationFile 或 ZwSetInformationFile 的 FileInformation 缓冲区的大小必须至少为 (FILE_LINK_INFORMATION) 。
此结构必须在 4 字节的长 () 边界上对齐。
要求
要求 | 值 |
---|---|
Header | ntifs.h (包括 Ntifs.h、Fltkernel.h) |