|
|
|
|
|
|
|
C/C++本地代码调试
帖子发起人: nigel 发起时间: 2009-09-10 16:28 下午 回复: 1
|
帖子排序:
|
|
|
|
2009-09-10, 16:28 下午
|
nigel
注册: 2009-05-20
发 贴: 18
|
读windows internal时遇到的一点疑惑
|
|
|
|
下面是《windows intermal 4》中讲crash dump的一小段内容。
When the system boots, it checks the crash dump options configured by reading the registry
value HKLM\System\CurrentControlSet\Control\CrashControl. If a dump is configured, it
makes a copy of the disk miniport driver used to write to the boot volume in memory and
gives it the same name as the miniport with the word “dump_” prefixed. It also checksums the
components involved with writing a crash dump。
When KeBugCheckEx executes, it checksums the
components again and compares the new checksum with that obtained at the boot. If there’s
not a match, it does not write a crash dump, because doing so would likely fail or corrupt the
disk.
如上所述,我假设一种情况,系统boot时,从注册表中读到的信息是没有设置转储,那么根据上面写的应该不会有计算校验值的过程了。但当系统登录到桌面正常使用后我再去设置,让系统崩溃时产生转储文件,这样(设置完后没有任何睡眠,重启或关机操作)当系统发生崩溃了,执行KeBugCheckEx时在计算checksum时,由于boot时没有计算,那么这时的checksum就没有对象可以比较了。按照这个逻辑推下去也就不会产生dumpfile了。
我想问,是不是在用户设置转储类型,点确定按钮后,系统还会读一次注册表,如果设置了,就按上述过程再做一次计算checksum的动作?
|
|
|
IP 地址: 已记录
|
报告
|
|
|
|
2009-09-12, 10:16 上午
|
格蠹老雷
注册: 2005-12-19
发 贴: 1,303
|
Re: 读windows internal时遇到的一点疑惑
|
|
|
|
你说的非常对,在点确定按扭后,会发起一个系统调用进入内核,然后"重复"进行一系列复杂的转储准备工作.在写"软件调试"时曾经跟踪过这个过程.
BTW, 这个问题是在机场的公共上网电脑上回复的,在这个地方看这样的网站是不是第一次呀?:-)
|
|
|
IP 地址: 已记录
|
报告
|
|
|
|
高端调试 » 软件调试 » C/C++本地代码调试 » Re: 读windows internal时遇到的一点疑惑
|
|
|
|
|
|