电脑技术学习

启用特殊池解读 0x000000c5 蓝屏

dn001

  百度一下0x000000c5,可得到的结果有 26600 条。但是在绝大多数的结果内,没有人给出了对症下药的合理方案。在我看来,蓝屏发生后,如若想要彻底解决,就不应该去"尝试"各种解决方案,而是使用 WinDbg 一类的利器,直接找到罪魁祸首。

首先,我们来认识一下,什么是常见的 0x000000c5 崩溃。

  值为 0x000000c5的 bug check 其实是 DRIVER_CORRUPTED_EXPOOL。什么意思呢?说明系统尝试以过高的进程 IRQL 级别去访问无效内存。在蓝屏信息中,0x000000c5 后面的括号内还应跟有四个参数,其中第一个表明引用的内存地址,第二个参数表示引用时的 IRQL 级别,第三个参数要么是0要么是1,0表示读取,1表示写入,最后一个参数表示引用该内存的一个地址。

那么,一般有哪些原因引起了该错误呢?

  引起该问题的一般原因为,一定有一个驱动程序损坏了系统的内存池。如果驱动损坏的是小于一个页面大小的分配单元,那么就会引发 0x000000c5 错误;倘若驱动损坏的是很大的区域,那么就会引发 DRIVER_CORRUPTED_MMPOOL 错误,值为 0x000000D0。

我该如何解决?

  我的建议是,一定要启用特殊池!如果不启用特殊池,我们是无法得到真正的罪魁祸首的。而且,对于这个错误的直系、嫡系错误,我都推荐使用特殊池。我手头上暂时没有保存下来的 0x000000c5 内存转储,但是有一个 0x100000C5 DRIVER_CORRUPTED_EXPOOL。下面我展示一下堆栈结果:

  从图中我们可以看见,0x7c90e514并没有得到正确的解析,而且我可以告诉大家,它的地址也不是真实值,而是 WinDbg 根据内存上下文猜解的。此例中,我们就算使用dds adb6ad48命令,再配合dds命令,也只能找到一个微软公司的win32k.sys文件,这显然不是罪魁祸首。为了让我们能够定位出这个杀手驱动,我们不得不使用特殊池。

标签: