我想在Microsoft Windows上编写一个C ++函数,它生成一个进程,并在进程的终止状态之外返回进程读取或写入的所有文件的列表。它不应该需要来自衍生应用程序的任何合作。
例如,如果生成的程序是Visual Studio C ++编译器,则该函数将生成一个列表,其中包含编译器打开的源文件,它读取的所有头文件以及它创建的.OBJ
文件。如果它还包含程序包含的.DLL
文件之类的内容,那就没问题了。但同样,无论产生的程序如何,它都应该有效;编译器只是一个例子。
扭曲:如果进程创建子进程,我也需要监视他们的文件访问。
第二个转折:如果进程尝试打开文件,我希望能够让它等到我可以创建该文件 - 然后让它恢复并打开文件。 (我认为这排除了ETW。)
我知道这可能听起来像一些可怕的kludge的成分。但是,如果我能让这个工作,最终的结果将非常酷。
答案 0 :(得分:1)
第二个转折:如果进程试图打开一个文件,我希望能够让它等到我可以创建该文件 - 然后才让它恢复并打开文件
你只是按照这个要求进入Hack City--你是对的,ETW将是一个更容易解决的问题,但它也无法阻止文件调用。
基本上,这就是你要做的事情:
请记住,您将注入代码并对内存中的映像进行修复,这些映像可能与您的位数不同(即您的应用程序是64位,但它启动的是32位进程),所以你必须同时注入你的填充码的x86和amd64版本。我希望通过编写这个冗长的dia骂,你已经说服自己,这实际上是一个非常难以正确的想法,并且挂钩Win32功能的人使Windows操作系统开发人员感到悲伤。