我一直在为 WPD(便携式设备)类编写 KMDF 过滤器驱动程序(基于http://www.osronline.com/article.cfm?article=446中的示例)。驱动程序的目的是对设备的块写入请求。
我在注册表中为 WPD 类设置了 UpperFilters,当插入三星 Galaxy S3 时,我能够捕获发送到设备的 WPD IOCTL(当前驱动程序只将请求转发给下一个驱动程序)。到目前为止,一切都很好。
然后我安装了 Samsung Kies 以查看过滤器驱动程序是否仍然有效,但是当我插入设备时,Windows 尝试安装“Samsung Mobile MTP Device”并失败。我试了几次(我确认驱动程序仍然安装,这不是缺少驱动程序的问题)。当我从 UpperFilters 中删除我的驱动程序时,该设备已安装并可以正常工作。当我放回过滤器时,设备无法启动(代码 10)。使用Windbg,我可以看到我的驱动程序启动,设备被添加,然后驱动程序卸载(我不知道中间发生了什么......)
当我试图将它作为一个较低的过滤器时,它又可以正常工作了。
在网上搜索时,我发现使用 WDM 而不是 WDK 时也会发生这种情况。
为什么在这种情况下放置 UpperFilter 会导致设备无法启动?
有没有办法解决它?