2008-08-21 78 views
3

我希望能夠跟蹤特定程序調用的文件讀/寫。不需要關於實際交易的信息,只需要涉及文件名。跨平臺文件訪問跟蹤

是否有跨平臺解決方案呢?
什麼是各種平臺特定的方法?
在Linux上,我知道有strace/ptrace(如果有更快的方法,那也會很好)。
我想在Mac OS上有ktrace。
Windows怎麼樣?

此外,如果能夠阻止(停止)文件訪問直到稍後的時間,這將是驚人的。

謝謝!

+0

我也在尋找這個問題的答案。我希望(像你一樣)可以在Mac OS上使用ktrace,但系統調用似乎已被刪除(或隱藏)。你有沒有在Mac上運行ktrace? – 2015-04-18 21:19:36

回答

0

在Windows上,您可以使用命令行工具Handle或GUI版本Process Explorer查看給定進程已打開的文件。

如果您要在自己的程序中獲取此信息,可以使用Microsoft的IFS kit編寫文件系統過濾器。文件系統過濾器將顯示所有進程的所有文件系統操作。 AV軟件使用文件系統過濾器在打開文件之前掃描文件或掃描新創建的文件。

1

簡短的回答是否定的。有許多平臺特定的解決方案都可能具有類似的接口,但它們本質上不是跨平臺的,因爲文件系統往往是平臺特定的。


我怎麼把它做好每個平臺上?

同樣,這將取決於該平臺:)對於Windows上,如果你想跟蹤讀取飛行/寫,你可能必須去與IFS。如果您只想獲取有關更改的通知,則可以使用ReadDirectoryChangesW或NTFS更改日誌。

我建議使用NTFS更改日記只是因爲它往往更可靠。

+1

NTFS是否會更改日記報告哪個進程會進行每次更改? – 2015-04-18 17:53:21

0

只要你的程序啓動你想要監視的進程,你可以編寫一個調試器,然後每當進程啓動或退出時你都會得到通知。當一個進程啓動時,你可以注入一個DLL來鉤住每個單獨進程的CreateFile系統調用。然後該鉤子可以使用管道或套接字將文件活動報告給調試器。

+0

你有什麼提示如何從C鉤住這個鉤子? – 2015-04-18 21:21:29