2010-08-24 196 views
0

通常,當應用程序將其中一個文件寫入磁盤時,文件修改的時間戳會更改。要求Windows將數據寫入磁盤的不同方法

有時候,在我的情況下,它是一個用ProvideX(我相信是商業基礎衍生物)寫的應用程序,修改後的時間戳在寫入後不會改變。像MyTrigger這樣的程序也不會在寫入操作中出現,但Sysinternals ProcessMonitor會記錄磁盤活動。

很明顯,有不同的方法可以讓windows執行寫操作,然後可以用各種不同的方式來掛接或記錄請求。

我需要能夠掛接來自ProvideX應用程序的寫入操作。任何指向窗口寫入磁盤的不同方式的指針,以及可用於它們的鉤子類型都將不勝感激。

由於

+0

我沒有資格給出一個完整的答案,因此評論,但我知道你可以編寫和追加一個文件,在這一點修改日期改變,或者你可以創建一個臨時文件並重命名它(或將其複製到)您正在監控的名稱,在這種情況下,它將不會更新,直到結束。 – 2010-08-24 18:50:28

回答

1

用戶模式進程可以寫入文件或者使用WriteFile的API函數或使用MMF,存儲器映射文件API(的CreateFileMapping/MapViewOfFile /寫入存儲器塊)。也許你的應用程序採用MMF方式。 MMF寫入文件的方式與WriteFile API非常不同,但它們都導致相同的端點 - 將IRP發送到文件系統驅動程序。文件系統過濾器驅動程序(如Sysinternals使用的驅動程序)可以跟蹤該IRP級別的寫入請求。在技​​術上可以區分由MMF和WriteFile發起的寫操作,因爲發送了不同的IRP(涉及緩存和非緩存寫入)。看來,Windows中的目錄更改監視功能只跟蹤一種IRP類型,這會導致MyTrigger錯過更改。

+0

謝謝。我將不得不穀歌所有這些條款,然後嘗試它們,然後才能確定這是我需要的,但它看起來正確! – 2010-08-25 15:07:28

+0

[內存映射文件I/O可能會或可能不會更新文件修改時間戳](http://blogs.msdn.com/b/elyasse/archive/2010/04/18/memory-mapped-file-io-may -or-may-not-update-the-file-modified-timestamp.aspx)不是說這回答了問題,但它可能是問題的原因。 – 2011-03-30 12:00:26