2014-02-14 20 views
1

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

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

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

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

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

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

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

回答

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 - 插件和播放管理者请求处理程序。这是文件系统驱动程序所需的。修复代码后,问题消失了。

感谢所有担心:)

相关问题