我为 MS Windows 开发磁盘卷加密驱动程序“xxxx_aes”,其实现类似于 WDM 过滤器驱动程序。它作为“存储卷”类 {71A27CDD-812A-11D0-BEC7-08002BE2092F} 的“LowerFilters = xxxx_aes fvevol rdyboost”安装在系统中。
HKLM\CurrentControlSet\System\Services\xxxx_aes 条目包含:Start=0;类型=1;标签=7;组 =“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_STRING 的地址,其名称为不可访问的引导设备:
kd> dS fffff880009ae7e8
fffff8a0`00370010 "\ArcName\multi(0)disk(0)rdisk(0)"
fffff8a0`00370050 "partition(2)"
它是驱动器“c:\”或\Device\HarddiskVolume2 的别名,已经加密,应该被驱动程序xxxx_aes 挂钩。调用堆栈中的最后一次调用指向“nt”模块函数,而不是任何驱动程序。
如果在 WinDbg 中安装断点“bu nt!PnpInitializeBootStartDriver”(在调用堆栈中找到),则可以获得启动顺序中所有模块的列表(如 (WCHAR**)(@rcx+8) 处的参数):
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.
在加载 disk.sys 后,这里发生了 BSOD。我看到 DriverEntry 调用我的驱动程序,但没有看到 PnP 的 AddDevice 调用。所以,驱动程序真的不起作用。
在这个系统中会发生什么?提前致谢。
PS。我用“swiss-knife”工具制作了 Linux live-CD,包括注册表编辑器“fred”和用于加密卷的 FUSE-driver(读/写)。所以,我可以探索和编辑崩溃的系统..