Windows + NTFS中的文件访问时间

我想弄清楚何时以及如何Windows更新文件上的文件访问时间。 首先,由于性能原因,大多数Windows安装都禁用了“文件访问时间”,所以在这之前,为了激活上次在NTFS文件系统上的访问时间,您需要执行以下操作:修改密钥[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem]值名称NtfsDisableLastAccessUpdate为DWORD 0值数据(如果它被设置为1当然)。 如果不存在,只需创build它。

在阅读MSDN上的File Times文章时 ,我仍然怀疑Windows如何更新访问时间。

我的问题如下:

  • 使用FILE_READ_ATTRIBUTES发出WinApi CreateFile()后访问时间是否更新? 在我的情况下,虽然以编程方式进行,但没有。 通过资源pipe理器打开文件的文件属性对话框会更新访问时间。
  • 发出WinApi ExtractIconEx()从文件中读取图标时访问时间是否更新? 在我的情况下这样做编程,它不。 通过资源pipe理器打开文件的文件属性对话框会更新访问时间。

如果你问我,这两种情况都应该更新文件访问时间,但在我看来,直接的WinApi调用不会更新它们,或者Window / NTFS驱动程序真的滞后,而在Windows资源pipe理器上运行的文件的更新很好。 你认为什么是或可能是这个问题?

作为一个方面说明,我做了CloseHandle()按照:

关于文件时间戳的唯一保证是文件时间在closures更改的句柄时被正确反映。

我最终的结论是,networking上的观点确实是真实的,而且Windows随机更新文件访问时间,因此实际上不应该依赖于Windows文件访问时间。

焦点话题:抱歉的取证工作人员,你必须用另一种方法certificate访问时间,或者你可以在几秒钟内让你的案件失效。 :P

不,访问文件的元数据不会改变上次访问时间(名称,属性,时间戳)。 在实践中效果不好,只要用资源管理器查看目录就会改变它。 你必须真正打开文件。 ExtractIconEx()通常会是一个很好的候选人,除了Windows可以玩弄技巧。 隐藏的desktop.ini文件可以将图标重定向到另一个文件。

使用上次访问时间对于取证来说是非常没有价值的。 你需要一个文件系统过滤器驱动程序。 与SysInternals的ProcMon实用程序中嵌入的类似。 它可能是使用ETW btw,这在Vista时代已经非常强大。 不过,你的项目要复杂10倍。