簡體   English   中英

在 Windows 中,如何在 C 中跟蹤子進程讀取和寫入的文件?

[英]In Windows, how can I trace in C which files a child process reads and writes?

我的目標是確定何時執行命令,准確地讀取和寫入哪些文件。 在 Linux 上,我可以使用ptrace (工作,類似於strace所做的)來做到這一點,而在FreeBSD和 MacOS 上,我可以使用ktrace系統命令來做到這一點。 在 Windows 上您將使用什么來獲取此信息?

到目前為止,我的研究表明我要么使用調試器接口(在很多方面類似於 ptrace),要么使用ETW 第三種選擇是插入一個 DLL 來攔截系統調用。 不幸的是,我沒有經驗來猜測每種方法的挑戰性。

有什么建議?

正如您所建議的,這是一個相當簡單的任務,可以通過 DLL 注入的 API 掛鈎來解決。

這是一篇關於應用程序的相當不錯的文章: API hooking 揭示

我相信你可以找到更多關於這個問題的最新文章。

但是,您可能需要使用 C++ 來實現這樣的實用程序。 順便說一下,程序可以禁用 DLL 注入。 例如,我無法在Photoshop的試用版上使用這種方法。

因此,在開始編寫自己的解決方案之前,您可能需要檢查是否可以使用現有解決方案在所需的進程中注入 DLL 文件。

不幸的是,似乎沒有簡單的方法來攔截 Windows 上的文件級操作。

這里有一些提示:

  • 如果足夠滿足您的需要,您可以嘗試使用來自Sysinternals 的FileMon ,或者嘗試查看該工具的來源
  • 你可以使用像Detours這樣的商業軟件——當心,我自己從來沒有用過,我不確定它是否真的滿足你的需求

如果您想更好地理解並且不害怕手動完成,Windows 攔截文件 I/O 的方法是使用文件系統過濾器驅動程序 實際上,Windows 系統中嵌入了一個FilterManager ,可以將所有文件系統調用轉發給minifilters

要構建它,與系統的接口由 FilterManager 提供,您只需 (...) 編寫代碼並安裝執行實際過濾的微過濾器- 再次注意從未測試過...

請查看文章CDirectoryChangeWatcher - ReadDirectoryChangesW all wrap up

這是一種非常古老但正在運行的監視目錄更改的方法。

微軟擁有一系列名為Sysinternals的工具。 有一個名為Process Monitor的程序,它將向您顯示特定進程的所有文件訪問。 這很可能是您想要的。

檢查這個特定的堆棧溢出問題以解決您的問題...這可能對您有所幫助: Windows 中是否有類似 Linux ptrace 系統調用的東西?

此外,如果您運行的是Windows XP等較低版本,那么您應該查看Process Monitor

另外,我想讓你檢查一下...... 監視由 Windows 中的進程完成的某些系統調用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM