SYSTEM_THREAD_EXCEPTION_NOT_HANDLED 参数

SYSTEM_THREAD_EXCEPTION_NOT_HANDLED 参数

今天登录 Windows 7 时,我的 PC 立即出现 BSOD。使用 WhoCrashed 我得到以下报告:

--

  • 2013 年 2 月 12 日星期二 13:56:20 GMT 您的计算机崩溃
  • 崩溃转储文件:C:\Windows\Minidump\021213-27390-01.dmp
  • 正常运行时间:00:00:25
  • 这可能是由以下模块引起的:ntoskrnl.exe (nt+0x1AA698)
  • 错误检测代码:0x1000007E (0xFFFFFFFFC0000096, 0xFFFFF80003610698, 0xFFFFF8800614C7B8, 0xFFFFF8800614C010)
  • 错误:SYSTEM_THREAD_EXCEPTION_NOT_HANDLED_M
  • 文件路径:执行文件目录:\Windows\system32\ntoskrnl.exe
  • 产品:Microsoft® Windows® 操作系统
  • 公司:微软公司
  • 描述:NT 内核和系统
  • 错误检查描述:这表明系统线程产生了错误处理程序未捕获的异常。

这似乎是典型的软件驱动程序错误,不太可能是由硬件问题引起的。崩溃发生在 Windows 内核中。此问题可能是由目前无法识别的另一个驱动程序引起的。

--

现在,我的电脑崩溃/死机过去,我偶尔会在执行某些性能要求高的任务时遇到这种情况,但我认为,问题的原因是我主板上的 RAM 插槽有问题。将该插槽留空后,系统便不会崩溃。

今天它又崩溃了,我还没有更改任何与硬件相关的东西。

我知道我可以通过 Google 来了解这个错误检查代码的含义,但最近我意识到来自某人(具有相同的错误检查/问题)的个人经历更有用,特别是因为这个人可能已经找到了解决方案。

非常感谢!

答案1

在这种情况下,线程遇到了异常

C0000096: STATUS_PRIVILEGED_INSTRUCTION
          Executing an instruction not allowed in current machine mode.

此错误由 CPU 本身引发。某些代码试图执行不允许执行的指令。这可能是由内存损坏引起的;内核代码试图执行垃圾数据。

这种错误确实无法确定。“核心”不应该发生的代码。微软代码中存在软件错误的可能性极小;这时您就会开始寻找其他地方。

  • 第三方驱动程序。内核模式驱动器可以完全访问物理硬件。任何第三方驱动程序(例如视频、声音、网络、USB 3.0、SATA)中的任何杂散错误都可能损坏系统中任何其他东西的代码或数据。下一步:尝试删除新添加的硬件(这样就不会加载某些第三方驱动程序),尝试以安全模式启动(这样就不会加载某些第三方驱动程序),或重新安装 Windows(这样就不会加载某些第三方驱动程序)
  • 坏 RAM如果某个位被翻转,并且它将一个完全良性的指令变成了一个不同的、无效的指令,那么就会出现此错误。下一步:移除 RAM 条,将 RAM 移至其他插槽,解锁 RAM,更换电源
  • 超频。有时超频时会发生非常奇怪的事情。希望每个人都向 Microsoft 发送他们的崩溃转储;因为 Microsoft 确实会调查它们。他们会遇到的一个常见错误是当 CPU 执行指令时:

    xor eax, eax;
    

    这是 CPU 可以执行的一个非常简单的操作;它只是将内部 CPU 寄存器设置EAX为零。没有方式它可能会失败;除非你超频或出现其他物理问题。

tl;dr:如果您已经消除了软件,那么就该考虑硬件了。

更新:故障排除方法

我想提一下我在查看这个错误时几乎不假思索地经历的细节。

第一个是实际的错误检查代码:

0x1000007E - SYSTEM_THREAD_EXCEPTION_NOT_HANDLED_M

在 Google 上搜索,会找到 Microsoft 文档页面

错误检查 0x1000007E:SYSTEM_THREAD_EXCEPTION_NOT_HANDLED_M

这表明系统线程产生了错误处理程序未捕获的异常。

从开发人员的经验来看,如果我的应用程序(或其某个线程)遇到“例外”,而我没有“处理“异常,Windows 最终将通过终止应用程序来处理它。如果在内核模式下发生未处理的异常,操作系统别无选择,只能通过关闭内核来处理它。我感兴趣的是哪个 例外被抛出。我假定(结果错了)这是一个“访问冲突”

我知道所有错误检查都附带四个参数,描述实际发生的情况:

  • 参数 1:0xFFFFFFFFC0000096
  • 参数2:0xFFFFF80003610698
  • 参数 3:0xFFFFF8800614C7B8
  • 参数 4:0xFFFFF8800614C010

但是这些到底是什么意思?!这时我们回到文档页面,它没有描述它们。但它说:

错误检查 0x1000007E 的含义和参数与错误检查 0x7E(SYSTEM_THREAD_EXCEPTION_NOT_HANDLED)。

非常好。另一个页面记录了这些参数:

SYSTEM_THREAD_EXCEPTION_NOT_HANDLED 参数

蓝屏上出现以下参数。

  • 参数1:未处理的异常代码
  • 参数2:发生异常的地址
  • 参数3:异常记录的地址
  • 参数4:上下文记录的地址

这就是我想要的,未处理的异常代码。在您的情况下,这是异常代码:

0xFFFFFFFFC0000096

根据经验,我知道您正在运行 64 位 Windows,因为该代码长度为 64 位。实际上我只想要低 32 位:

0xC0000096

通常情况下,我本以为会在winerror.h开发目录中找到该错误代码;但它不在那里。我花了一些时间搜索,但我发现搜索以下内容:

错误 C0000096

带我到葡萄酒之家,声明常量:

STATUS_PRIVILEGED_INSTRUCTION = 0xC0000096

狂欢不断引领我规范的 Microsoft 文档页面

硬件异常

STATUS_PRIVILEGED_INSTRUCTION:执行当前机器模式下不允许的指令。

我也知道这个异常是由CPU抛出的本身我知道是因为“特权指令”意味着你试图执行一个不允许的 CPU 指令。我也能知道这一点,因为该页面被称为硬件异常

因此,我们现在处于这样的情况:一些代码正在运行,试图执行一条不该执行的 CPU 指令。有两种可能性:

  • 内存已损坏;软件并未尝试执行该代码,但该代码最终还是进入了 RAM
  • 它确实是一个有缺陷的软件,它试图做一些不允许的事情。

鉴于微软的代码每天都在数百万台机器上进行现场测试,因此更有可能的是:

  • 硬件有问题
  • 其他人的代码中的错误导致了问题

无论如何,那是如何我处理了那个错误检查。也许通过了解我是如何解决的,它可以帮助您在下次进行错误检查时。

相关内容