在Windows中,如何在C中跟踪子进程读取和写入的文件?

Dav*_*ndy 18 c windows

我的目标是确定何时执行命令,确切地说它读取和写入哪些文件.在linux中,我可以使用ptrace(有工作,类似于strace的工作),在freebsd和MacOS上我可以使用ktrace系统命令执行此操作.您将在Windows中使用什么来获取此信息?

到目前为止,我的研究表明,我要么使用调试器接口(在许多方面类似于ptrace),要么使用ETW.第三种方法是插入DLL以拦截系统调用.不幸的是,我没有经验可以猜测每种方法的挑战性如何.

有什么建议?

Ser*_*sta 5

不幸的是,似乎没有简单的方法可以拦截 Windows 上的文件级操作。

以下是一些提示:

如果您想要更好地理解并且不害怕手动执行此操作,则 Windows 拦截文件 I/O 的方法是使用文件系统筛选器驱动程序。事实上,Windows系统中嵌入了一个FilterManager,可以将所有文件系统调用转发给minifilters

为了构建它,与系统的接口由 FilterManager 提供,您只需(...)编码并安装执行实际过滤的微型过滤器- 再次注意从未测试过...


Fat*_*KIR 4

正如您所建议的,这是一个相当简单的任务,可以通过 DLL 注入的 API 挂钩来解决。

这是一篇关于该应用程序的非常好的文章:API hooking displayed

我相信您可以找到更多有关该问题的最新文章。

但是,您可能需要使用 C++ 来实现这样的实用程序。顺便说一句,程序可以禁用 DLL 注入。例如,我无法在Photoshop试用版上使用此方法。

因此,在开始编写自己的解决方案之前,您可能需要检查是否可以使用现有解决方案在所需的进程中注入 DLL 文件。