【发布时间】:2011-06-02 14:08:33
【问题描述】:
我需要在 windows 下 FindFirstFile 和 FindNextFile 返回的结果中添加一些文件。这可以通过文件系统过滤器驱动程序或什么类型的驱动程序实现吗?
谢谢
【问题讨论】:
标签: c++ c windows device-driver
我需要在 windows 下 FindFirstFile 和 FindNextFile 返回的结果中添加一些文件。这可以通过文件系统过滤器驱动程序或什么类型的驱动程序实现吗?
谢谢
【问题讨论】:
标签: c++ c windows device-driver
您可以通过文件系统过滤器驱动程序执行此操作。但是您可以通过实现系统范围的 API 挂钩来做到这一点。我以前没有尝试过,但您真的不需要费心编写驱动程序并使系统不稳定,以防破坏驱动程序堆栈。
【讨论】:
正如所指出的,您可以使用文件系统过滤器驱动程序(旧版或微型过滤器,基于 fltmgr)。但是,我强烈建议反对系统范围的 API 挂钩。原因很简单:如果您在用户模式下执行此操作,它实际上不会是系统范围的,并且如果您使用 SSDT-hook 或一些热补丁方法,您会冒系统稳定性的风险。另一种选择,尽管与系统范围的挂钩一样阴暗,是入口点窃取。在这种情况下,您使用卷的设备对象(您感兴趣,只需侦听附加通知或在启动时枚举它们)来查找负责它的驱动程序并修改驱动程序对象中的主要功能入口点( Ilho 已经为您指明了正确的方向)。
文件系统过滤器驱动程序是支持的方法来做到这一点。
在最新的 Windows 7 WDK 中,7600.16385.1\src\filesys\miniFilter\minispy 下的示例提供了一个很好的起点。私人迷你过滤器的最大问题是为驾驶员分配一个高度来加载。因为仅使用 任何 高度很可能会导致 BSOD - 在 FSFD 的情况下,您甚至可能会冒数据完整性的风险(尽管内核会介入 BSOD 以防止这种情况发生)。您只需要伪造IRP_MN_QUERY_DIRECTORY - 这是您在处理IRP_MJ_DIRECTORY_CONTROL 主要控制代码时要查找的次要控制代码。只要您不需要允许打开,读取或写入文件等,您可以通过的所有其他人。如何做到这一点可以在7600.16385.1\src\filesys\miniFilter\passThrough 示例源中看到。
【讨论】: