【问题标题】:what type of windows device driver can modify FindFirstFile and FindNextFile?什么类型的windows设备驱动可以修改FindFirstFile和FindNextFile?
【发布时间】:2011-06-02 14:08:33
【问题描述】:

我需要在 windows 下 FindFirstFile 和 FindNextFile 返回的结果中添加一些文件。这可以通过文件系统过滤器驱动程序或什么类型的驱动程序实现吗?

谢谢

【问题讨论】:

    标签: c++ c windows device-driver


    【解决方案1】:

    您可以通过文件系统过滤器驱动程序执行此操作。但是您可以通过实现系统范围的 API 挂钩来做到这一点。我以前没有尝试过,但您真的不需要费心编写驱动程序并使系统不稳定,以防破坏驱动程序堆栈。

    System Wide API Hooking

    API Hooking Revealed

    【讨论】:

    • 感谢@sarat,我更喜欢编写设备驱动程序来使用本机功能,但我没有找到相应的IRP请求!你能指点我吗?
    • 是的,你可以通过拦截ntdll api来做到这一点。特别是,您需要拦截 NtQueryDirectoryFile。请参阅source.winehq.org/source/dlls/kernel32/file.c#L1728 了解 Wine 如何实现 FindFirstFile。我相信这与 Windows 实际所做的非常相似。
    • 你可以使用 IRP_MJ_DIRECTORY_CONTROL 来实现。请查看msdn.microsoft.com/en-us/library/ff548658.aspx 了解更多详细信息。
    • 您可以使用的另一个来源是nektra.com/products/deviare-api-hook-windows,它是一个挂钩 API 的库。它也有广泛的挂钩。最好的方法是开发驱动程序,因为这是您确定一切都会在那里完成的唯一方法。
    【解决方案2】:

    正如所指出的,您可以使用文件系统过滤器驱动程序(旧版或微型过滤器,基于 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 示例源中看到。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-12
      • 2014-05-26
      • 2011-02-26
      • 2020-07-28
      • 1970-01-01
      • 1970-01-01
      • 2013-07-06
      • 2011-09-21
      相关资源
      最近更新 更多