Windows藍屏了怎麼辦?

說到藍屏,可能很多朋友會深惡痛絕,頗多詬病,甚至還有歪詩曰“補丁與漏洞齊飛,死機共藍屏一色”。。。


其實這是一種誤解,藍屏實際上是Windows的"維穩"手段,當發生嚴重故障時,就要壯士斷腕、揮淚斬馬謖。而不能欲蓋彌彰、阻止上訪。以下是盆盆曾經在電梯裏看到的藍屏。嗯,說到電梯,華來四里的程尊華老師曾經和盆盆說過,他小時的理想就是:坐電梯上下樓、坐地鐵上下班。現在完全可以問一句:成功其庶幾乎?


640?tp=webp&wxfrom=5


以下是一個比較著名的Windows藍屏場景,您懂的。。。

640?tp=webp&wxfrom=5


一提到藍屏,印象最深的就是2007年,那一年的TechEd上盆盆正在演示一個demo,正在得意的時候,手一抖,Thinkpad藍屏了,可把盆盆臊了個大紅臉。


藍屏分析


爲啥手一抖,Thinkpad就會藍屏呢?這是什麼鬼?


當時課程結束後,趕緊“祭起”Windbg對藍屏的轉儲文件進行分析。順便插一句,儘管Debug本身需要一定的專業技術,但是很多時候,幾乎不需要什麼Debug的背景知識就可以輕鬆找到根源。


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版本太老了,更新了最新的驅動即可解決問題。


絕知此事


問題到這裏,似乎應該結案了。但是這一刻偶像“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,或者Apsx86.sys這個驅動給iaStor.sys傳遞了錯誤的參數,所以導致iaStor.sys無法處理,不得已而調用了nt!KeBugCheck,而使得Windows系統藍屏。


注意 以上方法僅僅是盆盆的個人猜測,並不一定反映事實,大家姑妄信之。


如果您覺得華來四還不錯,那就微信掃描以下的二維碼關注吧。也可以直接添加微信公衆號:sysinternal

wKiom1UYp7Kw58ZCAABoxNKWhig097.jpg

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章