分布式链接跟踪和对象标识符
使用文件或目录的路径和文件名来存储文件或目录的引用并不可靠。 如果用户重命名文件,就会破坏指向该文件的链接。 如果用户重命名了目录,就会破坏与文件以及目录树中所有文件和子目录的链接。
分布式链接跟踪服务让客户端应用程序能够跟踪已发生移动的链接源。 订阅链接跟踪服务的客户端可以保持其引用的完整性,并以对用户透明的方式对对象进行跟踪。
对象标识符
链接跟踪服务通过使用对象标识符 (ID) 来保持与对象的链接。 对象 ID 是一个可选属性,用于唯一标识卷中的文件或目录。
卷上存储了所有对象 ID 的索引。 重命名、备份和还原操作都会保留对象 ID。 但复制操作不会保留对象 ID,因为这样会违反其唯一性。
可以对对象 ID 执行以下操作:
- 创建
- 删除
- 查询
创建对象 ID 时,就向链接跟踪服务确定了文件的身份。 反之,删除对象 ID 后,链接跟踪服务就会停止维护指向文件的链接。 有关对对象 ID 执行操作的文件系统控制代码的列表,请参阅文件管理控制代码。
分布式链接跟踪服务可跟踪 NTFS 文件系统卷内 shell 快捷方式和 OLE 链接的链接源。 链接客户端可以利用链接源新位置的最新信息来修复损坏的链接。
链接跟踪功能
Shell 快捷方式包括启发式链接跟踪,它使用树形搜索算法来查找与移动链接源匹配的链接。 搜索算法基于文件的最后已知路径和文件信息,包括创建日期、文件大小、文件名和扩展名。
OLE 链接包括相同的启发式链接跟踪。 Windows 还包括相同的启发式链接跟踪功能,并对搜索名称空间进行了一些改进,以便在一些常见情况下获得结果。 改进措施包括以下程序,具体取决于客户端应用程序规定的时间限制。
搜索名称空间
- 从最后一级目录向下搜索四级目录。
- 向上移动一个目录,然后再重复步骤 1 和 2 三次,如果对象在附近移动过,就可以找到结果。
- 从桌面根目录向下搜索四层,如果对象已移动到同一桌面上的某个位置,则可获得搜索结果。
- 在每个本地固定硬盘上从根目录向下搜索四层。
- 取消四个目录限制并重复步骤 1-3。
注意
这些链接跟踪方案对最终用户是透明的。 然而,这些方法并不总能产生积极的效果,而且可能很费时间。
有关 shell 快捷方式的详细信息,请参阅 IShellLink。
有关 OLE 链接的详细信息,请参阅 IOleLink。
如果与 NTFS 3.0 或更高版本上的文件建立了链接,并且该文件被移动到同一域内任何其他 NTFS 3.0 或更高版本的卷中,则跟踪服务可以找到该文件,但需考虑时间因素。 此外,如果文件被移动到域外或工作组内,则也会被找到。
要获取卷的 NTFS 版本,请打开具有管理员访问权限的命令提示符并执行以下命令:
fsutil fsinfo ntfsinfo X:
其中, X 是卷的驱动器号。
创建指向文件的链接时,目标文件会被视为链接源,而链接的创建者是链接客户端。 例如,如果创建了一个 shell 快捷方式来链接到文本文档,那么文本文档就是链接源,而 shell 快捷方式就是链接客户端。
分布式链接跟踪服务会为域内发生的以下情况维护文件链接:
- 链接源文件从一个 NTFS 文件系统卷移动到同一域内的另一个文件系统卷。
- 包含链接源的计算机名称会被重命名。
- 链接源计算机上的网络共享会被更改。
- 包含链接源文件的卷会被移动到同一域内的另一台计算机上。
分布式链接跟踪服务还会尝试在上述情况下维护链接,即使这些链接不是发生在域内,即跨域或在工作组内。 在这些情况下,当链接源计算机上的网络共享发生变化时,链接始终可以保持。 当链接源在计算机内移动时,它们也能得到维护。 当链接源被移动到另一台计算机时,链接通常可以保持,但这种跟踪方式的可靠性会随着时间的推移而降低。
链接跟踪功能
链接跟踪功能主要通过以下两种系统服务的形式来实现:
- 分布式链接跟踪客户端
- 分布式链接跟踪服务器
-
分布式链接跟踪客户端
-
分布式链接跟踪客户端可在所有计算机上运行,并管理该计算机的链接跟踪活动。 这些活动包括搜索链接源和处理链接源移动。 当链接源被移动时,服务会将信息传递给在域控制器上运行的分布式链接跟踪服务器。
-
分布式链接跟踪服务器
-
分布式链接跟踪服务器可在域中的每个域控制器上运行。 该服务会接受计算机上的跟踪服务发出的文件和卷移动通知,并允许分布式链接跟踪客户端查询链接源的当前位置。
此服务器服务会在域控制器中维护有关已移动卷和文件的信息。 有关移动的信息不能超过特定的大小,如果没有必要,它就会自动删除。
链接跟踪服务由 IShellLink 和 IOleLink 接口公开。 因此,它们会被 shell 快捷方式使用。 当调用 IShellLink::Resolve 方法而无法找到引用文件时(例如,当用户激活 shell 快捷方式时),系统会自动调用跟踪服务来查找文件。 同样,当 IOleLink 实现无法找到文件时,例如在其 BindToSource 方法中,它会自动调用跟踪服务。
链接跟踪限制
分布式链接跟踪服务仅适用于 NTFS 文件系统,并且仅适用于 NTFS 3.0 或更高版本的链接源。 因此,如果链接源被移动到 FAT 文件系统卷,则跟踪信息就会丢失。 此外,如果链接源在 NTFS 3.0 或更高版本之间移动,但执行移动的计算机运行的是较早版本的 Windows,则链接跟踪信息就会丢失。 当链接跟踪信息丢失时,链接源文件本身不会受到任何损害,只是分布式链接跟踪服务将无法对其进行跟踪。
要获取卷的 NTFS 版本,请打开具有管理员访问权限的命令提示符并执行以下命令:
fsutil fsinfo ntfsinfo X:
其中, X 是卷的驱动器号。
可移动媒体上文件的链接不会被保留。 此外,在系统重新启动之前,跟踪服务不会识别新的 NTFS 文件系统卷。 由于重新分区、将 FAT 文件系统卷重新格式化为 NTFS 文件系统或连接新的外置硬盘,可能会出现一个新的卷。