2011-02-11 278 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