fredu
驱动牛犊
驱动牛犊
  • 注册日期2001-10-13
  • 最后登录2002-06-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:997回复:0

蓝屏内幕4

楼主#
更多 发布于:2002-04-19 10:52
Interpreting Stop Codes

In most cases the most useful information provided by a Blue Screen is the stop code and the 4 parameters printed with it. As I stated earlier, these parameters must be interpreted on a per-stop code basis. In this section I’ll provide a mini-stop code reference, covering the ones most commonly encountered, their causes, and how to interpret the parameters listed with them. Note that most of the time only a subset of KeBugCheckEx(...) parameters is used to convey information about a crash.

IRQL_NOT_LESS_OR_EQUAL (0xA)

This is one of my favorites, as I seem to encounter it more often than other types. It is thrown when the kernel or a driver determines that the current IRQL is higher than it’s supposed to be. The epicenter for most of these Bug Checks is in MmAccessFault(...), the Memory Manager’s fault handler. This function is responsible for handling page faults, and it will typically do so silently. But when the IRQL is DISPATCH_LEVEL or higher when it is invoked, it returns a STATUS_IN_PAGE_ERROR to the system page fault dispatcher. The system page fault dispatcher then promptly calls KeBugCheckEx(...) with an IRQL_NOT_LESS_OR_EQUAL.

Another place these Bug Checks can be generated is from the kernel’s worker thread dispatch function, ExpWorkerThread(...). ExpWorkerThread(...) pulls work items off a queue and calls the work routines associated with them. Upon returning from a work routine, it checks the IRQL to make sure it’s PASSIVE_LEVEL (the level it was before the work item was called). If it’s not, it throws an IRQL_NOT_LESS_OR_EQUAL. The parameters for this bug check are shown in Table 1.

IRQL_NOT_LESS_OR_EQUAL (0xA) (from worker thread)
 
Param1 Address of work routine that was called
Param2 IRQL that was invalid
Param3 A copy of Param1  
Param4 Pointer to work item data structure  
IRQL_NOT_LESS_OR_EQUAL (0xA) (from MmAccessFault)
 
Param1 Address that was referenced
Param2 IRQL that was invalid
Param3 Type of access (0 == read, 1 == write)
Param4 Address where reference occurred

Table 1.

KMODE_EXCEPTION_NOT_HANDLED (0x1E)

This code is generated from several places in the kernel, including the system’s exception handler. It occurs when an exception has occurred that the system was not expecting, and not able to handle via any exception handling mechanisms. One example of this occurs when MmAccessFault(...) gets a fault due to an invalid reference to a protected page. For instance, a driver that writes to a read-only page will generate it. Its parameters are shown in Table 2.

KMODE_EXCEPTION_NOT_HANDLED (0x1E)
 
Param1 The exception code (see NTSTATUS.H for more):
0x800000003 Breakpoint hit with no debugger active

0xC00000005 Access violation

最新喜欢:

wujiajunwujiaj...
佛由心生
游客

返回顶部