By jingzhongrong
下述过程出自《Windows File System Internals》
首先,关闭所有中断
请求其他的用户节点(在多处理器系统中)停止当前的操作
使用HalDisplayString() 函数答应出错信息
在屏幕上出现蓝色背景的提示,包括BugCheckCode等信息(包括KeBugCheckEx的其他可选参数)
如果有描述BugCheckCode的信息,调用HalDisplayString() 函数显示。
接下来,KeBugCheckEx() 函数会尝试对当前机器状态进行转储。如果有KeBugCheckEx()参数是一个有效的代码地址,那么系统会尝试着打印出包含这个代码地址的映像文件。例程会打印当前执行的操作系统版本并尝试显示已加载的模块列表。能显示多少模块取决于你的显示器所能显示的行数。最后,函数试图转储当前栈,然后停止系统的执行。
上面情况是没有调试器连接到当前系统时系统的操作过程,如果有调试器连接到系统,那么KeBugCheckEx() 函数会通过DbgPrint() 将下面信息显示到调试器:
Fatal System Error: 0x%1X (0x%1X, 0x%1X, 0x%1X, 0x%1X)
之后通过DbgBreakPoint() 函数设置断点进入调试器,此时你将会有机会在上面操作继续执行之前对系统当前状态进行检查,查找出错的原因。并选择是否继续执行上述的操作。