我想创建一个minifilter驱动程序来透明地重定向磁盘i/o,但我开始时遇到了麻烦

Ada*_*mes 15 c++ driver io-redirection wdf minifilter

我目前正在开发的一个项目需要实现一个w-m复制机制,该机制将用于在Windows XP上以与Deep Freeze或Sandboxie类似的方式重定向磁盘i/o.如果我可以,我也希望能够"装载"用户的修改文件,类似于VirtualCloneDrive如何模拟磁盘驱动器并在其上透明地安装ISO映像.

据我所知,这些程序使用minifilter驱动程序来重定向i/o请求.标准流程将任何已修改的数据复制到辅助位置,然后读取/修改该存储以便随后访问该数据; 所以我想我明白我需要做什么.当谈到模拟CD/DVD驱动器并在其上安装图像时,我完全迷失了.

我一直在网上寻找(谷歌,MSDN,代码项目等)和书籍,如使用Windows驱动程序基础Windows NT文件系统内部开发驱动程序:开发人员指南,但查找具体信息和示例(关于监视,拦截)并且重定向请求和创建环回设备)证明是困难的.我对所涉及的技术还很陌生,所以也许我很难看到森林里的树木.

我想知道是否有人遇到类似的情况,并发现了任何有用的资源,或者可以指出我正确的方向,所以我可以实现类似的功能.

编辑:我发现这个问题似乎是一个有用的资源(虽然不适用于我的特定用例),所以我在这里将它链接到任何即将发布的响应中.

一些澄清:

我正在尝试创建一个程序,允许用户在不需要管理权限的情况下安装和使用应用程序.该程序将通过将任何文件系统/注册表修改保存到单独的存储区域(例如,笔式驱动器或网络存储上的文件),然后允许将它们集成到运行主机程序的任何桌面上,即可运行.使用USB笔将桌面随身携带,将其插入,然后应用您的设置.

要重定向I/O,我可以:

  1. 修补进程'导入地址表(IAT)以在应用程序级别插入自定义代码.
  2. 编写用户模式筛选器驱动程序以动态修改请求.
  3. 为了增强(实际上是真的)安全性,实现内核模式驱动程序以与AV软件类似的方式修补系统服务描述符表(SSDT).

每种方法都有好处和缺点.例如,方法三比接近方法困难得多.它提供了更多的安全性,但即使这样它也可以被打败(理论攻击自96年以来一直存在,自07年以来的实际攻击.)

我最初考虑了特定的安全功能(而不仅仅是类似于WoW64兼容性设置的i/o重定向); 但是自从开始看这个以来,我记得你无法永远保护用户免于自己,而且无论我做多少工作都是为了保护主机系统免受恶意进程或愚蠢用户的攻击,它都可能被殴打(或者我更有可能犯错误.)我还决定避免重新发明沙盒和防病毒轮,只需专注于创建一些有用的功能."工具应该做好一件事,做得好"的理念赢得了胜利.

简而言之,我想要做的就是实现类似于VM快照的功能,并将更改重定向到我自己的存储区域.下面的图表有点过时了,但在沟通我的意图方面可能比我现在更好:-)

早期应用设计

Nec*_*lis 6

WDK拥有你在minifilters下所需的所有例子samples/filesys/minifilter,它们都有很好的文档记录,但部分内容有些混乱.但是,正如评论中所提到的,这需要管理员权限使用,但任何形式的修补或挂钩也是如此(请参阅参考资料SeDebugPrivilege)