欢迎光临 Enjoy IT (ITECN.NET) 登录 | 注册 | 帮助

Lenovo Thinkpad T61奇怪的蓝屏故障和解决办法[BugCheckID:0x00008086]

 

声明

并不表明文中涉及的公司、产品具有任何质量问题,纯粹是一种技术上猜想,而且其中的表述并不一定正确。

正文

Thinkpad向来以质量上乘而受到广大粉丝的追捧。然而哥几个在验机时,发现只要不小心碰一下,或者在膝盖上稍抖动一下,就会蓝屏。蓝屏代码是0x8086(Windows Vista系统),很显然这很不正常,为什么会这样?

蓝屏不是病

很多用户对蓝屏死机深恶痛绝,颇多诟病,甚至还有歪诗曰“补丁与漏洞齐飞,死机共蓝屏一色”...

其实这是一种误解。难道Windows就不能容忍这种错误,而一定要“自杀成仁”?

从理论上来说,Windows确实可以尝试忽略并恢复这种错误。但是这会存在很大的风险,例如硬件设备不能正常工作,如果这时候允许系统继续执行,则可能会导致更加严重的系统冲突,这种错误更加难以进行判断和解决,同时可能会破坏硬盘或者其他外部设备里的数据。

所以Windows的蓝屏死机,可以看成是一种“壁虎断尾”式的自我保护机制,其主要目的是保护操作系统的核心部分不受损坏,同时也能保护存储设备里的宝贵数据,防止系统遭受进一步的破坏。

我的偶像银奎同志曾经说过,Linux也有类似的蓝屏机制,貌似叫做Panic~

蓝屏分析

从朋友那里拿到Minidump文件后,赶紧“祭起”Windbg对其进行分析。顺便插一句,尽管Debug本身需要一定的专业技术,但是很多时候,几乎不需要什么Debug的背景知识就可以轻松找到根源(Root Cause)。

BugCheck 8086, {0, 0, 0, 0}
*** WARNING: Unable to verify timestamp for Apsx86.sys
*** ERROR: Module load completed but symbols could not be loaded for Apsx86.sys
*** WARNING: Unable to verify timestamp for snapman.sys
*** ERROR: Module load completed but symbols could not be loaded for snapman.sys
Probably caused by : iaStor.sys ( iaStor+a44f )

很快就找到原因,驱动iaStor.sys才是罪魁,这是Intel的SATA磁盘驱动器的驱动程序。
 

仔细查看其详细信息:

kd> lmvm iaStor
start    end        module name
824c0000 8257e000   iaStor   T (no symbols)          
    Loaded symbol image file: iaStor.sys
    Image path: iaStor.sys
    Image name: iaStor.sys
    Timestamp:        Tue Feb 13 04:46:47 2007 (45D0D237)
    CheckSum:         0004966D
    ImageSize:        000BE000
    Translations:     0000.04b0 0000.04e0 0409.04b0 0409.04e0

可以看到,时间戳信息是2007年2月13日,而盆盆的机器是同一机型,为什么就不会蓝屏?一看,原来盆盆的iaStor.sys文件是2007年6月6日最新版本。很显然问题机器的iaStor.sys版本太老了,拿最新的iaStor.sys替换C:\WINDOWS\system32\drivers目录下的相同文件就可以解决问题。

绝知此事

问题到这里,似乎应该结案了。但是这一刻有点“Mark Russinovich”灵魂附体,想了解一下为什么轻轻晃动机器就会蓝屏,而平常时候却又貌似正常?

于是查看Debug的堆栈信息,话说这个Dump文件真是好东西,相当于Windows系统的“黑匣子”,可以在里面找到很多有用的信息。

a0ac6898 824ca44f 00008086 87923864 85a0e0e8 nt!KeBugCheck+0x14
WARNING: Stack unwind information not available. Following frames may be wrong.
a0ac68c0 81c27ecf 85a070e8 858f4350 ffcd3ff4 iaStor+0xa44f
a0ac68d8 80669330 ffcd3ff4 a0ac68f8 8066fcc8 nt!IofCallDriver+0x63
a0ac68e4 8066fcc8 85a0f020 858f4350 858f4408 acpi!ACPIDispatchForwardIrp+0x2a
......

