文件筛选器驱动程序页面文件

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

它通常是一个传递filter。 它唯一处理的是IRP_MJ_CREATE (实际上不允许某些types的文件/目录访问)。 所有其他IRP和快速I / O请求只传递给底层设备。

除了一件事情,它工作正常。 如果驱动程序在系统启动时加载( SERVICE_SYSTEM_START ) – 因为我不太明白系统页面文件被禁用。 用户login后会显示“性能选项”popup对话框。 虚拟内存分页文件被禁用(这是什么触发这个对话框popup恕我直言)。

如果驱动程序在后期dynamic加载 – 没有明显问题,一切正常。

我试图禁用处理IRP_MJ_CREATE (只是像所有其他请求传递),但没有任何改变。

我明白,通常很难说在没有看到代码的情况下问题出在哪里。 但无论如何,这是一个已知的问题? 我应该检查什么? 这是不是以适当的方式传递某些请求的症状,或者将设备对象附加到卷设备对象的偶然事实可能会导致这样的问题?

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

找到问题的原因。 问题不在于处理快速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 – 即插即用管理器请求处理程序。 文件系统驱动程序需要哪一个。 修复代码后,问题已经消失。

感谢所有担心的人:)