Windows XP 0x0000007E未知原因蓝屏的处理
新的兼容机做系统,用以前精心做好的XP系统克隆,死活蓝屏。 今天想修复安装一下,结果还是不行。出错 STOP 0x0000007E 没有指出详细模块,但安全模式能进。
排除了内存原因,基本就是驱动问题。 于是卸载驱动,停服务,删文件,看日志...均告败。
从下午折腾到晚上。
换了1台机子、查资料最后找windbg ,升级 ,找symbols,找com对接线 最后终于搞定。
闹了半天是处理器驱动搞怪!ft 一直以为是主板或者显卡驱动问题...
----------
蓝屏的原因基本介绍我就不说了,下面总结一下这次蓝屏情况的处理:
微软对0x0000007E解释的原因有这几种:
• 如果在 Windows 安装过程中第一次重新启动后或在安装完成后出现此问题,则可能是计算机没有足够的硬盘空间来运行 Windows。
• 如果在 Windows 安装过程中第一次重新启动后或在安装完成后出现此问题,可能是计算机的 BIOS 与 Windows 不兼容。
• 视频适配器驱动程序不兼容。
• RAM 已损坏。
• 设备驱动程序或系统服务损坏。
• 如果问题与 Win32k.sys 文件相关联,则此问题可能是由第三方远程控制程序导致的。
1 首先 排除硬件原因: 换内存,不超频,如果有一样的机子可以换着试一下...
2 排除显卡问题: 由于这个是集成显卡,新装的XP是可以用的,所以只能怀疑驱动。 进安全模式卸载显卡驱动,甚至删除以前的显卡驱动程序文件
3 排除主板驱动问题: 进安全模式,卸载所有系统相关的驱动...
4 关闭系统服务: 可以在安全模式下面使用msconfig关闭,或者在系统恢复控制台中使用listsvc和disable来关闭服务
5 均不凑效的情况下,只能做系统调试试试了。
总结Windbg确定蓝屏原因的步骤:
准备: Windbg,Symbols File,Com对接线。
蓝屏情况一般使用Windbg来调试,Windbg是Debuging Tools for Windows ,微软出的调试工具。
Windbg可从http://www.microsoft.com/whdc/DevTools/Debugging/default.mspx 下载。目前最新版本是6.5.003.7
调试需要使用对应Windows的符号文件,这个也在上面地址下载。一百多兆,要有点耐心。
Windbg类似于SoftICE非常强大,但这次我们使用的非常简单。
由于蓝屏机器无响应,我们只能通过另外一台计算机进行调试。
准备一根Com对接线,就是两个头都是母头的RS232线,用来连接两台计算机的Com口。 如果找不到,可以使用两个DB9-RJ45的转换头,中间使用双绞线全反连接(就是1-8对应对面的8-1)。这个做网络的用的比较多。
第一步:东西准备好后,在正常的计算机上安装 Windbg,Windows XP SP2(和蓝屏机器系统对应)的符号文件(Symbols),注意要在windbg中File菜单下面配置Symbols Path,要到具体pdb文件目录,比如“C:\XPSymbols\sys;C:\XPSymbols\dll;”要把常用的文件dll,sys,exe等都加上去。然后使用Com对接线将两台计算机的Com1口连接起来。
第二步: 修改蓝屏机子的启动文件boot.ini, 在启动参数中加入 /debug /debugport=com1 /baudrate=115200
比如: multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows XP Professional " /fastdetect /NoExecute=OptIn /debug /debugport=com1 /baudrate=115200
第三步: 在调试机上命令提示符下进入Windbg安装目录,键入 “windbg -k comort=com1,baud=115200 ”,启动Windbg。 或者建立快捷方式将后面的参数带进去。
正常情况下蓝屏机器开始启动Windows后Windbg就会有显示。
Windbg很聪明,一启动,就直接告诉你机器出现系统Exception(信息当时没有拷贝),symbols配好了以后, 起来就提示“Probably caused by : intelppm.sys ( intelppm!ReadMSR+c )”
闹了半天是处理器驱动搞怪!
第四步: 进一步使用 analyze –v来分析。 这是分析蓝屏最直接的命令。
analyze -v 结果
[code:4096fdb5c0]kd> !analyze -v
*******************************************************************************
* *
* Bugcheck Analysis *
* *
*******************************************************************************
SYSTEM_THREAD_EXCEPTION_NOT_HANDLED (7e)
This is a very common bugcheck. Usually the exception address pinpoints
the driver/function that caused the problem. Always note this address
as well as the link date of the driver/image that contains this address.
Arguments:
Arg1: c0000005, The exception code that was not handled
Arg2: fac41750, The address that the exception occurred at
Arg3: fafb4430, Exception Record Address
Arg4: fafb412c, Context Record Address
FAULTING_MODULE: 804d8000 nt
DEBUG_FLR_IMAGE_TIMESTAMP: 41107b37
EXCEPTION_CODE: (NTSTATUS) 0xc0000005 - "0x%08lx"
FAULTING_IP:
intelppm!ReadMSR+c
fac41750 0f32 rdmsr
EXCEPTION_RECORD: fafb4430 -- (.exr fffffffffafb4430)
ExceptionAddress: fac41750 (intelppm!ReadMSR+0x0000000c)
ExceptionCode: c0000005 (Access violation)
ExceptionFlags: 00000000
NumberParameters: 0
CONTEXT: fafb412c -- (.cxr fffffffffafb412c)
eax=00000f00 ebx=00000000 ecx=0000002c edx=00000000 esi=00000000 edi=00000001
eip=fac41750 esp=fafb44f8 ebp=fafb4500 iopl=0 nv up ei pl zr na po nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010246
intelppm!ReadMSR+0xc:
fac41750 0f32 rdmsr
Resetting default scope
DEFAULT_BUCKET_ID: DRIVER_FAULT
BUGCHECK_STR: 0x7E
LAST_CONTROL_TRANSFER: from fac413f6 to fac41750
STACK_TEXT:
fafb4500 fac413f6 0000002c 00000f00 00000f00 intelppm!ReadMSR+0xc
fafb4514 fac41469 00020fc2 078bfbff fafb4570 intelppm!IsP4ProcSpeedStepCapable+0xe
fafb4524 fac414a1 fac43db1 fac43c94 00000001 intelppm!IsProcPStateCapable+0x41
fafb4528 fac43db1 fac43c94 00000001 fac46b1c intelppm!ValidateProcessorCapabilities+0x5
fafb4534 fac46b1c fac439e0 ffbc5820 e195b382 intelppm!InitializeDriver+0x2b
fafb4570 80576548 ffbc5820 fec73000 e18e2a80 intelppm!DriverEntry+0x18c
WARNING: Stack unwind information not available. Following frames may be wrong.
fafb4640 80689770 00000ae0 00000001 00000000 nt!NtWriteFile+0x44a8
fafb469c 80686ad9 00043000 00000000 00000000 nt!IoReportHalResourceUsage+0x172a
fafb483c 80684edd 80084000 00000000 8130cb28 nt!NlsOemLeadByteInfo+0x15c5d
fafb4dac 805c5a06 80084000 00000000 00000000 nt!NlsOemLeadByteInfo+0x14061
fafb4ddc 80541fa2 80684528 80084000 00000000 nt!PsRemoveCreateThreadNotifyRoutine+0x21e
00000000 00000000 00000000 00000000 00000000 nt!KiDispatchInterrupt+0x5a2
FOLLOWUP_IP:
intelppm!ReadMSR+c
fac41750 0f32 rdmsr
SYMBOL_STACK_INDEX: 0
FOLLOWUP_NAME: MachineOwner
SYMBOL_NAME: intelppm!ReadMSR+c
MODULE_NAME: intelppm
IMAGE_NAME: intelppm.sys
STACK_COMMAND: .cxr fffffffffafb412c ; kb
BUCKET_ID: WRONG_SYMBOLS
Followup: MachineOwner[/code:4096fdb5c0]
我们可以通过当前异常所在的模块看到是哪个驱动引起的异常。Stack可以看出来调用情况。 这里面可以清楚地看出来是ReadMSR指令引起的异常,是Intelppm.sys文件。 查这个文件的属性,知道这是Intel处理器的驱动。 兼容机是Sempron的CPU,当然不支持MSR的指令了! 折腾了半天居然是这个低级错误…
第五步:修复起来就出奇地简单了,把Intelppm.sys改名或者删除都可以。重起,一切正常!
总结
Windows蓝屏目前出的不多了,但是个别时候碰见也的确是非常让人心烦。确定蓝屏的原因对于解决非常重要。 在不能简单确定原因的情况下,就需要用到系统调试功能了。这个工作使用Windbg最合适不过了。
上面说了一下未知异常0x0000007E蓝屏的处理以及Windbg来确定原因的步骤,希望对大家有所启发.
URL:
https://www.d4e.org/showthread.php?t=80799
显卡驱动 不对 换一个 应该就可以了