a0ac69f8 828a7dc3 87f1d4c0 81cc13cc 00000000 nt!IofCallDriver+0x63
a0ac6a0c 828a8051 87f1d4c0 878b6640 87f1d290 Apsx86+0x1dc3
a0ac6a48 828a7210 01f1d4c0 878b6640 a0ac6a70 Apsx86+0x2051
a0ac6a58 81c27ecf 87f1d4c0 878b6640 878b6810 Apsx86+0x1210
a0ac6a70 81cb06f7 8260511a 00000000 00000000 nt!IofCallDriver+0x63
......

粗体显示的Apsx86就是Lenovo磁盘防震功能(APS)的驱动(Apsx86.sys),由于微软不可能有第三方厂商驱动的Symbol,所以没法显示调用函数和参数(包括iaStor.sys)。

所以只能猜测,当机器晃动时,磁盘防震功能的驱动Apsx86.sys会接到传感器发出的指示,了解到机器的震动状态,就赶紧向系统报告……Windows内核最终会通知用磁盘控制器(iaStor.sys),并停止磁盘转动,这就是Lenovo的APS功能的大概原理猜测,这是一个非常棒的功能。

但是可能是老版本的iaStor.sys驱动存在Bug,导致无法正确处理内核传递过来的参数,所以导致才可能导致Windows系统蓝屏。

注意:以上方法仅仅是盆盆的个人猜测,并不一定反映事实,大家姑妄信之。而且由于是Minidump,没有更详细的资料可供检查,尚无法确定堆栈中出现的ReadyBoost驱动,和蓝屏有没有关系。

解决方法

可以把附件里的驱动文件解压缩,注意一定要检查其数字签名,是否是Intel Corp签发的,否则的话,请立即删除。

然后启动到安全模式下,替换C:\WINDOWS\system32\drivers目录下的老版本iaStor.sys。

对于具有迅盘的机型,也可以直接到Lenovo的网站上下载最新的Intel Turbo Memory(迅盘)的驱动软件包,然后安装,会自动安装最新的iaStor.sys,这样就可以解决问题。

已发表 2007年9月2日 15:54 作者 ahpeng
Attachment(s): iaStor.zip

评论通知

如果您想在帖子更新时接到邮件通知,请先登录。这里

订阅帖子评论使用 RSS

评论

2007年9月2日 17:48 by KeJiaLi

# re: Lenovo Thinkpad T61奇怪的蓝屏故障和解决办法[BugCheckID:0x00008086]

嗯,是有一定道理的,如果能再多一些原理佐证,那就锦上添花了。

顺便说一句,大家从盆盆的系列博客文章中可以看出,盆盆老大的水平越来越厉害了,属于debug级别了,HoHo...

我等晚辈更需要加倍努力之。。。

2007年9月2日 19:55 by ghjconan

# re: Lenovo Thinkpad T61奇怪的蓝屏故障和解决办法[BugCheckID:0x00008086]

赞!

Windbg真是个好工具……

2007年9月2日 20:34 by ahpeng

# re: Lenovo Thinkpad T61奇怪的蓝屏故障和解决办法[BugCheckID:0x00008086]

kejia,你就害我吧!

2007年9月2日 22:14 by aloki

# re: Lenovo Thinkpad T61奇怪的蓝屏故障和解决办法[BugCheckID:0x00008086]

1 Windows的蓝屏死机,可以看成是一种“壁虎断尾”式的自我保护机制

2 话说这个Dump文件真是好东西,相当于Windows系统的“黑匣子”

这两比喻很经典。近来正在学习Debug方面的知识,盆盆的文章刚好可以让我当作一个案例来学习。谢谢了。

2007年9月3日 12:27 by yinjie

# re: Lenovo Thinkpad T61奇怪的蓝屏故障和解决办法[BugCheckID:0x00008086]

盆盆老大现在是鸟枪换炮了哦.

2007年9月3日 17:10 by ahpeng

# re: Lenovo Thinkpad T61奇怪的蓝屏故障和解决办法[BugCheckID:0x00008086]

