NTFS 更改日志 - 文件更改跟踪

NTFS Change Journal - File Change Tracking

我正在开发一个更改跟踪软件来监视特定卷的文件。我尝试了 FileSystemWatcher (.NET) 和 AlternateDataStreams,但它们都有一些限制(即更改跟踪软件必须 24/7 运行,备用数据流不适用于 ReadOnly 文件等)。

经过一些调查,我认为我可以直接读取 NTFS 更改日志。如果文件是 moved/renamed,这在同一卷上效果很好。为了识别我使用文件参考号的文件。

但是如果文件移动到另一个卷,文件参考号自然会改变。

我的问题: 是否有一个即使文件移动到另一个卷也不会改变的唯一 ID(GUID 或其他)?

嗯...可以 文件 GUID,但默认情况下不存在。

如果您有必要的权限,您可以快速浏览文件并分配一个 GUID,该 GUID 将在 NTFS 卷移动中保留。您声明的目标正是该功能存在的原因。它使用了一个有点笨拙的 API,称为 DeviceIOControl...用于无数目的...但它的控制代码之一是 FSCTL_CREATE_OR_GET_OBJECT_ID。检查 here 了解详情。

如果尚未分配 GUID,它只会创建 GUID...这正是您希望它工作的方式。当然,如果文件移动到非 NTFS 卷,您仍然不走运。