我想知道在Windows下创建一个设置是多么困难,其中某些文件的常规ReadFile被文件系统重定向到实际运行(例如ShellExecute)那些文件,然后是新进程&#39 ; stdout被用作流式传输到被调用者的ReadFile调用的文件内容...
我设想的设置是,您可以将其配置为将某个文件夹表示为“特殊”,并且此额外功能仅适用于该文件夹' s内容(所以它不需要在磁盘范围内)。它可以在新的驱动器号或与源文件夹平行的路径下访问;它所连接的位置与我无关。
对于那些想知道这是否是经典的xy问题的人:它可能很好;)只是这个想法引起了我的兴趣,我想知道它有什么可能性。在我的特定情况下,我想将它用于我的C ++代码库中的#include内容,其中包含的实际内容在现场组成,每次编译轮次都不同。我当然也可以创建一个脚本来创建要包含的内容,将其称为预构建步骤并将其保留在那里,但为什么选择简单的路径。
也许已经有现成的解决方案?我做了大量的谷歌搜索,但空手而归。但后来我不确定我是否已经知道所有涉及的关键词,以便进行良好的搜索...
当我自己编写代码时,我认为可能需要拦截ReadFile调用的minifilter驱动程序,但是那时必须在内核空间运行usermode应用程序 - 这不是我认为的幸福婚姻。或者使用允许用户模式部件的现有文件系统驱动程序框架,但我发现现有解决方案的价格对我来说太陡(几千美元)。 我还假设可能需要标准文件系统(minifilter)驱动程序为这些文件返回一致的文件大小,尽管通过ReadFile返回的实际数据大小在每次调用时当然会有所不同。更不用说否定发生的任何缓冲。 总而言之,我认为创建自己的解决方案需要付出相当大的努力,特别是当你在生活中从未完成过Windows驱动程序开发时:)尽管我认为自己很有能力学习它,但投入的时间将是我认为这是禁止的。
另一种方法可能是从执行ReadFile的进程挂钩ReadFile调用 - 通过IAT挂钩或通过代码注入。但我希望这个解决方案能够开箱即用,即对这些特殊文件的所有ReadFile请求都会触发正确的行为,无论其来源如何。在我的情况下,我需要拦截我的C ++编译器(G ++)行为,但是这个行为是由IDE动态调用的,所以我认为没有简单的方法来检测它的启动并快速连接它在它执行它的ReadFiles之前。此外,我只希望某些文件在这方面很特别;拦截特定进程的所有ReadFiles是过度的。