多谢楼上老大们的支持!

2007年9月4日 0:14 by xjwpg

# re: Lenovo Thinkpad T61奇怪的蓝屏故障和解决办法[BugCheckID:0x00008086]

这篇文章确实可以当做一个DEBUG实例来解读,在此谢谢盆盆老师.

有件事顺便提一下,我在ITECN上以xjwpg为名申请了帐户,但忘了密码.在登录时我输入了注册时的邮箱,想拿回密码,但邮箱里始终没有见到返回的密码,请问这个问题能解决吗?

2007年9月4日 1:56 by ahpeng

# re: Lenovo Thinkpad T61奇怪的蓝屏故障和解决办法[BugCheckID:0x00008086]

To Xjwpg:非常感谢您的光临。我们的Blog系统确实存在这个小Bug,目前您只能新建一个帐户,给您添麻烦,非常抱歉。

2007年9月4日 11:44 by sPhinX

# 借问一下,自己的程序如何提高权限

盆盆老大,借贵地问个问题,我目前在Vista下开发一个程序,因为要在不干扰用户的情况下执行,所以想通过manifest的方式来提升管理员权限。我按照

http://blog.csdn.net/leening/archive/2007/03/07/1523017.aspx

的做法编译了程序,程序本身也出现了小盾牌的记号,

我的理解是只要提升了权限,就不会弹出对话框了,但是现在还是会弹出“用户帐户控制”的对话框,请问是我的理解有误还是我的做法有问题会导致探出对话框呢?

刚刚才开始Vista编程,很多地方不太习惯,还望盆盆老大不吝指教。

2007年9月4日 12:57 by ahpeng

# re: Lenovo Thinkpad T61奇怪的蓝屏故障和解决办法[BugCheckID:0x00008086]

To sPhinX:感谢光临ITECN!

正确的理解应该是这样的:在Manifest里标记提升权限,该程序在运行时,就会弹出UAC对话框。而不是说系统会自动帮助我们提升权限,否则的话,Windows Vista的设计有安全漏洞。

如果没有特殊要求,推荐不要用管理员权限运行,应该尽可能让应用程序在标准帐户下运行。

2007年9月4日 21:51 by sPhinX

# re: Lenovo Thinkpad T61奇怪的蓝屏故障和解决办法[BugCheckID:0x00008086]

盆盆老大的回复真快啊,首先声明我不是要做坏事。呵呵

“在Manifest里标记提升权限,该程序在运行时,就会弹出UAC对话框。”意思是让系统知道你的程序有提升权限的需要,然后自动弹出UAC对话框,等待用户确认之后,然后就提升权限,如果没有这个标记,那么系统不会弹出UAC对话框,而是默认以普通用户的权限来运行程序,那么对于某些需要管理员权限才能执行的操作就可能会失败。这样的理解对吗?

如果是这样的话,那在Vista下就没有办法能够在不打扰用户的情况下执行需要管理员权限的程序了?感觉有些不太方便啊。

BTW:顺便问一本书:Microsoft Press的《Writing Secure Code for Windows Vista》怎么样?属于Vista下编程的必看书吗?请盆盆老大给点评论。

2007年9月5日 13:30 by ahpeng

# re: Lenovo Thinkpad T61奇怪的蓝屏故障和解决办法[BugCheckID:0x00008086]

To sPhinX:

确实如此,要在Windows Vista下执行管理任务,必须经过用户的许可。

当然可以设置组策略,以便自动提升权限(无需用户确认),但是这个应用程序必须具有合法的数字签名。

或者也可以利用Windows服务,创建高特权的进程,也不需要提升权限。

《Writing Secure Code for Windows Vista》是一本好书,这本书的两位作者就是《Writing Secure Code》经典图书的作者,Bill Gates要求微软开发工程师必读。推荐两本都阅读一下。

2007年9月7日 11:01 by XGear

# re: Lenovo Thinkpad T61奇怪的蓝屏故障和解决办法[BugCheckID:0x00008086]

Lenovo好像已经注意到这个问题,正在fix problem.

2007年9月7日 13:07 by ahpeng

# re: Lenovo Thinkpad T61奇怪的蓝屏故障和解决办法[BugCheckID:0x00008086]

