有人能理解 MSDN 中的“硬链接和连接”文章吗?

Pio*_*ost 3 windows ntfs msdn hardlink junction

在MSDN 的Hard Links and Junctions文章中,您可以阅读以下内容:

硬链接是文件的文件系统表示形式,通过它多个路径引用同一卷中的单个文件。要创建硬链接,请使用 CreateHardLink 函数。通过引用该文件的硬链接访问该文件的应用程序可以立即看到对该文件的任何更改。但是,仅针对进行更改的链接更新目录条目大小和属性信息。请注意,文件的属性会反映在该文件的每个硬链接中,并且对该文件属性的更改会传播到所有硬链接。例如,如果您重置硬链接上的 READONLY 属性以删除该特定硬链接,并且实际文件有多个硬链接,则您需要将文件上的 READONLY 位从剩余硬链接之一重置为将文件和所有剩余的硬链接恢复为 READONLY 状态。

有人能理解上面这段话吗?
文件上的语句属性是否反映在该文件的每个硬链接中,相当于对该文件属性的语句更改传播到所有硬链接
为什么重置READONLY 位可以使文件和所有剩余的硬链接回到 READONLY 状态

编辑

在阅读了 JdeBP 对这个问题的出色回答后,我仍然心存疑虑。

$STANDARD_INFORMATION我知道每个指向该条目的硬链接都有 MFT 条目的部分副本,根据答案,除非硬链接被重命名、创建或销毁,否则该条目甚至不会保持最新状态。当读取硬链接的属性时会发生什么?我猜这个硬链接的副本$STANDARD_INFORMATION会被忽略,因为它可能无法反映当前状态,并且属性是直接从 MFT 条目的$STANDARD_INFORMATION. 此外,在此过程中不会更新任何信息,因为它不是您列出的任何操作。是这样吗?

如果将 R 位设置为关闭以便能够删除到文件的硬链接,那么(假设这不是最后一个链接)必须以任何方式再次将 R 位设置为打开,才能创建文件再次只读。

现在,我不认为这不是最后一个链接部分。我不明白最后一个链接在这里有什么区别。仍然有一个文件(MFT 的条目)本身,并且可以直接更改其属性(而不是通过任何链接)。或者如果有一个文件,就会有一个链接,这意味着 MFT 的条目和文件之间没有一一对应的关系?

Jde*_*eBP 5

正如grawity所说,第二次“重置”要么是写得不好,要么是彻底的错误。

文件上的语句属性是否反映在该文件的每个硬链接中,相当于对该文件属性的语句更改传播到所有硬链接

不。这篇文章所阐述的内容对其目标读者而言可能过于详细。在 NTFS 上,MFT 中的每个条目可以有零个或多个$FILE_NAME 属性。它们记录了文件的每个硬链接的父目录和该目录中的名称。但它们记录文件属性标志,即使这些标志记录在 MFT 条目的单个$STANDARD_INFORMATION属性中。这些规则有点复杂,但简单地说,$STANDARD_INFORMATION重要的是$FILE_NAME信息甚至不会保持最新,除非硬链接被重命名、创建或销毁——这需要接触属性$FILE_NAME,当前的点也是如此。属性标志可以传播到$FILE_NAME属性。

开发人员可能向撰写 MSDN 文章的技术作者解释了 NTFS 的具体细节。但它们实际上与最终用户甚至应用程序程序员没有任何相关性。这些是 NTFS 如何工作的内部细节。从 Win32 的角度来看,一个文件/目录只有组属性标志,更新它就是更新它,无论如何完成。如果设置该位R以启用删除文件的硬链接,那么(假设这不是最后一个链接)必须R以任何方式再次设置该位以使文件可读 -只能再一次。

  • 只是为了澄清,当您更改链接上的只读标志时,此更改会立即对该文件的所有其他链接生效,但不会立即在这些链接上“可见”,例如在目录列表中或通过“attrib”命令。 (2认同)