1

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

经过一番调查,我认为我可以直接阅读 NTFS 更改日志。如果在同一卷上移动/重命名文件等,这将非常有用。为了识别文件,我使用了文件参考号。

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

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

4

1 回答 1

2

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

如果您有必要的权限,您可以在文件中竞争并分配一个 GUID,该 GUID 将在 NTFS 卷移动时保留。您声明的目标正是该功能存在的原因。它使用了一个有点笨拙的 API,称为DeviceIOControl... 用于无数目的...但其中一个控制代码是 FSCTL_CREATE_OR_GET_OBJECT_ID。在这里查看详细信息。

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

于 2018-09-01T22:12:41.360 回答