4

我为 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(读/写)。所以,我可以探索和编辑崩溃的系统..

4

0 回答 0