Windows + NTFS中的文件访问时间

时间:2011-02-11 13:08:18

标签: windows winapi file filesystems ntfs

我试图弄清楚Windows何时以及如何更新文件上的文件访问时间。 首先,由于性能原因,大多数Windows安装都禁用了文件访问时间,因此在绕过它之前,您需要做的是激活NTFS文件系统上的最后访问时间:修改密钥{{1}值name [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem]到DWORD NtfsDisableLastAccessUpdate值数据(如果它当前设置为1)。如果它不存在则只需创建它。

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

我的问题如下:

  • 使用0发布WinApi CreateFile()时访问时间是否更新?在我的情况下,虽然以编程方式执行,但它没有。通过Explorer Shell打开该文件的“文件属性”对话框会更新访问时间。
  • 在发出WinApi FILE_READ_ATTRIBUTES以从文件中读取图标时,是否更新了访问时间? 在我的情况下,以编程方式这样做,它没有。通过Explorer Shell打开该文件的“文件属性”对话框会更新访问时间。

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

作为旁注,我 按照ExtractIconEx()执行:

  

关于文件的唯一保证   timestamp是文件时间   手柄正确反映   这使得改变已经结束。

我的最终结论是,确实围绕网络的观点是正确的,Windows确实以随机的方式更新了文件访问时间,因此真的不应该依赖于Windows文件访问时间。

偏离主题的咆哮:对不起法医家伙,您必须使用其他方法证明访问时间,或者您可以在几秒钟内使您的案例无效。 :P

1 个答案:

答案 0 :(得分:1)

不,访问文件的元数据不会改变上次访问时间(名称,属性,时间戳)。在实践中不能很好地工作,只需用Explorer查看目录就可以改变它。你必须实际打开该文件。 ExtractIconEx()通常是一个很好的候选人,除了Windows可以玩它的技巧。隐藏的desktop.ini文件可以将图标重定向到另一个文件。

使用上次访问时间对取证来说毫无价值。您需要一个文件系统过滤器驱动程序。与SysInternals的ProcMon实用程序中嵌入的类似。它可能正在使用ETW btw,它在Vista时非常强大。然而,你的项目变得复杂了10倍。