在Windows中,我怎样才能在C中跟踪subprocess读取和写入的文件?

我的目标是确定何时执行命令,确切地说是读取和写入哪些文件。 在Linux中,我可以使用ptrace来做到这一点(工作,类似于strace),在freebsd和MacOS上,我可以用ktrace系统命令来做到这一点。 你会用什么来获得这个信息在Windows中?

到目前为止,我的研究表明,我要么使用debugging器接口(在许多方面类似于ptrace),要么可能使用ETW。 第三种方法是设置一个DLL来拦截系统调用。 不幸的是,我没有经验猜测这些方法将会如何挑战。

有什么build议么?

正如你所建议的那样,使用DLL注入来解决这个问题是一个非常简单的任务。

这是一个相当不错的应用程序的文章: http : //www.codeproject.com/Articles/2082/API-hooking-revealed

我相信你可以找到更多有关这个问题的文章。

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

因此,在开始编写自己的代码之前,您可能需要检查是否可以使用现有的解决方案注入dll。

祝你好运。

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

这里有一些提示:

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

如果你想更好地理解,而不是手动做的惊吓,Windows截取文件IO的方式是使用文件系统过滤器驱动程序 。 实际上,Windows系统中嵌入了一个FilterManager ,可以将所有的文件系统调用转发给微过滤器

为了构建它,与FilterManager提供的系统接口,你只是(…)来编写和安装实际过滤的微过滤器 – 再次提防从未测试… …

请看下面的文章:

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

这是一个非常古老的,但运行方式来观看目录的变化。

微软拥有一大堆名为SysInternals的工具。 有一个名为进程监视器的程序,它将显示特定进程的所有文件访问。 这很可能是你想要的。

检查这个问题的连接你的问题…这可能会帮助你是否有像Windows中的Linux ptrace系统调用?

另外,如果你正在运行较低版本的XP,你应该检查这个链接了.. https://technet.microsoft.com/en-us/sysinternals/bb896645.aspx
让我知道如果它没有帮助

此外,我希望你能检查出这个人.. 监视一个进程在Windows中完成的某些系统调用