为啥内核驱动程序在抛出异常时无法更新注册表值?
Posted
技术标签:
【中文标题】为啥内核驱动程序在抛出异常时无法更新注册表值?【英文标题】:why Kernel Driver can not update registry value when it throw an exception?为什么内核驱动程序在抛出异常时无法更新注册表值? 【发布时间】:2017-03-23 09:23:23 【问题描述】:这是一个测试 KMDF 项目。它的功能是读写注册表。
案例1:
1.读取一个注册表值并将一个值写入注册表
2.在windows中检查注册表,更新值。
案例2:
1.读取一个注册表值并写入一个值到注册表,最后添加异常。启动窗口时发生蓝屏
2.删除异常,启动窗口,检查注册表,值没有更新。
这些是我使用的异常代码。
void GoException()
PDRIVER_OBJECT obj = NULL;
obj->DeviceObject->CurrentIrp = NULL;
我尝试了两个注册表路径。
HKEY_LOCAL_MACHINE\SOFTWARE\DELL\test(正常路径)
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TEST(服务路径)
【问题讨论】:
【参考方案1】:注册表项之所以不能更新,是因为开机时需要到一定的时间点才能保存更改。一个驱动出现异常,可能无法保存。
【讨论】:
以上是关于为啥内核驱动程序在抛出异常时无法更新注册表值?的主要内容,如果未能解决你的问题,请参考以下文章
为啥内部异常到达 ThreadException 处理程序而不是实际抛出的异常?