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 硬链接。 此作可以通过以下任一方式执行:
调用 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)。
此结构必须在 LONG(4 字节)边界上对齐。
要求
要求 | 价值 |
---|---|
标头 | ntifs.h(包括 Ntifs.h、Fltkernel.h) |