Windows 磁盘卷原因BSOD 0x7b的筛选器驱动程序

Windows 磁盘卷原因BSOD 0x7b的筛选器驱动程序,windows,windows-7,driver,wdm,Windows,Windows 7,Driver,Wdm,我为MS Windows开发了磁盘卷加密驱动程序“xxxx_aes”,该驱动程序的实现类似于WDM筛选器驱动程序。 它作为“存储卷”类{71A27CDD-812A-11D0-BEC7-08002BE2092F}的“LowerFilters=XXXXAES fvevol rdyboost”安装在系统中 HKLM\CurrentControlSet\System\Services\xxxx\U aes条目包含:开始=0;类型=1;标签=7;Group=“Pnp过滤器”。 正常设备堆栈为: kd>

我为MS Windows开发了磁盘卷加密驱动程序“xxxx_aes”,该驱动程序的实现类似于WDM筛选器驱动程序。 它作为“存储卷”类{71A27CDD-812A-11D0-BEC7-08002BE2092F}的“LowerFilters=XXXXAES fvevol rdyboost”安装在系统中

HKLM\CurrentControlSet\System\Services\xxxx\U aes条目包含:开始=0;类型=1;标签=7;Group=“Pnp过滤器”。 正常设备堆栈为:

kd> !devstack \Device\HarddiskVolume2
!DevObj   !DrvObj            !DevExt   ObjectName
fffffa8015bf43c0  \Driver\volsnap    fffffa8015bf4510  
fffffa8015bf0660  \Driver\rdyboost   fffffa8015bf07b0  
fffffa8015e3d260  \Driver\fvevol     fffffa8015e3d3b0  
fffffa8015ee9030  \Driver\xxxx_aes   fffffa8015ee9180  
fffffa8015be8480  \Driver\volmgr     fffffa8015be85d0  HarddiskVolume2
它可以在XP x32下工作,甚至可以在Win8 x32/x64和Win10 x64下工作。它在某些使用Win7 x64的PC上不起作用,例如在安装另一个驱动程序后(可能是CryptoPro,但不是事实)。 启动BSOD时系统崩溃,出现错误:

BugCheck 7B, {fffff880009ae7e8, ffffffffc0000034, 0, 0}
Probably caused by : ntkrnlmp.exe ( nt!PnpBootDeviceWait+136 )
Followup: MachineOwner
括号中的参数1是UNICODE_字符串的地址,其名称为不可访问的启动设备:

kd> dS fffff880009ae7e8
fffff8a0`00370010  "\ArcName\multi(0)disk(0)rdisk(0)"
fffff8a0`00370050  "partition(2)"
它是驱动器“c:\”或\Device\HarddiskVolume2的别名,已经加密,应该由驱动程序xxxx\u连接。 调用堆栈中的最后一个调用指向“nt”模块函数,而不是任何驱动程序

若在WinDbg中安装断点“bunt!pnpinInitializeBootStartDriver”(可在调用堆栈中找到),则可以获取所有模块的列表 在引导序列中(如(WCHAR**)(@rcx+8)处的参数):

加载disk.sys后,出现了BSOD。我看到DriverEntry呼叫我的司机,但没有看到PnP的AddDevice呼叫。 所以,这个司机真的没有功能

在这个系统中会发生什么?提前谢谢


另外,我用“瑞士刀”工具制作了Linux live CD,包括注册表编辑器“fred”和加密卷的FUSE驱动程序(读/写)。因此,我可以探索和编辑崩溃的系统。

@BradLarsen这是一个编程问题,应该在这里而不是超级用户上提问。如果是编程问题,你需要展示足够的信息,让某人自己重现问题。“让某人自己重现问题”我应该提供我们产品的中间版本和测试许可证密钥。1.我做不到。2.不确定是否有人会重现我的问题。我只是问是否有人遇到过类似的情况并有解决方案。你说问题是在安装了另一个驱动程序之后发生的。您看到他们如何更新Volume device setup类的LowerFilters值了吗?您的驱动程序是否准备好不成为所有过滤器中最低的过滤器?我对这类问题的唯一经验是,应该在引导时加载的驱动程序不存在,这主要是由于将其放入坏的加载顺序组。好的,PnP管理器在加载函数驱动程序和给定设备堆栈的所有筛选器后开始调用
AddDevice
,因此如果其中一个驱动程序的加载顺序组不正确,则整个堆栈可能会初始化得太晚。
RAW, Wdf01000, msiadrv, vdrvroot, pci, partmgr, volmgr, volmgrx, 
pciide, vmihc, mountmgr, vmbus, vsock, atapi, amdxata, FltMgr,
SymDS, FileInfo, SymEFA, CLFSSci, NTFS, KSecDD, CNGehci, pcw, 
Fs_Rec, NDIS, KSecPkg, Tcpip, StorFlt, 
xxxx_aes,
rdyboost, fvevol, volsnap, spldr, Mup, hwpolicy, disk.