Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows:重定向ReadFile以运行进程并将其管道化';斯道特_Windows_Driver_Code Injection_Readfile_Minifilter - Fatal编程技术网

Windows:重定向ReadFile以运行进程并将其管道化';斯道特

Windows:重定向ReadFile以运行进程并将其管道化';斯道特,windows,driver,code-injection,readfile,minifilter,Windows,Driver,Code Injection,Readfile,Minifilter,我想知道在Windows下创建一个设置会有多困难,在这个设置中,文件系统会重定向某些文件上的常规ReadFile以实际运行(例如ShellExecute)这些文件,然后新进程的stdout被用作流式输出到被调用方的ReadFile调用的文件内容 我所设想的设置是这样的,您可以将其配置为将某个文件夹表示为“特殊”,并且该额外功能仅在该文件夹的内容上可用(因此不需要是磁盘范围)。它可以在新驱动器号下访问,或者在与源文件夹平行的路径下访问;它连接的位置与我无关 对于那些想知道这是否是典型xy问题的人:

我想知道在Windows下创建一个设置会有多困难,在这个设置中,文件系统会重定向某些文件上的常规ReadFile以实际运行(例如ShellExecute)这些文件,然后新进程的stdout被用作流式输出到被调用方的ReadFile调用的文件内容

我所设想的设置是这样的,您可以将其配置为将某个文件夹表示为“特殊”,并且该额外功能仅在该文件夹的内容上可用(因此不需要是磁盘范围)。它可以在新驱动器号下访问,或者在与源文件夹平行的路径下访问;它连接的位置与我无关

对于那些想知道这是否是典型xy问题的人:很可能是;)只是这个想法引起了我的兴趣,我想知道有什么可能性。在我的特定情况下,我希望使用C++来包含C++代码库中的内容,其中包含的实际内容是当场编撰的,在每个编译轮上都不同。当然,我也可以创建一个脚本来创建要包含的内容,将其称为预构建步骤,并将其保留下来,但为什么选择简单的路线呢

也许已经有现成的解决方案了?我在谷歌上搜索了很长一段时间,结果却空手而归。但是我不确定我是否已经知道了所有的关键字来做一个好的搜索

当我自己编写代码时,我认为可能需要一个微型过滤器驱动程序来拦截ReadFile调用,但它必须在内核空间运行用户模式应用程序——我认为这不是一个幸福的婚姻。或者使用现有的文件系统驱动程序框架,允许用户模式部件,但我发现现有解决方案的价格对我来说太高了(几千美元)。 我还假设可能需要标准文件系统(minifilter)驱动程序为这些文件返回一致的文件大小,尽管通过ReadFile返回的实际数据大小在每次调用时当然会有所不同。更不用说否定任何发生的缓冲了。 总而言之,我认为一个自己创建的解决方案需要付出相当大的努力,尤其是当你一生中从未做过Windows驱动程序开发时:)虽然我认为我自己很有能力学习它,但我认为投入的时间会让人望而却步


另一种方法可能是通过IAT挂接或代码注入从执行ReadFile的进程挂接ReadFile调用。但我希望这个解决方案能够“开箱即用”,即对这些特殊文件的所有ReadFile请求都会触发正确的行为,而不管其来源如何。在我的情况下,我需要拦截我的C++编译器(G++)行为,但是那个IDE是由IDE即时调用的,所以我看不到检测它启动的简单方法,并且在它启动读文件之前很快地把它挂起来。此外,我只希望某些文件在这方面是特殊的;截取某个进程的所有读取文件是一种过分的做法。

您想要类似的东西(我曾多次使用它),但对于Windows。很明显,我从未使用过它,但似乎已经足够广为人知了(而且,至少,可以作为一种灵感来了解“它是如何完成的”)

您想要类似的东西(我用过很多次了),但对于Windows。很明显,我从未使用过它,但似乎已经足够广为人知了(而且,至少,可以作为一种灵感来了解“它是如何完成的”)

谢谢你!在深入研究之后,它似乎使用了MinGW(我也使用MinGW)。它还为开发带来了很多麻烦,并允许用户模式代码运行。现在是时候弄清楚对于我的用例来说,这是否完全是过度的,但它看起来是一个有趣的项目!谢谢你!在深入研究之后,它似乎使用了MinGW(我也使用MinGW)。它还为开发带来了很多麻烦,并允许用户模式代码运行。现在是时候弄清楚对于我的用例来说,这是否完全是过度的,但它看起来是一个有趣的项目@否决票:想详细说明否决票吗?我知道,对于那些知情的人来说,这似乎有点像一个琐碎、明显、无关或愚蠢的问题,但我目前缺乏这种更深层次的理解。这篇文章更多的是让我(也许还有其他人)从中学习,而不是引出一个真正的解决方案(当然,如果它存在的话)。@downvoter:想详细说明一下downvote吗?我知道,对于那些知情的人来说,这似乎有点像一个琐碎、明显、无关或愚蠢的问题,但我目前缺乏这种更深层次的理解。这篇文章更多的是让我(也许还有其他人)从中学习,而不是引出一个真正的解决方案(当然,如果它存在的话)。