使用更改日志标识符

NTFS 文件系统将无符号 64 位标识符与每个更改日志相关联。 日记帐在创建时会用此标识符进行标记。 文件系统使用新标识符标记日志,其中现有更新序列号 (USN) 记录是或可能不可用。

例如,当卷从一个版本的 NTFS 移动到另一个版本,然后返回时,NTFS 文件系统使用新标识符重新采样更改日志。 这种移动可以在双启动环境中发生,也可以在使用可移动媒体时发生。

若要获取指定卷上当前更改日志的标识符,请使用 FSCTL_QUERY_USN_JOURNAL 控制代码。 若要执行此和所有其他更改日志操作,必须具有系统管理员权限。 也就是说,你必须是管理员组的成员。

当管理员删除并重新创建更改日志时,例如,当当前 USN 值接近可能的最大 USN 值时,USN 值将从零开始。 当 NTFS 文件系统使用新标识符标记日志而不是重新创建日志时,它不会将 USN 重置为零,而是从当前 USN 继续。 在任一情况下,所有现有 USN 都小于任何将来的 USN。

如果需要有关特定记录集的信息,请使用 FSCTL_QUERY_USN_JOURNAL 控制代码获取更改日志标识符。 然后使用 FSCTL_READ_USN_JOURNAL 控制代码读取感兴趣的日记记录。 NTFS 文件系统仅返回对标识符指定的日记有效的记录。

应用程序需要记录的 USN 和标识符才能读取日志。 此要求为应用程序应忽略文件中的现有记录以及记录在同一卷的日志的先前实例中写入的情况提供了完整性检查。

若要获取感兴趣的记录,必须从最早的记录 (开始,即使用最低 USN) 并向前扫描,直到找到第一个感兴趣的记录。