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

时间:2015-04-02 13:22:09

标签: c windows

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

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

有什么建议吗?

5 个答案:

答案 0 :(得分:4)

正如您所建议的,这是一个相当简单的任务,需要使用DLL注入API钩子来解决。

这是一篇关于该应用程序的非常好的文章:http://www.codeproject.com/Articles/2082/API-hooking-revealed

我相信你可以找到关于这个问题的最新文章。

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

因此,在开始编写自己的解决方案之前,您可能想要检查是否可以在所需的过程中注入dll。

祝你好运。

答案 1 :(得分:4)

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

以下是一些提示:

  • 您可以尝试使用来自sysinternals的FileMon,如果它足以满足您的需求,或者尝试查看该工具的来源
  • 你可以使用像Detours这样的商业软件 - 小心,我从来没有用过它,我不确定它真的能满足你的需求

如果您希望更好地理解并且不会害怕手动,那么Windows拦截文件IO的方式是使用File System Filter Driver。实际上,Windows系统中嵌入了FilterManager,可以将所有文件系统调用转发给 minifilters

要构建它,系统的接口由FilterManager提供,您只需(...)编写并安装执行实际过滤的 minifilter - 再次注意从未测试过那...

答案 2 :(得分:1)

请查看以下文章:

http://www.codeproject.com/Articles/950/CDirectoryChangeWatcher-ReadDirectoryChangesW-all

这是一种非常古老但正在运行的方式来观察目录更改。

答案 3 :(得分:1)

微软拥有一系列名为SysInternals的工具。有一个名为Process Monitor的程序将显示特定进程的所有文件访问。这很可能是你想要的。

答案 4 :(得分:1)

为您的问题检查此特定链接... 这可能对你有帮助 Is there something like linux ptrace syscall in Windows?

此外,如果你正在运行像XP这样的较低版本,你应该检查这个链接.. https://technet.microsoft.com/en-us/sysinternals/bb896645.aspx
如果它没有帮助,请告诉我

另外,我想请你查看这个男人.. Monitoring certain system calls done by a process in Windows