2011-02-11 275 views
2

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

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

我的问题如下:

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

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

作为一个侧面说明,我没有CloseHandle()按:

有关文件 时间戳的唯一保证是该文件的时间 正确反映时,使改变手柄 是关闭。

我的结论是,网络上的观点确实是真实的,而且Windows以随机方式更新文件访问时间,因此实际上不应该依赖Windows文件访问时间。

题外话:对不起法医学家,你必须使用另一种方法证明访问时间,或者你可以在几秒钟内让你的案件失效。 :P

回答

1

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

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

+0

但是,从资源管理器发出文件 - >属性会改变最后的访问时间,是因为它抓住了图标?如果文件没有嵌入自己的图标,并且操作系统根据扩展名默认分配一个文件,那么它们的访问时间会更新。如果文件属性/元数据不是文件属性/元数据,那么浏览器必须从文件中获取其他类型的信息? – Shinnok 2011-02-11 14:36:28