【问题标题】:file filter driver intereres page file文件过滤器驱动程序感兴趣的页面文件
【发布时间】:2014-02-14 09:42:17
【问题描述】:

我有一个文件过滤器驱动程序,它应该在特定情况下禁止文件/目录访问。 我正在使用IoRegisterFsRegistrationChange 获取有关文件系统更改的通知,并附加到适当的卷设备对象。

它通常是一个直通过滤器。它唯一处理的是IRP_MJ_CREATE(实际上禁止某些类型的文件/目录访问)。所有其他 IRPs 和快速 I/O 请求都只是传递给底层设备。

除了一件事,它工作正常。如果在系统启动期间加载了驱动程序 (SERVICE_SYSTEM_START) - 因为我不太了解系统页面文件被禁用的原因。用户登录后,会显示一个“性能选项”弹出对话框。虚拟内存分页文件被禁用(这是触发此对话框弹出恕我直言的原因)。

如果驱动程序在稍后阶段动态加载 - 没有明显的问题,一切正常。

我尝试禁用IRP_MJ_CREATE 的处理(只是像所有其他请求一样传递它),但没有任何变化。

我知道,如果不查看代码,通常很难说出问题出在哪里。但无论如何,这是一个已知问题吗?我应该检查什么?这是不是以正确的方式传递某些请求的症状,或者甚至将设备对象附加到卷设备对象的事实可能会导致这样的问题?

欢迎所有可能的想法。提前致谢。

【问题讨论】:

    标签: windows filter driver wdk


    【解决方案1】:

    找到问题的原因。问题既不在于处理 Fast-I/O 请求,也不在于我的设备如何连接到目标设备。

    正如所发现的,最终我没有在驱动程序调度表中包含一个 I/O 调度处理程序。也就是说,我的代码是:

    for (UINT i = 0; i < IRP_MJ_MAXIMUM_FUNCTION; i++)
        pDriverObject->MajorFunction[i] = Dispatch;
    

    本来应该是这样的:

    for (UINT i = 0; i <= IRP_MJ_MAXIMUM_FUNCTION; i++)
        pDriverObject->MajorFunction[i] = Dispatch;
    

    我错过的函数是IRP_MJ_PNP - 即插即用管理器请求处理程序。这是文件系统驱动程序所必需的。修改代码后问题消失了。

    感谢所有担心的人:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-11
      • 1970-01-01
      • 2021-08-19
      • 2010-11-03
      • 1970-01-01
      • 2015-03-21
      • 1970-01-01
      相关资源
      最近更新 更多