4注意事項
1。定期對重要的註冊表文件進行手工備份,避免系統出錯後,未能及時替換成備份文件而產生不可挽回的錯誤。
2。儘量避免非正常關機,減少重要文件的丟失。如,VxD ,DLL文件等,硬盤出現損傷或系統引導文件丟失。
3。對普通用戶而言,只要能正常運行,沒有必要去升級顯卡、主板的BIOS和驅動程序,避免升級造成的危害。
4。定期檢查優化系統文件,運行“系統文件檢查器”進行文件丟失檢查及版本校對。檢查步驟參見前面相關介紹。
5。減少無用軟件的安裝,儘量不用手工卸載或刪除程序,以減少非法替換文件和文件指向錯誤的出現。
6。如果不是內存特別大和其管理程序非常優秀,儘量避免大程序的同時運行,如果你發現在聽MP3時有沙沙拉拉的聲音,基本可以判定該故障是由內存不足而造成的。
7。定期用殺毒軟件進行全盤掃描,清除病毒。
8。不上一些不熟悉的網站,對於一些網站上的帶有誘惑性的圖片和一些中獎的消息,不要點擊。
9。定期升級操作系統,軟件和驅動。
5程序代碼
5.1代碼表
1 0×00000001 不正確的函數。
2 0×00000002 系統找不到指定的檔案。
3 0×00000003 系統找不到指定的路徑。
4 0×00000004 系統無法開啟檔案。
5 0×00000005 拒絕存取。
6 0×00000006 無效的代碼。
7 0×00000007 儲存體控制區塊已毀。
8 0×00000008 儲存體空間不足,無法處理這個指令。
9 0×00000009 儲存體控制區塊地址無效。
10 0×0000000A 環境不正確。
11 0×0000000B 嘗試加載一個格式錯誤的程序。
12 0×0000000C 存取碼錯誤。
13 0×0000000D 資料錯誤。
14 0×0000000E 儲存體空間不夠,無法完成這項作業。
15 0×0000000F 系統找不到指定的磁盤驅動器。
16 0×00000010 無法移除目錄。
17 0×00000011 系統無法將檔案移到其它的磁盤驅動器。
18 0×00000012 沒有任何檔案。
19 0×00000013 儲存媒體為寫保護狀態。
20 0×00000014 系統找不到指定的裝置。
21 0×00000015 裝置尚未就緒。
22 0×00000016 裝置無法識別指令。
23 0×00000017 資料錯誤(cyclic redundancy check)
24 0×00000018 程序發出一個長度錯誤的指令。
25 0×00000019 磁盤驅動器在磁盤找不到持定的扇區或磁道。
26 0×0000001A 指定的磁盤或磁盤無法存取。
27 0×0000001B 磁盤驅動器找不到要求的扇區。
28 0×0000001C 打印機沒有紙。
29 0×0000001D 系統無法將資料寫入指定的磁盤驅動器。
30 0×0000001E 系統無法讀取指定的裝置。
31 0×0000001F 連接到系統的某個裝置沒有作用。
32 0×00000020 該進程無法訪問文件,因為它正由另一個進程使用。
33 0×00000021 檔案的一部份被鎖定,現在無法存取。
34 0×00000022 磁盤驅動器的磁盤不正確。請將%2 (Volume Serial Number: %3) 插入磁盤機%1。
35 0×00000024 開啟的分享檔案數量太多。
36 0×00000026 到達檔案結尾。
37 0×00000027 磁盤已滿。
38 0×00000032 不支持這種網絡要求。
39 0×00000033 遠程計算機無法使用。
40 0×00000034 網絡名稱重複。
41 0×00000035 網絡路徑找不到。
42 0×00000036 網絡忙碌中。
43 0×00000037 指定的網絡資源或設備不可再用。
44 0×00000038 網絡BIOS命令限制已經達到
45 0×00000039 網絡配接卡發生問題。
46 0×0000003A 指定的服務器無法執行要求的作業。
47 0×0000003B 網絡發生意外錯誤。
48 0×0000003C 遠程配接卡不兼容。
49 0×0000003D 打印機隊列已滿。
50 0×0000003E 服務器的空間無法儲存等候打印的檔案。
51 0×0000003F 等候打印的檔案已經刪除。
52 0×00000040 指定的網絡名稱無法使用。
53 0×00000041 拒絕存取網絡。
54 0×00000042 網絡資源類型錯誤。
55 0×00000043 網絡名稱找不到。
56 0×00000044 超過區域計算機網絡配接卡的名稱限制。
57 0×00000045 超過網絡BIOS 作業階段的限制。
58 0×00000046 遠程服務器已經暫停或者正在起始中。
59 0×00000047 由於聯機數目已達上限,此時無法再聯機到這臺遠程計算機。
60 0×00000048 指定的打印機或磁盤裝置已經暫停作用。
61 0×00000050 檔案已經存在。
62 0×00000052 無法建立目錄或檔案。
63 0×00000053 INT 24 失敗
64 0×00000054 處理這項要求的儲存體無法使用。
65 0×00000055 近端裝置名稱已經在使用中。
66 0×00000056 指定的網絡密碼錯誤。
67 0×00000057 參數錯誤。
68 0×00000058 網絡發生資料寫入錯誤。
69 0×00000059 此時系統無法執行其它行程。
使用windows出現藍色屏幕是經常的事,而且每每因為不清楚錯誤的來源而頻繁重新安裝系統,勞神費時。星晴吧收集了一些windows死機密碼,供大家參考。
5.2代碼含義
1,0x0000000A:IRQL_NOT_LESS_OR_EQUAL
◆錯誤分析:主要是由問題的驅動程序、有缺陷或不兼容的硬件與軟件造成的。從技術角度講, 表明在內核模式中有級別進程請求(IRQL)訪問其沒有權限訪問的內存地址。
◇解決方案:請用前面介紹的解決方案中的2、3、5、8、9方案嘗試排除,
2、0x00000012:TRAP_CAUSE_UNKNOWN
◆錯誤分析:如果遇到這個錯誤信息,那麼很不幸, 應為KeBudCheck分析的結果是錯誤原因
未知。
◇解決方案:既然微軟都幫不上忙,就得靠自己了, 請仔細回想這個錯誤是什麼時候出現的; 第一次發生時你對系統做了哪些操作; 發生時正在進行什麼操作, 從這些信息中找出可能的原因,從而選擇相應解決方案嘗試排除。
3、0x0000001A:MEMORY_MANAGEMENT
◆錯誤分析:這個內存管理錯誤往往是由硬件引起的, 比如: 新安裝的硬件、內存本身有問題等,
◇解決方案:如果是在安裝Windows時出現,有可能是由於你的電腦達不到安裝Windows的最小內存和磁盤要求。
4、0x0000001E:KMODE_EXCEPTION_NOT_HANDLED
◆錯誤分析:Windows內核檢查到一個非法或者未知的進程指令,這個停機碼一般是由問題的內存或是與前面0x0000000A相似的原因造成的,
◇解決方案:
⑴硬件兼容有問題:請對照前面提到的最新硬件兼容性列表, 查看所有硬件是否包含在該列表中。
⑵有問題的設備驅動、系統服務或內存衝突和中斷衝突: 如果在藍屏信息中出現了驅動程序的名字,請試著在安裝模式或者故障恢復控制檯中禁用或刪除驅動程序, 並禁用所有剛安裝的驅動和軟件, 如果錯誤出現在系統啟動過程中,請進入安全模式, 將藍屏信息中所標明的文件重命名或者刪除。
⑶如果錯誤信息中明確指出Win32K,sys: 很有可能是第三方遠程控制軟件造成的,需要從故障恢復控制檯中將對該軟件的服務關閉。
⑷在安裝Windows後第一次重啟時出現:最大嫌疑可能時系統分區的磁盤空間不足或BIOS兼容有問題,
⑸如果是在關閉某個軟件時出現的:很有可能時軟件本生存在設計缺陷, 請升級或卸載它。
5、0x00000023:FAT_FILE_SYSTEM
0x00000024:NTFS_FILE_SYSTEM
◆錯誤分析:0x00000023通常發生在讀寫FAT16或者FAT32文件系統的系統分區時,而0x00000024則是由於NTFS,sys文件出現錯誤(這個驅動文件的作用是容許系統讀寫使用。(NTFS文件系統的磁盤), 這兩個藍屏錯誤很有可能是磁盤本身存在物理損壞, 或是中斷要求封包(IRP)損壞而導致的。其他原因還包括:硬盤磁盤碎片過多; 文件讀寫操作過於頻繁,並且數據量非常大或者是由於一些磁盤鏡像軟件或殺毒軟件引起的, ◇解決方案:
第一步:首先打開命令行提示符,運行"Chkdsk /r"(注:不是CHKDISK,感覺象這個, 但是它們所指的內容是不一樣的)命令檢查並修復硬盤錯誤,如果報告存在壞道(Bad Track),請使用硬盤廠商提供的檢查工具進行檢查和修復。
第二步:接著禁用所有即使掃描文件的軟件, 比如:殺毒軟件、防火牆或備份工具,
第三步:右擊C:winntsystem32driversastfat,sys文件並選擇"屬性",查看其版本是否與當前系統所使用的Windows版本相符合。(注:如果是XP,應該是C:windowssystem32driversastfat,sys)
第四步:安裝最新的主板驅動程序,特別IDE驅動, 如果你的光驅、可移動存儲器也提供有驅動程序, 最好將它們升級至最新版。
6、0x00000027:RDR_FILE_SYSTEM
◆錯誤分析:這個錯誤產生的原因很難判斷,不過Windows內存管理出了問題很可能會導致這個停機碼的出現,
◇解決方案:如果是內存管理的緣故, 通常增加內存會解決問題。
7、0x0000002EATA_BUS_ERROR
◆錯誤分析:系統內存存儲器奇偶校驗產生錯誤,通常是因為有缺陷的內存(包括物理內存、二級緩存或者顯卡顯存)時設備驅動程序訪問不存在的內存地址等原因引起的, 另外, 硬盤被病毒或者其他問題所損傷,以出現這個停機碼。
◇解決方案:
⑴檢查病毒
⑵使用"chkdsk /r"命令檢查所有磁盤分區,
⑶用Memtest86等內存測試軟件檢查內存。
⑷檢查硬件是否正確安裝, 比如:是否牢固、金手指是否有汙漬,
8、0x00000035:NO_MORE_IRP_STACK_LOCATIONS
◆錯誤分析:從字面上理解,應該時驅動程序或某些軟件出現堆棧問題。其實這個故障的真正原因應該時驅動程序本生存在問題, 或是內存有質量問題,
◇解決方案:請使用前面介紹的常規解決方案中與驅動程序和內存相關的方案進行排除。
9、0x0000003F:NO_MORE_SYSTEM_PTES
◆錯誤分析:一個與系統內存管理相關的錯誤,比如:由於執行了大量的輸入/輸出操作, 造成內存管理出現問題:有缺陷的驅動程序不正確地使用內存資源; 某個應用程序(比如:備份軟件)被分配了大量的內核內存等,
◇解決方案:卸載所有最新安裝的軟件(特別是哪些增強磁盤性能的應用程序和殺毒軟件)和驅動程序。
10、0x00000044:MULTIPLE_IRP_COMPLIETE_REQUESTS
◆錯誤分析:通常是由硬件驅動程序引起的,
◇解決方案:卸載最近安裝的驅動程序。這個故障很少出現,目前已經知道的是, 在使用這家公司的某些軟件時會出現,其中的罪魁就是Falstaff,sys文件。(作者難道不怕吃官司嘛, 把公司網址公佈)
11、0x00000050: PAGE_FAULT_IN_NONPAGED+AREA
◆錯誤分析:有問題的內存(包括物理內存、二級緩存、顯存)、不兼容的軟件(主要是遠程控制和殺毒軟件)、損壞的NTFS卷以及有問題的硬件(比如: PCI插卡本身已損壞)等都會引發這個錯誤,
◇解決方案:請使用前面介紹的常規解決方案中與內存、軟件、硬件、硬盤等相關的方案進行排除。
如果電腦中安裝有maxdos(或是用maxdos的啟動盤)也可以在命令模式下直接刪除C盤的頁面文件。
12、0x00000051:REGISTRY_ERROR
◆錯誤分析:這個停機碼說明註冊表或系統配置管理器出現錯誤,由於硬盤本身有物理損壞或文件系統存在問題, 從而造成在讀取註冊文件時出現輸入/輸出錯誤,
◇解決方案:使用"chkdsk /r"檢查並修復磁盤錯誤。
13、0x00000058:FTDISK_INTERNAL_ERROR
◆錯誤分析:說明在容錯集的主驅動發生錯誤,
◇解決方案:首先嚐試重啟電腦看是否能解決問題,如果不行, 則嘗試"最後一次正確配置"進行解決。
14、0x0000005E:CRITICAL_SERVICE_FAILED
◆錯誤分析:某個非常重要的系統服務啟動識別造成的,
◇解決方案:如果是在安裝了某個新硬件後出新的,可以先移除該硬件, 並通過網上列表檢查它是否與Windows 2K/XP兼容,接著啟動電腦, 如果藍屏還是出現,請使用"最後一次正確配置"來啟動Windows,如果這樣還是失敗, 建議進行修復安裝或是重裝。
15、0x0000006F:SESSION3_INITIALIZATION-FAILED
◆錯誤分析:這個錯誤通常出現在Windows啟動時,一般是由有問題的驅動程序或損壞的系統文件引起的,
◇解決方案:建議使用Windows安裝光盤對系統進行修復安裝。
16、0x00000076ROCESS_HAS_LOCKED_PAGES
◆錯誤分析:通常是因為某個驅動程序在完成了一次輸入/輸出操作後, 沒有正確釋放所佔有的內存
◇解決方案:
第一步:點擊開始-->;運行:regedt32,找到[HKLMSYSTEMCurrentcontrol setcontrolsession managermemory management],在右側新建雙字節值"TrackLockedPages",值為1, 這樣Windows便會在錯誤再次出現時跟蹤到是哪個驅動程序的問題。第二步:如果再次出現藍屏, 那麼錯誤信息會變成:STOP:0x0000000CB(0xY,0xY,0xY,0xY)DRIVER_LEFT_LOCKED_PAGES_IN_PROCESS其中第四個"0xY"會顯示為問題驅動程序的名字, 接著對其進行更新或刪除,第三步:進入註冊表,刪除添加的"TrackLockedPages",
17、0x00000077:KERNEL_STACK_INPAGE_ERROR
◆錯誤分析:說明需要使用的內核數據沒有在虛擬內存或物理內存中找到。這個錯誤常常是磁盤有問題, 相應數據損壞或受到病毒侵蝕,
◇解決方案:使用殺毒軟件掃描系統; 使用"chkdsk /r"命令檢查並修復磁盤錯誤,如不行則使用磁盤廠商提供的工具檢查修復。
18、0x0000007A:KERNEL_DATA_INPAGE_ERROR
◆錯誤分析:這個錯誤往往是虛擬內存中的內核數據無法讀入內存造成的, 原因可能是虛擬內存頁面文件中存在壞簇病毒、磁盤控制器出錯、內存有問題。
◇解決方案:首先用升級為最新病毒庫殺毒軟件查殺病毒, 如果信息中還有0xC000009C或0xC000016A代碼,那麼表示是壞簇造成的, 並且系統的磁盤檢測工具無法自動修復,這時要進入"故障恢復控制檯",用"chkdsk /r"命令進行手動修復,
19、0x0000007B:INACESSIBLE_BOOT_DEVICE
◆錯誤分析:Windows在啟動過程中無法訪問系統分區或啟動卷。一般發生在更換主板後第一次啟動時, 主要是因為新主板和舊主板的IDE控制器使用了不同芯片組造成的, 有時也可能是病毒或硬盤損傷所引起的。
◇解決方案:一般只要用安裝光盤啟動電腦,然後執行修復安裝即可解決問題, 對於病毒則可使用DOS版的殺毒軟件進行查殺(有kv2005DOS版下載), 如果是硬盤本身存在問題, 請將其安裝到其他電腦中,然後使用"chkdsk /r"來檢查並修復磁盤錯誤。如果是BIOS設置問題,只要將BIOS設置IDE模式即可,
20、0x0000007E:SYSTEM_THREAD_EXCEPTION_NOT_HANDLED
◆錯誤分析:系統進程產生錯誤,但Windows錯誤處理器無法捕獲。其產生原因很多, 包括:硬件兼容性、有問題的驅動程序或系統服務、或者是某些軟件,
◇解決方案:請使用"事件查看器"來獲取更多的信息,從中發現錯誤根源。(發現好像不是解決哦, 看來這裡大家要自力更生了!)
21、0x0000007F:UNEXPECTED_KERNEL_MOED_TRAP
◆錯誤分析:一般是由於有問題的硬件(比如:內存)或某些軟件引起的, 有時超頻也會產生這個錯誤。
◇解決方案:用檢測軟件(比如:Memtest86)檢查內存,如果進行了超頻, 請取消超頻, 將PCI硬件插卡從主板插槽拔下來,或更換插槽。另外, 有些主板(比如:nForce2主板)在進行超頻後,南橋芯片過熱也會導致藍屏, 此時為該芯片單獨增加散熱片往往可以有效解決問題,
22、0x00000080:NMI_HARDWARE_FAILURE
◆錯誤分析:通常是有硬件引起的。(似乎藍屏與硬件錯誤有不解之緣)
◇解決方案:如果最近安裝了新硬件,請將其移除, 然後試試更換插槽和安裝最新的驅動程序,如果升級了驅動程序, 請恢復後原來的版本; 檢查內存金手指是否有汙染和損壞; 掃描病毒; 運行"chkdsk /r"檢查並修復磁盤錯誤; 檢查所有硬件插卡已經插牢, 如果以上嘗試都無效果,就得找專業的電腦維修公司請求幫助了。
23、0x0000008E:KERNEL_MODE_EXCEPTION_NOT_HANDLED
◆錯誤分析:內核級應用程序產生了錯誤, 但Windows錯誤處理器沒有捕獲, 通常是硬件兼容性錯誤。
◇解決方案:升級驅動程序或升級BIOS,
24、0x0000009C:MACHINE_CHECK_EXCEPTION
◆錯誤分析:通常是硬件引起的。一般是因為超頻或是硬件存在問題(內存、CPU、總線、電
源),
◇解決方案:如果進行了超頻,請降下CPU原來頻率,檢查硬件。
25、0x0000009DRIVER_POWER_STATE_FAILURE
◆錯誤分析:往往與電源有關係, 常常發生在與電源相關的操作,比如:關機、待機或休睡,
◇解決方案:重裝系統, 如果不能解決,請更換電源。
26、0x000000A5:ACPI_BIOS_ERROR
◆錯誤分析:通常是因為主板BIOS不能全面支持ACPI規範,
◇解決方案:如果沒有相應BIOS升級, 那麼可在安裝Windows 2K/XP時,當出現"press F6 if you need to install a third-party SCSI or RAID driver"提示時, 按下F7鍵,這樣Windows便會自動禁止安裝ACPI HAL,而安裝Standard PC HAL,
27、0x000000B4:VIDEO_DRIVER_INIT_FAILURE
◆錯誤分析:這個停止信息表示Windows因為不能啟動顯卡驅動, 從而無法進入圖形界面, 通常是顯卡的問題,或者是存在與顯卡的硬件衝突(比如:與並行或串行端口衝突),
◇解決方案:進入安全模式查看問題是否解決, 如果可以,請升級最新的顯卡驅動程序, 如果還不行,則很可能是顯卡與並行端口存在衝突, 需要在安全模式按下WIN+break組合鍵打開"系統屬性",在硬件-->;設備管理器中找到並雙擊連接打印的LPT1端口的選項, 在"資源"選項卡中取消"使用自動配置"的勾選,然後將"輸入/輸出範圍"的"03BC"改為"0378",
28、0x000000BE:ATTEMPTED_WRITE_TO_READONLY_MEMORY
◆錯誤分析:某個驅動程序試圖向只讀內存寫入數據造成的。通常是在安裝了新的驅動程序, 系統服務或升級了設備的固件程序後,
◇解決方案:如果在錯誤信息中包含有驅動程序或者服務文件名稱,請根據這個信息將新安裝的驅動程序或軟件卸載或禁用。
29、0x000000C2:BAD_POOL_CALLER
◆錯誤分析:一個內核層的進程或驅動程序錯誤地試圖進入內存操作, 通常是驅動程序或存在BUG的軟件造成的。
◇解決方案:請參考前面介紹的常規解決方案相關項目進行排除,
30、0x000000CERIVER_UNLOADED_WITHOUT_CANCELLING_PENDING_OPERATIONS
◆錯誤分析:通常是由有問題的驅動程序或系統服務造成的。
◇解決方案:請參考前面介紹的常規解決方案相關項目進行排除,
31、0x000000D1RIVER_IRQL_NOT_LESS_OR_EQUAL
◆錯誤分析:通常是由有問題的驅動程序引起的(比如羅技鼠標的Logitech MouseWare 9,10和9,24版驅動程序會引發這個故障), 同時,有缺陷的內存、損壞的虛擬內存文件、 某些軟件(比如多媒體軟件、殺毒軟件、備份軟件、DVD播放軟件)等也會導致這個錯誤。
◇解決方案:檢查最新安裝或升級的驅動程序(如果藍屏中出現"acpi,sys"等類似文件名,可以非常肯定是驅動程序問題)和軟件; 測試內存是否存在問題; 進入"故障恢復控制檯",轉到虛擬內存頁面文件Pagefile,sys所在分區, 執行"del pagefile,sys"命令,將頁面文件刪除; 然後在頁面文件所在分區執行"chkdsk /r"命令;進入Windows後重新設置虛擬內存。如果在上網時遇到這個藍屏, 而你恰恰又在進行大量的數據下載和上傳(比如:網絡遊戲、BT下載),那麼應該是網卡驅動的問題, 需要升級其驅動程序,
32、0x000000EA:THREAD_STUCK_IN_DEVICE_DRIVER
◆錯誤分析:通常是由顯卡或顯卡驅動程序引發的。
◇解決方案:先升級最新的顯卡驅動,如果不行, 則需要更換顯卡測試故障是否依然發生,
33、0x000000ED:UNMOUNTABLE_BOOT_VOLUME
◆錯誤分析:一般是由於磁盤存在錯誤導致的,有時也建議檢查硬盤連線是否接觸不良, 或是沒有使用合乎該硬盤傳輸規格的連接線,例如ATA-100仍使用ATA-33的連接線, 對低速硬盤無所謂,但高速硬盤(支持ATA-66以上)的要求較嚴格, 規格不對的連線有時也會引起這類沒辦法開機的故障。如果在修復後,還是經常出現這個錯誤, 很可能是硬盤損壞的前兆,
◇解決方案:一般情況下,重啟會解決問題, 不管怎麼樣都建議執行"chkdsk /r"命令來檢查修復硬盤
34、0x000000F2:HARDWAREINTERRUPT_STORM
◆錯誤分析:內核層檢查到系統出現中斷錯誤,比如:某個設備在完成操作後沒有釋放所佔用的中斷。通常這是由缺陷的驅動程序造成的,
◇解決方案:升級或卸載最新安裝的硬件驅動程序。
35、0x00000135:UNABLE_TO_LOCATE_DLL
◆錯誤分析:通常表示某個文件丟失或已經損壞, 或者是註冊表出現錯誤,
◇解決方案:如果是文件丟失或損壞,在藍屏信息中通常會顯示相應的文件名, 你可以通過網絡或是其他電腦找到相應的文件,並將其複製到系統文件夾下的SYSTEM32子文件夾中。如果沒有顯示文件名, 那就很有可能是註冊表損壞,請利用系統還原或是以前的註冊表備份進行恢復,
36、0x0000021A:STATUS_SYSTEM_PROCESS_TERMINATED
◆錯誤分析:用戶模式子系統, 例如Winlogon或客服服務運行時子系統(CSRSS)已損壞,所以無法再保證安全性, 導致系統無法啟動。有時,當系統管理員錯誤地修改了用戶帳號權限, 導致其無法訪問系統文件和文件夾,
◇解決方案:使用"最後一次正確的配置",如果無效, 可使用安裝光盤進行修復安裝。
37、STOP 0xC0000221 or STATUS_IMAGE_CHECKSUM_MISMATCH
◆錯誤分析:通常是由於驅動程序或系統DLL文件損壞造成的, 一般情況下,在藍屏中會出現
文件名稱
,sys文件
⒊ 將其重命名,如:XXXintelppm,sys
⒋ 重啟。
1、運行在內核模式下的設備驅動程序或者操作系統函數引發了一個未被處理的異常,比如內存訪問違例(由於企圖寫一個只讀頁面或者企圖讀一個當前未被映射的內存地址(即無效地址)而引起)。
2、調用一個內核支持例程導致了重新調度,比如當中斷請求級別(IRQL)為DPC/Dispatch級別或更高級別時等待一個標記為需要等待的調度對象。
3、在DPC/Dispatch級別或更高的IRQL級別時由於數據存在於頁面文件或內存映射文件中而發生了頁面錯誤(Page Fault)。(這將要求內存管理器必須等待一個I/O操作發生。但正如上面一項所說,在DPC/Dispatch級別或更高IRQL級別上不能夠進行等待,因為那將要求一次重新調度)。
4、當檢測到一個內部狀態表明數據已遭受破壞或者在保證數據不被破壞的情況下系統無法繼續執行時,設備驅動程序或操作系統函數明確地要求系統崩潰(通過調用系統函數KeBugCheckEx)。
5、發生硬件錯誤,比如處理器的計算機檢查異常功能(Machine Check)報告有異常或者發生不可屏蔽中斷(NMI)。
在瞭解以上三點知識之後,相信您對Windows的大無畏犧牲精神會有所讚賞,也會原諒它的“藍臉”了。其實,在絕大多數情況下均是第三方設備驅動程序導致了Windows的崩潰。對於Windows XP用戶提交給微軟在線崩潰分析(Microsoft OCA,Microsoft Online Crash Analysis)站點的內存轉儲文件,微軟對引起崩潰的原因進行了統計分類。
5.3WinDbg
WinDbg是免費軟件,其下載地址參考擴展閱讀,具體項目為Install Debugging Tools for Windows 32/64-bit Version。
使用WinDbg分析崩潰時的內存轉儲文件的前提是您要讓系統在崩潰時自動生成一個內存轉儲文件,做法如下:
1,單擊開始,然後單擊運行。
2,鍵入 control sysdm,cpl
,然後單擊確定。您將會打開系統屬性,請切換到高級選項卡。結果如下圖所示:
3,在高級選項卡上,在啟動和故障恢復部分中單擊設置。這將打開啟動和故障恢復對話框,如下圖所示:
4,在寫入調試信息列表中,選擇“小內存轉儲(64 KB)”或“核心內存轉儲”,這樣系統在崩潰時將會自動生成對應的內存轉儲文件。如果您不想讓藍屏只閃爍一下,而是想看清楚它直到您手動重新啟動計算機,請清除系統失敗部分中自動重新啟動(R)項目前的複選框。然後單擊確定。
5,在啟動和故障恢復對話框中,單擊確定。
6,單擊確定關閉系統屬性對話框。
7,在系統設置更改對話框中,如果要立即重新啟動計算機,則單擊是;如果要稍後重新啟動計算機,則單擊否。
注:?
Vista用戶請類似操作。對於原版操作系統,以上設置是默認的(除了禁止自動重新啟動)。對於第4點中的寫入調試信息列表內容,現給出以下參照釋義:
(以上三種轉儲文件的大小依次增大,關於三者的比較不在本文討論範圍之內,筆者僅推薦設置為“小內存轉儲”或者“核心內存轉儲”,一般性錯誤“小內存轉儲”就足夠了,如不能完好分析請選擇“核心內存轉儲”。為了數據的豐富性,您也可以直接選擇“核心內存轉儲”,但筆者強烈不推薦完全內存轉儲。)
值得注意的是,為了確保崩潰時自動生成內存轉儲文件,您可能還須啟用虛擬內存頁面文件。特別地,當您選擇記錄核心內存轉儲時,您必須啟用虛擬內存頁面文件,而且由於核心內存轉儲文件的大小取決於該機器上操作系統和所有活動驅動程序已經分配的內核模式內存的數量,因此沒有很好的辦法來預測內核內存轉儲的大小。下表僅給出該情況下的參考虛擬內存大小設置值:
另外,除了頁面文件佔用的磁盤空間,內存轉儲文件(*,DMP)的生成位置所在的磁盤還要有足夠的空閒空間來提取這個轉儲文件,否則一樣會“生成不了”(實際上是丟失了)。
設置好這些之後,一旦您的系統發生藍屏崩潰,系統就會在以上設置中選中的相應內存轉儲文件類型下對應的目錄處生成轉儲文件。您所要做的就是立刻拿出利器——啟動WinDbg進行分析。
筆者在此將結合一個實例進行詳細說明,過程中包含了WinDbg調試藍屏用到的一些命令,這些命令將不再額外整理,請於閱讀過程中注意識記。
注意事項
首先,您要配置WinDbg將要使用的調試符號文件(Symbol File)的位置。什麼是調試符號文件呢?符號文件隨DLL文件或者EXE文件建立時產生,提供包含在可執行文件和動態鏈接庫(DLL) 中的函數的佔位空間。此外,符號文件還可以表示達到失敗點的函數調用路線圖。當我們使用各種Microsoft工具調試應用程序時,必須擁有符號信息,這樣才能正確分析出問題根源。那我們該如何設置調試符號文件的位置呢?我們既可以從微軟官網下載完整的符號文件包(同位於WinDbg下載頁面),也可以使用微軟的符號文件服務器(Microsoft Symbol Server)。筆者推薦後者,因為一次分析所要用到的符號文件侷限於有限的幾個而已,使用後者可以讓程序自動下載,既節省時間,又可以確保符號文件是最新的並且是正確的。在WinDbg中點擊“File”菜單,選擇“Symbol File Path …”,在打開的對話框中輸入
後點擊“OK”按鈕即可。當然,還有一步就是再次點擊“File”菜單,選擇“Save Workspace”來保存當前的設置。
設置了符號文件之後,您就可以進行內存轉儲文件的分析了。同樣點擊“File”菜單,這次要選擇“Open Crash Dump …”,然後通過文件打開對話框打開生成的待分析的內存轉儲文件。本例中設置的是核心內存轉儲類型,於是應該定位至“%SystemRoot%”(即系統盤Windows文件夾下),打開MEMORY,DMP文件。但是筆者已經事先將其轉移至“E:Memory DumpMEMORY,DMP”,因此在後續的圖片中,您看到的是這個地址。此時WinDbg會滾動顯示一些信息並且會稍有掛起的感覺,直到從微軟符號文件服務器下載完分析這個崩潰文件所需要的所有符號文件。
特殊情況下WinDbg調試分析
最後,我們來看看以下的兩種特殊情況該如何使用WinDbg進行調試分析:
第一種情況是系統掛起,也就是“死機”、“系統沒有響應”,在這種情況下,系統是根本無法自動生成內存轉儲文件的,而且您也不可能操作本地軟件來查明是什麼掛起了系統,這個時候我們需要手動讓系統崩潰,以生成內存轉儲文件。具體做法為,在系統掛起之前,打開註冊表編輯器並定位至
HKEY_LOCAL_MACHINESystemCurrentControlSetServicesi8042prtParameters
,在該項下面建立一個名為
CrashOnCtrlScroll
的DWORD類型鍵值(注意大小寫),並將其設置為1,然後重新啟動應用此更改。一旦系統掛起,就可以通過按住右邊Ctrl鍵的同時擊ScrollLock鍵兩次來生成一個停止代碼為0x000000E2(MANUALLY_INITIATED_CRASH)的手動崩潰。得到內存轉儲文件以後按照上面的方法分析。注意,此方法對插入USB口的USB鍵盤無效。(筆記本計算機鍵盤很多都是通過PS/2接口連接的,因此有效)
第二種情況是進不了系統就自動崩潰,無法提取出內存轉儲文件。這種情形以及當有特定的需要時,我們都可以採取雙機調試的方法。我們將發生崩潰的機器稱為“目標機”,將用來連接到“目標機”進行調試的機器稱為“調試主機”,調試主機必須安裝有WinDbg。
首先,我們需要在兩臺機器間建立連接,在新版的WinDbg中,這裡一共有三種方式連接到目標機。第一種方式為通過COM端口連接,使用零調制解調器線纜(Null-Modem),也就是COM對接線——兩個頭都是孔的RS232線;第二種是利用IEEE 1394線纜連接,但是這種連接要求兩臺機器運行相同版本的至少為Windows XP的系統;第三種方式是使用特製的USB 2,0調試線纜連接,這不是普通的USB連接線,是一種內置硬件芯片來支持調試的線纜,而且這種方式要求目標機運行的系統至少為Windows Vista。使用這三種連接方式進行雙機調試都需要在目標機上作出相應的設置調整,具體參見WinDbg幫助文件,這裡僅討論第一種連接方式的設置,因為這是XP及以上系統默認支持的最簡單的方式。此時我們假設已經使用COM線纜連接好了兩臺機器。
其次,在調試主機上啟動WinDbg,配製好符號文件之後,我們展開“File”菜單,選擇“Kernal Debug…”,這將會打開如下的“Kernal Debugging”對話框:
默認打開的就是COM連接方式的配置頁面。這裡的“Baud Rate(傳輸速率)”以及“Port(端口)”需要根據下一個步驟的操作方式來配置。
最後一步,我們可以啟動目標機,在引導Windows之前按下F8,在啟動菜單中選擇“調試模式”,這樣,傳輸速率被系統默認設為19200,端口也默認被設為COM2,因此上一步驟中應該照此設置後點擊“OK”。關於XP修改Boot,ini、Vista修改Bootcfg的方式啟用指定端口、傳輸速率的調試,請參見WinDbg幫助文件,在此不再贅述。目標機一起動Windows,位於調試主機的WinDbg就能夠有信息的顯示,然後按照本文介紹的方法進行調試。另外,對於上面提到的系統掛起的情況,也可以採用這種雙機調試,並且有新的命令
,crash
強迫目標機在它的本地硬盤驅動器中生成一個崩潰轉儲,當系統重新引導以後就可以提取此轉儲,當然,也可以使用
,dump /m COM,dmp
命令,在調試主機WinDbg所在目錄下生成一個名叫“COM,dmp”的小內存轉儲文件(命令中的文件名可以改成其它的)。