To XGear:多谢老大提供消息

2007年9月9日 20:13 by .Leon

# re: Lenovo Thinkpad T61奇怪的蓝屏故障和解决办法[BugCheckID:0x00008086]

高手,能帮手看看这个问题么?

http://forum.51nb.com/thread-581499-1-1.html

如何可以重新做T61 的硬盘?

我想类似普通电脑那样,整个清掉硬盘信息,再装Windows Serve 2003...

谢先!

2007年9月14日 15:18 by nEINEI

# re: Lenovo Thinkpad T61奇怪的蓝屏故障和解决办法[BugCheckID:0x00008086]

分析的好,抽茧拨丝,盆老大,文笔也很好啊。赞一个:)

2007年9月14日 21:29 by ahpeng

# re: Lenovo Thinkpad T61奇怪的蓝屏故障和解决办法[BugCheckID:0x00008086]

To nEINEI:多谢兄弟捧场!

2007年10月2日 3:39 by HorseLuke

# re: Lenovo Thinkpad T61奇怪的蓝屏故障和解决办法[BugCheckID:0x00008086]

谢谢盆盆啊,照猫画葫芦,解决了一个QQ语音聊天蓝屏问题。真的太感谢了!(文章:http://bbs.cfan.com.cn/thread-615610-1-1.html

2007年10月9日 15:31 by Kyle

# re: Lenovo Thinkpad T61奇怪的蓝屏故障和解决办法[BugCheckID:0x00008086]

我的T61还没碰到这个问题。。不过我一直把UAC关着在用Vista。

2007年10月15日 2:29 by sllbaby

# re: Lenovo Thinkpad T61奇怪的蓝屏故障和解决办法[BugCheckID:0x00008086]

我的X61S也发现了这个问题,似乎是从装了迅盘后开始的,不过更新了最新的迅盘驱动也没有效果,不知道还有没有别的可能吗?

2007年10月31日 11:05 by 黎明的风

# re: Lenovo Thinkpad T61奇怪的蓝屏故障和解决办法[BugCheckID:0x00008086]

我的T61也在晃动的时候出现上述蓝屏,更新Intel网站上的最新的迅盘驱动,发现iaStor.sys变成2007-4-25,不是最新的2007-6-6,这个最新的iaStor.sys版本不知道来源于哪里?

2008年1月21日 11:43 by Little K

# re: Lenovo Thinkpad T61奇怪的蓝屏故障和解决办法[BugCheckID:0x00008086]

0X8086不是一个Windows的bugcheck code. 从stack来看, 是iaStor自己call 了Kebugcheck产生蓝屏. 这是驱动自己的行为, 可能是遇到了严重的错误无法进行下去才将系统crash.

Dump本身并不能证明一定是iaStor的问题. iaStor.sys只是IRP stack中一个driver. Apsx86.sys应该是在iaStor.sys上一层. 所以在其处理完IO后, 下一层的驱动iaStor.sys会继续处理. 所以, 不能排除是Apsx86将数据处理坏而导致的问题.

我想新版本的iastor并没有去掉这个hard code的bugcheck.

2008年5月17日 21:18 by Allan Chou

# re: Lenovo Thinkpad T61奇怪的蓝屏故障和解决办法[BugCheckID:0x00008086]

我的Compaq v3643也会出现这个问题,已经蓝屏了几次了,而且我也将驱动程序安装到了最新版本.可还是有时候会出现这个问题.请问还有其他的原因吗?我的iastor.sys文件的修改日期为2007/09/29.

2008年7月3日 12:11 by laozhao

# re: Lenovo Thinkpad T61奇怪的蓝屏故障和解决办法[BugCheckID:0x00008086]

盆盆老大,我的T61也出现了蓝屏的问题,我刚拿到的本本。会不定时的出现蓝屏的情况,然后出现一堆英文,其中“Technical information

 stop:0*0000008E(0#0000005,0*805E25B3,....)

我现在装的系统是windows xp,以前装的是啥不知道,因为是单位发的。

您知道是什么原因吗? 谢谢!

说说您的看法?

(必填) 
必填 
(必填)