『壹』 請問電腦在使用時經常出現藍屏代碼怎麼解決
藍屏"的硬體原因及解決
"藍屏"現象多和內存大小、CPU頻率、光碟機、硬碟碎片等等關系密切......在計算機的使用過程中,經常會遇到藍屏的情況。對於初學者來講,好象就是一場電腦災難一樣,不知所措。其實只要了解了原因之後就不用怕了。造成計算機藍屏的原因有很多種,硬體方面的原因總體可以概括為以下幾種:
一、屏幕顯示系統忙,請按任意鍵繼續……
1、虛擬內存不足造成系統多任務運算錯誤
虛擬內存是WINDOWS系統所特有的一種解決系統資源不足的方法,其一般要求主引導區的硬碟剩餘空間是其物理內存的2-3倍。而一些發燒友為了充分利用空間,將自己的硬碟塞到滿滿的,忙記了WINDOWS這個苛刻的要求。結果導致虛擬內存因硬碟空間不足而出現運算錯誤,所以就出現藍屏。要解決這個問題好簡單,盡量不要把硬碟塞得滿滿的,要經常刪除一些系統產生的臨時文件、交換文件,從而可以釋放空間。或可以手動配置虛擬內存,選擇高級,把虛擬內存的默認地址,轉到其他的邏輯盤下。這樣就可以避免了因虛擬內存不足而引起的藍屏。
2、CPU超頻導致運算錯誤
超頻對於發燒友來說是常事,所以由超頻所引起的各種故障也就在所難免了。超頻,就本身而言就是在原有的基礎上完成更高的性能,但由於進行了超載運算,造成其內部運算過多,使CPU過熱,從而導致系統運算錯誤。有些CPU的超頻性能比較好,如INTEL的賽揚處理器和AMD-K6-2處理器還算較好的,但有時也會出現一些莫名其妙的錯誤。(例如:我曾試過將INTEL賽揚300A,在超頻到450時,軟碟機在沒有接受命令時,進行讀盤操作)。 INTEL的低於200的CPU以及AMD-K5的超頻能力就不是那麼好。建議高檔的CPU要超頻時,那麼散熱工作一定要做好,最好裝一個大的風扇,再加上一些硅膠之類的散熱材料。至於一些低檔的CPU我建議你就最好不要超頻了,免得超頻達不到預想的效果反而經常出現藍屏影響計算機的正常速度。
二、內存條的互不兼容或損壞引起運算錯誤
這時個最直觀的現象,因為這個現象往往在一開機的時候就可以見到,根本啟動不了計算機,畫面提示出內存有問題,問你是否要繼續。造成這種錯誤是物理上的損壞內存或者內存與其它硬體不兼容所致。這時候只有換過另外的內存了。
三、光碟機在讀盤時被非正常打開所至
這個現象是在光碟機正在讀取數據時,由於被誤操作打開而導致出現藍屏。這個問題不影響系統正常動作,只要再彈入光碟或按ESC鍵就可以。
以上是我在維護計算機中碰到導致藍屏的幾種原因,或許還會有其他一些莫名其妙的問題導致計算機出現藍屏。不管怎樣,遇到這類問題後,應先仔細分析問題發生的原因,然後再著手解決。
四、硬體剩餘空間太小或碎片太多
由於Win9X運行時需要用硬碟作虛擬內存,這就要求硬碟必須保留一定的自由空間以保證程序的正常運行。一般而言,最低應保證100MB以上的空間,否則出現「藍屏」很可能與硬碟剩餘空間太小有關。另外,硬碟的碎片太多,也容易導致「藍屏」的出現。因此,每隔一段時間進行一次碎片整理是必要的。
五、系統硬體沖突
這種現象導致「藍屏」也比較常見。實踐中經常遇到的是音效卡或顯示卡的設置沖突。在「控制面板」→「系統」→「設備管理」中檢查是否存在帶有黃色問號或感嘆號的設備,如存在可試著先將其刪除,並重新啟動電腦,由Win9X自動調整,一般可以解決問題。若還不行,可手工進行調整或升級相應的驅動程序。
"藍屏"的軟體原因及解決
與硬體密切聯系的是軟體,有時軟體在"藍屏"現象中也"功不可沒",載入了過多的程序、注冊表有問題、軟硬不兼容、驅動程序有問題,相對於硬體原因來說要不易察覺些,可要多加註意.........
一、啟動時載入程序過多
不要在啟動時載入過多的應用程序(尤其是你的內存小於64MB),以免使系統資源消耗殆盡。正常情況下,Win9X啟動後系統資源應不低於90%。最好維持在90%以上,若啟動後未運行任何程序就低於70%,就需要卸掉一部分應用程序,否則就可能出現「藍屏」。
二、應用程序存在著BUG
有些應用程序設計上存在著缺陷或錯誤,運行時有可能與Win9X發生沖突或爭奪資源,造成Win9X無法為其分配內存地址或遇到其保護性錯誤。這種BUG可能是無法預知的,免費軟體最為常見。另外,由於一些用戶還在使用盜版軟體(包括盜版Win9X),這些盜版軟體在解密過程中會破壞和丟失部分源代碼,使軟體十分不穩定,不可靠,也常常導致「藍屏」。
三、遭到不明的程序或病毒攻擊所至
這個現象只要是平時我們在上網的時候遇到的,當我們在沖浪的時候,特別是進到一些BBS站時,可能暴露了自己的IP,被"黑客"用一些軟體攻擊所至。對互這種情況最好就是在自己的計算機上安裝一些防禦軟體。再有就是登錄BBS要進行安全設置,隱藏自己IP。
四、版本沖突
有些應用程序需調用特定版本的動態鏈接庫DLL,如果在安裝軟體時,舊版本的DLL覆蓋了新版本的DLL,或者刪除應用程序時,誤刪了有用的DLL文件,就可能使上述調用失敗,從而出現「藍屏」。不妨重新安裝試一試。
五、注冊表中存在錯誤或損壞
很多情況下這是出現「藍屏」的主要原因。注冊表保存著Win9X的硬體配置、應用程序設置和用戶資料等重要數據,如果注冊表出現錯誤或被損壞,就很可能出現「藍屏」。如果你的電腦經常出現「藍屏」,你首先就應考慮是注冊表出現了問題,應及時對其檢測、修復,避免更大的損失。
六、軟硬體不兼容
新技術、新硬體的發展很快,如果安裝了新的硬體常常出現「藍屏」,那多半與主板的BIOS或驅動程序太舊有關,以致不能很好支持硬體。如果你的主板支持BIOS升級,應盡快升級到最新版本或安裝最新的設備驅動程序。
Windows 2000"藍屏"分析與解決篇
Win2000也許可以說得上是一個劃時代的操作系統,但是它仍然不能夠避免藍屏死機(Blue Screen of Death)問題,Win2000的"藍屏"(BSOD)和NT4以前的"藍屏"消息是完全不同的。最大的不同就是NT中的BSOD只包含一個通用的停止消息類型(就是實際的出錯代碼), 但是Win2000的BSOD包含有兩種消息類型:停止消息和硬體消息。停止消息是指,當win2000的內核發現一個它不能夠恢復的軟體錯誤時候產生的錯誤消息,它分為:常規停止消息、安裝停止消息、可執行程序安裝停止消息、軟體陷阱停止消息四種類型......針對Windows2000的藍屏,在上述概括的現象與對策基礎上,我們分兩方面來分析:
Windows 2000中藍屏死機之停止信息分析
簡介:什麼是藍屏死機(BSOD)問題?
BSOD就是顯示在藍色屏幕背景下的出錯信息。一般這種出錯信息嚴重到你的整個操作系統當機,你只有重新冷啟動的選擇。
刨析BSOD
BSOD可以分成獨立的幾部分,每部分包含有有價值的錯誤處理信息。這幾部分包括:
1、bug檢查部分:這是BSOD中包含實際出錯消息的位置。在這部分中,你應該注意的是出錯代碼(就是在單詞「Stop」後面的十六進制數字)和錯誤符號(就是緊跟在出錯代碼後的單詞)
2、推薦用戶採取行動部分:這部分經常包含一些一般的指導你如何糾正錯誤的步驟的消息。
3、調試埠信息部分:這部分包含有你應該如何設置你的內核調試器的信息。內核調試器是讓你可以通過手工連接到計算機並對進程進行調試的工具。
下面是一個具體的BSOD例子:
*** Stop: 0x0000001E (0xF24A447A, 0X00000001, 0X0000000)
KMODE_EXCEPTION_NOT_HANDLED
*** Address F24A447A base at f24A0000, DateStamp 35825ef8d - wdmaud.sys
If this is the first time you've seen this Stop error screen, restart your computer.
If this screen appears again, follow these steps:
Check to be sure you have adequate disk space. If a driver is identified in the
Stop message, disable the driver or check with the manufacturer for driver updates.
Try changing video adapters.
Check with your hardware vendor for any BIOS updates. Disable BIOS memory options
such as caching or shadowing. If you need to use Safe Mode to remove or disable
components, restart your computer, press F8 to select Advanced Startup Options,
and then select Safe Mode.
Refer to your Getting Started manual for more information on troubleshooting Stop errors.
Kernel Debugger Using: COM2 (Port 0x2f8, Baud Rate 19200)
Beginning mp of physical memory
Physical memory mp complete. Contact your system administrator or technical support group.
根據這個具體的例子,按照上面刨析的BSOD四個部分,下面一一介紹:
bug檢查部分:
這是BSOD中包含實際出錯消息的位置。它看上去就是下面的代碼:
*** Stop: 0x0000001E (0xF24A447A, 0X00000001, 0X0000000)
KMODE_EXCEPTION_NOT_HANDLED *** Address F24A447A base at f24A0000, DateStamp 35825ef8d - wdmaud.sys
其中錯誤代碼是一個緊跟在Stop後面的十六進制數,在這裡面它由其它四個數字組成。
而錯誤符號是指緊隨其後的KMODE_EXCEPTION_NOT_HANDLED.
在一些BSOD出錯信息中,一個內存位置和文件名出現在錯誤符號的後面。這個信息告訴了當錯誤發生的時候在內存中的位置和哪個文件導致了錯誤的發生。當然你是否能夠看到該信息是由哪種停止消息類型來決定的。在一些實際運用中,你只能夠看到上面的第一行。而這里通常是表示由顯示服務中導致的問題。推薦用戶採取行動部分:
在上面的例子中推薦用戶採取行動部分如下:
If this is the first time you've seen this Stop error screen, restart your computer. If this screen appears again, follow these steps:
Check to be sure you have adequate disk space. If a driver is identified in the Stop message, disable the driver or check with the manufacturer for driver updates. Try changing video adapters.
Check with your hardware vendor for any BIOS updates. Disable BIOS memory options such as caching or shadowing. If you need to use Safe Mode to remove or disable components, restart your computer, press F8 to select Advanced Startup Options, and then select Safe Mode.
Refer to your Getting Started manual for more information on troubleshooting Stop errors.
推薦用戶採取行動部分通常是推薦用戶在遇到了出錯信息後應該採取的解決步驟。在消息中可以看到,解決一個BSOD也許只要重新啟動或則整理出足夠大的剩餘空間就能夠解決了。盡管這樣的方法偶爾會起到作用,但是實際上要解決BSOD經常要遠遠復雜得多。
調試埠信息部分:
這部分包含有你應該如何設置你的內核調試器的信息。我會在以後的網站裡面詳細介紹什麼是2000的內核調試器。在上面的例子中,這部分內容是:
Kernel Debugger Using: COM2 (Port 0x2f8, Baud Rate 19200)
Beginning mp of physical memory Physical memory mp complete. Contact your system administrator or technical support group.
停止信息的四種類型
當程序或則驅動程序發生了一個不能夠控制的錯誤消息或則試圖執行一個非法指令時,系統就會發生停止出錯信息。而這種信息通常由四種類型組成。
1、常規停止消息:在正常的使用win2000時發生的停止消息
常規停止消息通常是最難解決的出錯信息,因為有可能有無數的原因能夠導致錯誤的發生。
2、安裝停止消息:在安裝win2000過程中的停止消息,通常由你的系統中存在和2000不兼容的硬體設備引起的。
解決辦法是你查看系統中的硬體設備,找到沒有列出在2000兼容列表中的設備。然後和你的硬體設備廠商聯系看他們是否能夠給你提供該設備的驅動程序。如果他們不能,那你只好從你的系統中刪除該設備,並用其它的可以兼容的設備替換掉。
如果你的所有硬體都是兼容的,你也許是存在有兩個互相沖突的硬體設備。要解決這個問題,先移走任何不是必要的硬體設備,然後重新裝載2000,一旦2000裝載成功後,把所有移走的設備全部重新加入到系統中。這樣做,通常能夠解決這個問題,至少能夠告訴你哪些硬體是有沖突的。
3、可執行程序安裝停止消息:表示發生在2000安裝過程中第4個階段(執行程序部分)的停止消息。
安裝2000在可執行程序的安裝過程中有兩個階段。第一個階段是禁止硬體中斷同時裝載一些基本的組件,例如硬體提取層。第二個階段是初始化你系統中所有的硬體。如果你在安裝程序到了這個階段的時候收到了停止消息錯誤。需要再次運行診斷程序,來判斷你的硬體是否都工作正常。然後重新安裝2000。如果你仍然遇到這個出錯消息,那麼就需要和微軟技術支持部打交道了。
4、軟體陷阱停止消息:由於軟體中的錯誤陷阱並且當程序試圖執行一個非法指令的時候發生的停止消息。
由於軟體中的錯誤陷阱並且當程序試圖執行一個非法指令的時候發生的停止消息。例如,程序試圖向一個本來是保存數字的變數寫字元串的時候,這個錯誤就有可能發生。如果你遇到了這種類型的錯誤,需要記下出錯信息,是什麼軟體導致了錯誤,一般這些軟體都有新的版本來糾正這些錯誤的。
當你遇到了停止消息時候可能需要的解決問題的步驟:
首先判斷你最近是不是在系統中有任何的變動。如果你有,那麼這些變動經常是問題產生的根源。試圖刪除或者移走新的硬體或軟體,看是否能夠解決問題。檢查系統中的硬體,最好如果有硬體檢測程序的話,可以運行該程序進行檢測,同時重新插放你的內存卡和擴展卡。
如果你的停止信息是發生在啟動中或剛啟動的過程中,那麼這有可能是你的某個服務或則設備驅動程序中的問題。可以嘗試將機器啟動到安全模式。如果你的2000系統能夠啟動成功安全模式,那麼表示你的猜測是正確的。
同時要確保你的防病毒程序是設計成和win2000兼容的,並且隨時保持更新。如果錯誤仍然發生,那麼進入你的CMOS設置,禁止掉BIOS中的象緩存或則shadow之類的選項,然後重新啟動。
Windows 2000藍屏死機之STOP對"症"下葯
從理論上講,純32位的Windows 2000是不會出現死機的,但是這僅僅是理論上。病毒或硬體和硬體驅動程序不匹配等原因將造成Windows2000的崩潰,當Windows 2000出現死機時,顯示器屏幕將變為藍色,然後出現STOP故障提示信息。下面我們分別介紹通用的STOP故障處理方法和特殊的STOP故障排除。
通用STOP故障處理
1.首先使用新版殺毒軟體檢查計算機上是否有病毒。
2.如果Windows 2000可以啟動,請檢查「事件查看器」中的信息,以確定導致故障的設備或驅動程序。啟動「事件查看器」的方法是:「開始」\「設置」\「控制面板」\「管理工具」\「事件查看器」\「系統日誌」。
3.如果不能啟動計算機,試著用「安全模式」或「最後一次正確的配置」啟動計算機,然後刪除或禁用新安裝的附加程序或驅動程序。如果用「安全模式」啟動不了計算機,可使用修復控制台。修復控制台可以禁用一些服務、重新命名設備驅動程序、檢修引導扇區或主引導記錄。
4.拆下新安裝的硬體設備(RAM、適配卡、硬碟、數據機等等)。
5.確保已經更新了硬體設備的驅動程序,以及系統有最新的BIOS。
6.運行由計算機製造商提供的系統診斷工具,尤其是內存檢查。
7.檢查Microsoft兼容硬體列表(HCL),確保所有的硬體和驅動程序都與Windows2000兼容。Hcl.txt在Windows 2000 CD-ROM的\Support文件夾中。
8.在BIOS中禁用內存緩存功能。
9.重新啟動計算機,在啟動屏幕處,按F8進入「高級啟動選項」,然後選擇「最後一次正確的配置」。(注:使用「最後一次正確的配置」的方式啟動計算機,計算機的所有設置被重置為最後一次成功啟動時的配置。)
10.如果能夠訪問Web,請進入http://www.microsoft.com/ntserver/,單擊「Support」/「Search Knowledge Base」,在「Type your keywords here」處,輸入「stop」和相應的號碼(如出現STOP消息「stop:0x0000000A」,可在此輸入「stop0x0000000A」),按Enter鍵,就可以找出所出現的STOP問題的解決方法。(E文)
部分STOP代碼
STOP消息 0x0000000A故障(剛加入新設備時)
通常原因 驅動程序使用了不正常的內存地址。
1.在安裝過程中,屏幕上提示「安裝程序正在檢查計算機硬體配置」時,按F5,根據提示選擇合適的計算機類型。例如,如果計算機是單處理器,請選擇「標准PC」。
2.在BIOS中禁用內存緩存功能。
3.拆下所有適配卡,並斷開所有不是啟動計算機所必需的硬體設備,再重新安裝Windows2000。
4.如果系統配有SCSI適配卡,請向適配卡銷售商索取最新的Windows2000驅動程序,禁用同步協商功能,檢查終結頭和設備的SCSI ID號。
5.如果系統配有IDE設備,設IDE埠為Primary。檢查IDE設備的Master/Slave/Only設置。除了硬碟,拆下其它所有的IDE設備。
6.運行由計算機製造商提供的系統診斷工具,尤其是內存檢查。
7.檢查Microsoft兼容硬體列表(HCL),確保所有的硬體和驅動程序都與Windows2000兼容。
8.重新啟動計算機。在啟動屏幕處,按F8進入「高級啟動選項」,然後選擇「最後一次正確的配置」。
STOP消息 0x0000001E故障
1.檢查是否有充分的磁碟空間,尤其是新安裝。
2.禁用STOP消息中顯示的驅動程序和所有新安裝的驅動程序。
3.如果所使用的視頻驅動程序不是Microsoft提供的,試著切換到標准VGA驅動程序或者由Win2000支持的合適的驅動程序。
4.確保系統有最新的BIOS。
5.重新啟動計算機。在啟動屏幕處,按F8進入「高級啟動選項」,然後選擇「最後一次正確的配置」。
STOP消息 0x00000023和0x00000024故障
通常原因 嚴重的驅動器碎片、超載的文件I/O、第三方的驅動器鏡像軟體或者一些防病毒軟體出錯。
1.禁用一些防病毒軟體或者備份程序,禁用所有碎片整理應用程序。
2.運行CHKDSK /f 檢修硬碟驅動器,然後重新啟動計算機。
3.重新啟動計算機。在啟動屏幕處,按F8進入「高級啟動選項」,然後選擇「最後一次正確的配置」。
STOP消息 0x0000002E故障
通常原因 系統內存中的奇偶校驗錯誤。
1.運行由計算機製造商提供的系統診斷工具,尤其是內存檢查。
2.在BIOS中禁用內存緩存功能。
3.試著用「安全模式」啟動。如果「安全模式」可啟動計算機,試著更改為標准VGA驅動程序。如果這不能解決問題,可能須要用另外的視頻適配卡。「兼容硬體列表」中列出了兼容的視頻適配卡。
4.確保已經更新了硬體設備的驅動程序,以及系統有最新的BIOS。
5.拆下一些新安裝的硬體(RAM、適配器、硬碟、數據機等等)。
6.重新啟動計算機。在啟動屏幕處,按F8進入「高級啟動選項」,然後選擇「最後一次正確的配置」。
STOP消息 0x0000003F故障
通常原因 驅動程序沒有被完全清除。
刪除一些新安裝的軟體,包括備份工具或磁碟工具,例如碎片整理和防病毒軟體。
STOP消息 0x00000058故障
通常原因 在容錯集的主驅動器中發生錯誤。
1.用Windows 2000引導軟盤,從鏡像(第二個)系統驅動器啟動計算機。
2.重新啟動計算機。在啟動屏幕處,按F8進入「高級啟動選項」,然後選擇「最後一次正確的配置」。
STOP消息 0x0000007B故障
通常原因 在I/O系統的初始化過程中出現問題(通常是引導驅動器或文件系統)。
1.檢查計算機上是否有病毒。這個STOP消息通常在引導扇區有病毒時出現。
2.使用「修復控制台」來修復驅動器。
3.拆下新安裝的硬碟驅動器或控制卡。
4.如果系統配有SCSI適配卡,請向適配卡銷售商索取最新的Windows2000驅動程序,禁用同步協商功能,檢查終結頭和設備的SCSI ID號。
5.如果系統配有IDE設備,設IDE埠為Primary。檢查IDE設備的Master/Slave/Only設置。除了硬碟,拆下其它所有的IDE設備。
6.運行CHKDSK。如果Windows 2000不能啟動CHKDSK,則必須把硬碟拆下並連接到另一個Windows2000系統上,然後用CHKDSK命令檢查該硬碟。
7.重新啟動計算機。在啟動屏幕處,按F8進入「高級啟動選項」,然後選擇「最後一次正確的配置」。
STOP消息 0x0000007F故障
通常原因 硬體或軟體問題;常見的原因是硬體失效。
1.運行由計算機製造商提供的系統診斷工具,尤其是內存檢查。這個STOP消息經常出現在錯誤或誤配內存的情況下。
2.在BIOS中禁用內存緩存功能。
3.試著拆下或替換硬體:RAM、控制器、適配器、數據機和其它外圍設備。
4.檢查Microsoft兼容硬體列表(HCL),確保所有的硬體和驅動程序都與Windows2000兼容。這個問題可能是由於不兼容的主板引起的。
5.重新啟動計算機。在啟動屏幕處,按F8進入「高級啟動選項」,然後選擇「最後一次正確的配置」。
解決藍屏之工具篇:
"兩手抓,兩手都要硬",針對 "藍屏"現象除了在硬體方面改善你的系統硬體環境外,"軟環境"的建設也不可忽視,就我們所知道的一些工具介紹給你,當然,可能還有更多的好工具,不妨平時多留意!
RAM Idle--讓藍屏消失
不管是曾經遠去的DOS時代,還是如日中天的Windows時代,作為系統資源中最重要的一項——內存資源,一直都是電腦愛好者們最為頭疼的事情。雖然現在主板上的內存插槽越來越多,內存的價錢也越來越低,但無論怎樣,還是有很多朋友的內存資源時常不夠用,以至於系統性能無法正常發揮。究其原因,主要是由於Windows操作系統不能有效地對內存資源進行管理,導致大量內存資源被白白佔用,從而使系統性能大幅度降低,造成程序鎖死、系統掛起等煩人的問題。因此,不少專門用來對內存資源進行管理的工具軟體也就應運而生,而今天要介紹的RAM Idle則是這類軟體中的佼佼者。
一、安裝
首先用Winzip等軟體將下載得到的壓縮包解壓,然後點擊Setup.exe文件,在彈出的對話框中選擇【是】即可開始安裝RAM Idle(如圖1)。和大多數Windows應用程序一樣,RAM Idle的安裝過程很簡單,只需要一路點擊【Next】即可完成。
二、 使用
RAM Idle的主要功能是在系統空閑的時候按照用戶設置自動釋放回收一定數量的內存,從而避免因Windows系統不足而造成的內存資源枯竭問題,並大幅提高系統性能與穩定性。
俗話說:工欲善其事,必先利其器,使用RAM Idle也是一樣,只有設置合理,它才能更好的對內存資源進行管理。下面就請大家點擊【開始】-【程序】-【RAM Idle】-【Configuration】打開RAM Idle設置界面(如圖2)和我一起認識下RAM Idle的設置選項
1. 【Main】選項卡:為軟體的主要設置部分,包括以下幾個內容:
·Target Free RAM:設置到達最小剩餘內存時,RAM Idle所要嘗試恢復的內存數量。
·Minimum Free RAM:設置最小剩餘內存數量,當達到這個數值的時候,RAM Idle將會自動恢復內存資源。
·Disable the CPU usage detection:選中此項後,RAM Idle恢復內存的時候將不再檢測CPU佔用率,不過只是在你的CPU佔用率總是顯示100%的時候才需要選中。一般情況下我們不用選中該項,【Recover RAM if only……】中可以設置恢復內存時的最高CPU佔用率,也就是說只有CPU佔用率低於設定數值時,RAM Idle才可以恢復內存,否則,不予恢復。
·Free up……if free RAM below 50%:設置剩餘內存少於總內存50%的時候,每隔多少時間恢復多少數量的內存。
·Pop up menu free……:設置彈出菜單中手動恢復內存部分的三個恢復數值。
2. 【Options】選項卡:主要包括總在最前面、隨Windows啟動而啟動、隱藏系統托盤圖標等一些常規設置。
3. 【Gator】選項卡:一個填表軟體的簡要介紹和下載鏈接。
4. 【About】選項卡:顯示當前系統的內存資源信息(如圖3)
RAM Idle釋放內存共有兩種方法,一種是當剩餘內存少於總內存50%的時候,按照設置每隔一段時間自動釋放一定數量的內存(設置方法見上);一種是在系統托盤的RAM Idle圖標上點擊滑鼠右鍵,使用彈出菜單(如圖4)中的三個選項快速手動釋放一定數量的內存(設置方法見上)。
三、 小結
與同類軟體相比,RAM Idle基本綜合了該類軟體的所有精華,具有無可比擬的強大內存管理能力。首先RAM Idle可以自動釋放內存資源,並且優化時間快,效率高。其次RAM Idle設置方便,功能齊備,並且佔用系統資源少,可在系統較為空閑的時候運行。另外,該軟體還具有多種方便且實用的小功能,如重新啟動,關機,掛起等。
雖然MemMAX、FREERAM、RAMFIX等軟體也各有特色,但由於這樣或者那樣的缺點,比如不能自動優化、佔用系統資源太高、優化效率低下、使用繁瑣等,使得它們很難超越RAM Idle。
如果你正在為你的內存資源的管理而發愁的話,那麼我建議你一定要試試RAM Idle,以它的實力相信一定不會讓你失望!
『貳』 配置文件 易語言 配置文件內容: [AAA] 111-aa 222-bb 33-ccc [BBB] 444-asa 555-sss 446-dff
如果你想用讀配置文件命令讀取ini文件的話,配置文件不能那樣寫,你缺少了配置項名稱,要寫成這樣:
[AAA]
a=111-aa
b=222-bb
c=33-ccc
[BBB]
a=444-asa
b=555-sss
c=446-dff
然後代碼是這樣:
.版本 2
.程序集 窗口程序集1
.子程序 __啟動窗口_創建完畢
組合框1.清空 ()組合框2.清空 ()
.子程序 _按鈕1_被單擊
.局部變數 配置節, 文本型, , "0"
.局部變數 計次, 整數型
配置節 = 取配置節名 (取運行目錄 () + 「\1.ini」)
.計次循環首 (取數組成員數 (配置節), 計次)
組合框1.加入項目 (配置節 [計次], )
組合框2.加入項目 (讀配置項 (取運行目錄 () + 「\1.ini」, 配置節 [計次], 「a」, ), )
組合框2.加入項目 (讀配置項 (取運行目錄 () + 「\1.ini」, 配置節 [計次], 「b」, ), )
組合框2.加入項目 (讀配置項 (取運行目錄 () + 「\1.ini」, 配置節 [計次], 「c」, ), )
.計次循環尾 ()
組合框2.現行選中項 = 0
組合框1.現行選中項 = 0
.子程序 _組合框1_列表項被選擇
.如果真 (組合框1.現行選中項 = 1)
組合框2.現行選中項 = 3
.如果真結束
.如果真 (組合框1.現行選中項 = 0)
組合框2.現行選中項 = 0
.如果真結束
如果你一定要按原來那樣寫配置項文件,那就用下面的代碼:
.版本 2
.程序集 窗口程序集1
.子程序 __啟動窗口_創建完畢
組合框1.清空 ()組合框2.清空 ()
.子程序 _按鈕1_被單擊
.局部變數 計次, 整數型
.局部變數 文件號, 整數型
.局部變數 配置文件內容, 文本型, , "0"
文件號 = 打開文件 (取運行目錄 () + 「\1.ini」, , )
配置文件內容 = 分割文本 (讀入文本 (文件號, ), #換行符, )
.計次循環首 (取數組成員數 (配置文件內容), 計次)
.如果 (尋找文本 (配置文件內容 [計次], 「[」, , 假) > 0)
配置文件內容 [計次] = 子文本替換 (配置文件內容 [計次], 「[」, 「」, , , 真)
配置文件內容 [計次] = 子文本替換 (配置文件內容 [計次], 「]」, 「」, , , 真)
組合框1.加入項目 (配置文件內容 [計次], )
.否則
組合框2.加入項目 (配置文件內容 [計次], )
.如果結束
.計次循環尾 ()
組合框2.現行選中項 = 0
組合框1.現行選中項 = 0
關閉文件 (文件號)
.子程序 _組合框1_列表項被選擇
.如果真 (組合框1.現行選中項 = 1)
組合框2.現行選中項 = 3
.如果真結束
.如果真 (組合框1.現行選中項 = 0)
組合框2.現行選中項 = 0
.如果真結束
『叄』 怎麼用gdb和bochs調試內核
gdbstub可以使得Bochs程序在本地1234網路埠偵聽接收gdb的命令,並且向gdb發送命令執行結果。從而我們可以利用gdb對linux 0.11內核進行C語言級的調試。當然,Linux 0.11內核也需要進行使用-g選項重新編譯。
14.13.1 編譯帶gdbstub的Bochs系統{.j,
Bochs用戶手冊中介紹了自行編譯Bochs系統的方法。這里我們給出編譯帶gdbstub的Bochs系統的方法和步驟。首先從下面網站下載最新Bochs系統源代碼(例如:bochs-2.2.tar.gz):U
使用tar對軟體包解壓後會在當前目錄中生成一個bochs-2.2子目錄。進入該子目錄後帶選項「--enable-gdb-stub」運行配置程序configure,然後運行make和make install即可,見如下所示:
[root@plinux bochs-2.2]# ./configure --enable-gdb-stubI0B%
checking build system type... i686-pc-linux-gnu7.tY.
checking host system type... i686-pc-linux-gnuQ
checking target system type... i686-pc-linux-gnu{
...©OldLinux論壇 -- 有關早期Linux內核代碼發展的論壇。M
[root@plinux bochs-2.2]# makeQ
[root@plinux bochs-2.2]# make installN?
©OldLinux論壇 -- 有關早期Linux內核代碼發展的論壇。ufVz
若在運行./configure時我們碰到一些問題而不能生成編譯使用的Makefile文件,那麼這通常是由於沒有安裝X window開發環境軟體或相關庫文件造成的。此時我們就必須先安裝這些必要的軟體。>1z<z
14.13.2 編譯帶調試信息的Linux 0.11內核"jmg
通過把Bochs的模擬運行環境與gdb符號調試工具聯系起來,我們既可以使用Linux 0.11系統下編譯的帶調試信息的內核模塊來調試,也可以使用在RedHat 9環境下編譯的0.11內核模塊來調試。這兩種環境下都需要對0.11內核源代碼目錄中所有Makefile文件進行修改,即在其中編譯標志行上添加-g標志,並去掉鏈接標志行上的-s選項:2
LDFLAGS = -M -x // 去掉 -s 標志。XJFU)Y
CFLAGS =-Wall -O -g -fomit-frame-pointer / // 添加 -g 標志。iMN
進入內核源代碼目錄後,利用find命令我們可以找到以下所有需要修改的Makefile文件:_6
[root@plinux linux-0.11]# find ./ -name MakefileSn^
./fs/Makefile-
./kernel/Makefile/"`p%
./kernel/chr_drv/Makefile(pyM
./kernel/math/MakefileV
./kernel/blk_drv/Makefiles/CDu
./lib/Makefile[x~
./Makefile980
./mm/Makefile/zb
[root@plinux linux-0.11]#S9/Q
另外,由於此時編譯出的內核代碼模塊中含有調試信息,因此system模塊大小可能會超過寫入內核代碼映像文件的默認最大值SYSSIZE = 0x3000(定義在boot/bootsect.s文件第6行)。我們可以按以下方法修改源代碼根目錄中的Makefile文件中產生Image文件的規則,即把內核代碼模塊system中的符號信息去掉後再寫入Image文件中,而原始帶符號信息的system模塊保留用作gdb調試器使用。注意,目標的實現命令需要以一個製表符(TAB)作為一行的開始。pP
Image: boot/bootsect boot/setup tools/system tools/build)=1
cp -f tools/system system.tmp=-&a
strip system.tmphQ6n0S
tools/build boot/bootsect boot/setup system.tmp $(ROOT_DEV) $(SWAP_DEV) > ImageA-)
rm -f system.tmpY3w[/@
sync9=P2n
©OldLinux論壇 -- 有關早期Linux內核代碼發展的論壇。KuEo
當然,我們也可以把boot/bootsect.s和tools/build.c中的SYSSIZE值修改成0x8000來處理這種情況。a?g4
14.13.3 調試方法和步驟;M]3!
下面我們根據在現代Linux系統(例如RedHat 9)系統上和運行在Bochs中Linux 0.11系統上編譯出的內核代碼分別來說明調試方法和步驟。
1 調試現代Linux系統上編譯出的Linux 0.11內核?E
假設我們的Linux 0.11內核源代碼根目錄是linux-rh9-gdb/,則我們首先在該目錄中按照上面方法修改所有Makefile文件,然後在linux-rh9-gdb/目錄下創建一個bochs運行配置文件並下載一個配套使用的根文件系統映像文件。我們可以直接從網站下載已經設置好的如下軟體包來做實驗:
使用命令「tar zxvf linux-gdb-rh9-050619.tar.gz」解開這個軟體包後,可以看到其中包含以下幾個文件和目錄:MX{-
©OldLinux論壇 -- 有關早期Linux內核代碼發展的論壇。X
[root@plinux linux-gdb-rh9]# ll'*5tfq
total 1600bJT~Q
-rw-r--r-- 1 root root 18055 Jun 18 15:07 bochsrc-fd1-gdb.bxrcf%J2s
drwxr-xr-x 10 root root 4096 Jun 18 22:55 linux[dM&
-rw-r--r-- 1 root root 1474560 Jun 18 20:21 rootimage-0.11-for-orig8EIChk
-rwxr-xr-x 1 root root 35 Jun 18 16:54 run{gj
[root@plinux linux--gdb-rh9]#t|f
這里的bochs配置文件與其他Linux 0.11配置文件的主要區別是在文件頭部添加有以下一行內容,表示當bochs使用這個配置文件運行時將在本地網路埠1234上偵聽gdb調試器的命令:NhL
gdbstub: enabled=1, port=1234, text_base=0, data_base=0, bss_base=0J,i/6
運行這個實驗的基本步驟如下:@EkQ
(1).啟動X window系統後打開兩個終端窗口;(mPN
(2).在一個窗口中,把工作目錄切換進linux-gdb-rh9/目錄中,並運行程序「./run」,此時該窗口中會顯示一條等待gdb來連接的信息:「Wait for gdb connection on localhost:1234」,並且系統會創建一個Bochs主窗口(此時無內容);1P=VI<
(3).在另一個窗口中,我們把工作目錄切換到內核源代碼目錄中linux-gdb-rh9/linux/,並運行命令:「gdb tools/system」;iDqm8
(4).在運行gdb的窗口中鍵入命令「break main」和「target remote localhost:1234」,此時gdb會顯示已經連接到Bochs的信息;p
(5).在gdb環境中再執行命令「cont」,稍過一會gdb會顯示程序停止在init/main.c的main()函數處。v3L2
下面是運行gdb和在其中執行的一些命令示例。[2;jS
[root@plinux linux]# gdb tools/system hI/
GNU gdb Red Hat Linux (5.3post-0.20021129.18rh)!mC}
Copyright 2003 Free Software Foundation, Inc.|3
GDB is free software, covered by the GNU General Public License, and you areC$NY4
welcome to change it and/or distribute copies of it under certain conditions.boNdAL
Type "show ing" to see the conditions.3[nfHW
There is absolutely no warranty for GDB. Type "show warranty" for details.'1-V
This GDB was configured as "i386-redhat-linux-gnu"...Oq&*[
(gdb) break main }<;
Breakpoint 1 at 0x6621: file init/main.c, line 110.+%!.]{
(gdb) target remote localhost:12342 .yc
Remote debugging using localhost:1234X6X&7
0x0000fff0 in sys_mkdir (pathname=0x0, mode=0) at namei.c:481(
481 namei.c: No such file or directory.5QU
in namei.c&%P'
(gdb) cont Pv'/S$
Continuing.P:O_{
Breakpoint 1, main () at init/main.c:110 *
110 ROOT_DEV = ORIG_ROOT_DEV;T7PkpD
(gdb) list 5XT
105 { /* The startup routine assumes (well, ...) this */2L$
106 /*_c
107 * Interrupts are still disabled. Do necessary setups, then)Z0k
108 * enable themjZ@+wn
109 */u
110 ROOT_DEV = ORIG_ROOT_DEV;d&!*`
111 drive_info = DRIVE_INFO;#yRW,
112 memory_end = (1<<20) + (EXT_MEM_K<<10);9Uaw
113 memory_end &= 0xfffff000;`v8fAR
114 if (memory_end > 16*1024*1024)lA#
(gdb) next DH.zM
111 drive_info = DRIVE_INFO;X
(gdb) next ?+S:q
112 memory_end = (1<<20) + (EXT_MEM_K<<10);iXdDt
(gdb) print /x ROOT_DEV <W<
$3 = 0x21d }{%Q
(gdb) quit |
The program is running. Exit anyway? (y or n) yt
[root@plinux linux]#lixBs
=====================================================
14.1 利用bochs調試內核%UU
Bochs具有非常強大的操作系統內核調試功能。這也是本文選擇Bochs作為首選實驗環境的主要原因之一。有關Bochs調試功能的說明參見前面14.2節,這里基於Linux 0.11內核來說明Windows環境下Bochs系統調試操作的基本方法。m[2
14.1.1 運行Bochs調試程序.g8O
我們假設Bochs系統已被安裝在目錄「C:/Program Files/Bochs-2.1.1/」中,並且Linux 0.11系統的Bochs配置文件名稱是bochsrc-hd.bxrc。現在在包含內核Image文件的目錄下建立一個簡單的批處理文件run.bat,其內容如下:R
"C:/Program Files/Bochs-2.1.1/bochsdbg" -q -f bochsrc-hd.bxrcjFypV+
其中bochsdbg是Bochs系統的調試執行程序。運行該批處理命令即可進入調試環境。此時Bochs的主顯示窗口空白,而控制窗口將顯示以下類似內容:D8v~
C:/Documents and Settings/john1/桌面/Linux-0.11>"C:/Program Files/Bochs-2.1.1/boRW6RNY
chsdbg" -q -f bochsrc-hd.bxrc2
========================================================================`)2?os
Bochs x86 Emulator 2.1.13$O@R
February 08, 2004x2
========================================================================/26c3(
00000000000i[ ] reading configuration from bochsrc-hd.bxrcq4
00000000000i[ ] installing win32 mole as the Bochs GUI4UW
00000000000i[ ] Warning: no rc file specified.1dsv
00000000000i[ ] using log file bochsout.txtmM
Next at t=0*
(0) context not implemented because BX_HAVE_HASH_MAP=0c
[0x000ffff0] f000:fff0 (unk. ctxt): jmp f000:e05b ; ea5be000f0g$
<bochs:1>i/
此時Bochs調試系統已經准備好開始運行,CPU執行指針已指向ROM BIOS中地址0x000fffff0處的指令處。其中'<bochs:1>'是命令輸入提示符,其中的數字表示當前的命令序列號。在命令提示符'<bochs:1>'後面鍵入'help'命令,可以列出調試系統的基本命令。若要了解某個命令的具體使用方法,可以鍵入'help'命令並且後面跟隨一個用單引號括住的具體命令,例如:「help 'vbreak'」,如下面所示。V7
<bochs:1> help@n{L(
help - show list of debugger commands5&6^
help 'command'- show short command description~B
-*- Debugger control -*-e!/;l
help, q|quit|exit, set, instrument, show, trace-on, trace-off,u7J
record, playback, load-symbols, slistr2:
-*- Execution control -*-pOHjE
c|cont, s|step|stepi, p|n|next, modebpj
-*- Breakpoint management -*-|EQ
v|vbreak, lb|lbreak, pb|pbreak|b|break, sb, sba, blist,dL/rBI
bpe, bpd, d|del|deleteyR%|
-*- CPU and memory contents -*-xsMy
x, xp, u|disas|disassemble, r|reg|registers, setpmem, crc, info, mp_cpu,@|'p
set_cpu, ptime, print-stack, watch, unwatch, ?|calc7
<bochs:2> help 'vbreak'_t*<#o
help vbreak/?
vbreak seg:off - set a virtual address instruction breakpoint0
<bochs:3>flx+
為了讓Bochs直接模擬執行到Linux的引導啟動程序開始處,我們可以先使用斷點命令在0x7c00處設置一個斷點,然後讓系統連續運行到0x7c00處停下來。執行的命令序列如下:.Xfk
<bochs:3> vbreak 0x0000:0x7c00hDzuWy
<bochs:4> cfMH/'X
(0) Breakpoint 1, 0x7c00 (0x0:0x7c00))W&
Next at t=4409138<-0m5
(0) [0x00007c00] 0000:7c00 (unk. ctxt): mov ax, 0x7c0 ; b8c007b 03*
<bochs:5>3R28Q
此時,CPU執行到boot.s程序開始處的第1條指令處,Bochs主窗口將顯示出「Boot From floppy...」等一些信息。現在,我們可以利用單步執行命令's'或'n'(不跟蹤進入子程序)來跟蹤調試程序了。在調試時可以使用Bochs的斷點設置命令、反匯編命令、信息顯示命令等來輔助我們的調試操作。下面是一些常用命令的示例:J'P
<bochs:8> u /10 # 反匯編從當前地址開始的10條指令。,S/2
00007c00: ( ): mov ax, 0x7c0 ; b8c007Wvl
00007c03: ( ): mov ds, ax ; 8ed8)1f*
00007c05: ( ): mov ax, 0x9000 ; b80090WmD1
00007c08: ( ): mov es, ax ; 8ec0(`|
00007c0a: ( ): mov cx, 0x100 ; b90001iW1|1
00007c0d: ( ): sub si, si ; 29f6ze_QZY
00007c0f: ( ): sub di, di ; 29ffZStl
00007c11: ( ): rep movs word ptr [di], word ptr [si] ; f3a5=yF
00007c13: ( ): jmp 9000:0018 ; ea18000090!s?PR9
00007c18: ( ): mov ax, cs ; 8cc8(
<bochs:9> info r # 查看當前CPU寄存器的內容aM>/D
eax 0xaa55 436057a@`_
ecx 0x110001 1114113/$3$K"
edx 0x0 00j3G?
ebx 0x0 0gE
esp 0xfffe 0xfffee7{
ebp 0x0 0x0]*lX
esi 0x0 0m
edi 0xffe4 65508TD}Zo
eip 0x7c00 0x7c00e
eflags 0x282 642Wlg
cs 0x0 0b s=]
ss 0x0 0=Z'
ds 0x0 02R;%
es 0x0 0!
fs 0x0 0BX/
gs 0x0 0D*)}n{
『肆』 藍屏代碼 0x0000007b 救命
0x007B檔名、目錄名稱或儲存體標簽語法錯誤。
Windows藍屏錯誤代碼一覽表,請需要的人自己查看.
數 值 敘 述
0 0x0000作業完成。
1 0x0001不正確的函數。
2 0x0002系統找不到指定的檔案。
3 0x0003系統找不到指定的路徑。
4 0x0004系統無法開啟檔案。
5 0x0005拒絕存取。
6 0x0006無效的代碼。
7 0x0007儲存體控制區塊已毀。
8 0x0008儲存體空間不足,無法處理這個指令。
9 0x0009儲存體控制區塊位址無效。
10 0x000A環境不正確。
11 0x000B嘗試載入一個格式錯誤的程式。
12 0x000C存取碼錯誤。
13 0x000D資料錯誤。
14 0x000E儲存體空間不夠,無法完成這項作業。
15 0x000F系統找不到指定的磁碟機。
16 0x0010無法移除目錄。
17 0x0011系統無法將檔案移到 其他的磁碟機。
18 0x0012沒有任何檔案。
19 0x0013儲存媒體為防寫狀態。
20 0x0014系統找不到指定的裝置。
21 0x0015裝置尚未就緒。
22 0x0016裝置無法識別指令。
23 0x0017資料錯誤 (cyclic rendancy check)
24 0x0018程式發出一個長 度錯誤的指令。
25 0x0019磁碟機在磁碟找不到 持定的磁區或磁軌。
26 0x001A指定的磁碟或磁片無法存取。
27 0x001B磁碟機找不到要求的磁區。
28 0x001C印表機沒有紙。
29 0x001D系統無法將資料寫入指定的磁碟機。
30 0x001E系統無法讀取指定的裝置。
31 0x001F連接到系統的某個裝置沒有作用。
32 0x0020 The process cannot access the file because it is being used
by another process.
33 0x0021檔案的一部份被鎖定,現在無法存取。
34 0x0022磁碟機的磁片不正確。 請將 %2 (Volume Serial Number: %3) 插入磁
碟 機%1。
36 0x0024開啟的分享檔案數量太多。
38 0x0026到達檔案結尾。
39 0x0027磁碟已滿。
50 0x0032不支援這種網路要求。
51 0x0033遠端電腦無法使用。
52 0x0034網路名稱重復。
53 0x0035網路路徑找不到。
54 0x0036網路忙碌中。
55 0x0037 The specified network resource or device is no longer
available.
56 0x0038 The network BIOS command limit has been reached.
57 0x0039網路配接卡發生問題。
58 0x003A指定的伺服器無法執行要求的作業。
59 0x003B網路發生意外錯誤。
60 0x003C遠端配接卡不相容。
61 0x003D印表機佇列已滿。
62 0x003E伺服器的空間無法儲存等候列印的檔案。
63 0x003F等候列印的檔案已經刪除。
64 0x0040指定的網路名稱無法使用。
65 0x0041拒絕存取網路。
66 0x0042網路資源類型錯誤。
67 0x0043網路名稱找不到。
68 0x0044超過區域電腦網路配接卡的名稱限制。
69 0x0045超過網路BIOS作業階段的限制。
70 0x0046遠端伺服器已經暫停或者正在起始中。
71 0x0047由於連線數目已達上限,此時無法再連線到這台遠端電腦。
72 0x0048指定的印表機或磁碟裝置已經暫停作用。
80 0x0050檔案已經存在。
82 0x0052無法建立目錄或檔案。
83 0x0053 INT 24 失敗
84 0x0054處理這項要求的儲存體無法使用。
85 0x0055近端裝置名稱已經在使用中。
86 0x0056指定的網路密碼錯誤。
87 0x0057叄數錯誤。
88 0x0058網路發生資料寫入錯誤。
89 0x0059此時系統無法執行其他行程。
100 0x0064無法建立其他的系統semaphore。
101 0x0065屬於其他行程專用的semaphore 。
102 0x0066 semaphore已經設定,而且無法關閉。
103 0x0067無法指定semaphore 。
104 0x0068在岔斷時間無法要求專用的semaphore 。
105 0x0069此semaphore先前的擁有權已經結束。
106 0x006A請將磁片插入 %1。
107 0x006B因為代用的磁片尚未插入,所以程式已經停止。
108 0x006C磁碟正在使用中或被鎖定。
109 0x006D Pipe已經中止。
110 0x006E系統無法開啟指定的 裝置或檔案。
111 0x006F檔名太長。
112 0x0070磁碟空間不足。
113 0x0071沒有可用的內部檔案識別字。
114 0x0072目標內部檔案識別字不正確。
117 0x0075由應用程式所執行的IOCTL呼叫 不正確。
118 0x0076寫入驗證叄數值不正確。
119 0x0077系統不支援所要求的指令。
120 0x0078此項功能僅在Win32模式有效。
121 0x0079 semaphore超過逾時期間。
122 0x007A傳到系統呼叫的資料區域 太小。
123 0x007B檔名、目錄名稱或儲存體標簽語法錯誤。
124 0x007C系統呼叫層次不正確。
125 0x007D磁碟沒有設定標簽。
126 0x007E找不到指定的模組。
127 0x007F找不到指定的程序。
128 0x0080沒有子行程可供等待。
129 0x0081 %1這個應用程式無法在Win32模式下執行。
130 0x0082 Attempt to use a file handle to an open disk partition for
an operation other than raw disk I/O.
131 0x0083嘗試將檔案指標移至檔案開頭之前。
132 0x0084無法在指定的裝置或檔案,設定檔案指標。
133 0x0085 JOIN或SUBST指令 無法用於 內含事先結合過的磁碟機。
134 0x0086嘗試在已經結合的磁碟機,使用JOIN或SUBST指令。
135 0x0087嘗試在已經替換的磁碟機,使 用JOIN或SUBST指令。
136 0x0088系統嘗試刪除 未連結過的磁碟機的連結關系。
137 0x0089系統嘗試刪除 未替換過的磁碟機的替換關系。
138 0x008A系統嘗試將磁碟機結合到已經結合過之磁碟機的目錄。
139 0x008B系統嘗試將磁碟機替換成已經替換過之磁碟機的目錄。
140 0x008C系統嘗試將磁碟機替換成已經替換過之磁碟機的目錄。
141 0x00系統嘗試將磁碟機SUBST成已結合的磁碟機 目錄。
142 0x008E系統此刻無法執行JOIN或SUBST。
143 0x008F系統無法將磁碟機結合或替換同一磁碟機下目錄。
144 0x0090這個目錄不是根目錄的子目錄。
145 0x0091目錄仍有資料。
146 0x0092指定的路徑已經被替換過。
147 0x0093資源不足,無法處理這項 指令。
148 0x0094指定的路徑這時候無法使用。
149 0x0095嘗試要結合或替換的磁碟機目錄,是已經替換過的的目標。
150 0x0096 CONFIG.SYS檔未指定系統追蹤資訊,或是追蹤功能被取消。
151 0x0097指定的semaphore事件DosMuxSemWait數目不正確。
152 0x0098 DosMuxSemWait沒有執行;設定太多的semaphore。
153 0x0099 DosMuxSemWait清單不正確。
154 0x009A您所輸入的儲存媒體標 元長度限制。
155 0x009B無法建立其他的執行緒。
156 0x009C接收行程拒絕接受信號。
157 0x009D區段已經被舍棄,無法被鎖定。
158 0x009E區段已經解除鎖定。
159 0x009F執行緒識別碼的位址不正確。
160 0x00A0傳到DosExecPgm的引數字串不正確。
161 0x00A1指定的路徑不正確。
162 0x00A2信號等候處理。
164 0x00A4系統無法建立執行緒。
167 0x00A7無法鎖定檔案的部份范圍。
170 0x00AA所要求的資源正在使用中。
173 0x00AD取消范圍的鎖定要求不明顯。
174 0x00AE檔案系統不支援自動變更鎖定類型。
180 0x00B4系統發現不正確的區段號碼。
182 0x00B6作業系統無法執行 %1。
183 0x00B7檔案已存在,無法建立同一檔案。
186 0x00BA傳送的旗號錯誤。
187 0x00BB指定的系統旗號找不到。
188 0x00BC作業系統無法執行 %1。
189 0x00BD作業系統無法執行 %1。
190 0x00BE作業系統無法執行 %1。
191 0x00BF無法在Win32模式下執行 %1。
192 0x00C0作業系統無法執行 %1。
193 0x00C1 %1不是正確的Win32應用程式。
194 0x00C2作業系統無法執行 %1。
195 0x00C3作業系統無法執行 %1。
196 0x00C4作業系統無法執行 這個應用程式。
197 0x00C5作業系統目前無法執行 這個應用程式。
198 0x00C6作業系統無法執行 %1。
199 0x00C7作業系統無法執行 這個應用程式。
200 0x00C8程式碼的區段不可以大於或等於64KB。
201 0x00C9作業系統無法執行 %1。
202 0x00CA作業系統無法執行 %1。
203 0x00CB系統找不到輸入的環境選項。 \r
205 0x00CD在指令子目錄下,沒有任何行程有信號副處理程式。
206 0x00CE檔案名稱或副檔名太長。
207 0x00CF ring 2堆疊使用中。
208 0x00D0輸入的通用檔名字元 * 或 ? 不正確, 或指定太多的通用檔名字元。
209 0x00D1所傳送的信號不正確。
210 0x00D2無法設定信號處理程式。
212 0x00D4區段被鎖定,而且無法重新配置。
214 0x00D6附加到此程式或動態連結模組的動態連結模組太多。
215 0x00D7 Can''t nest calls to LoadMole.
230 0x00E6 The pipe state is invalid.
231 0x00E7所有的pipe instances都在忙碌中。
232 0x00E8 The pipe is being closed.
233 0x00E9 No process is on the other end of the pipe.
234 0x00EA有更多可用的資料。
240 0x00F0作業階段被取消。
254 0x00FE指定的延伸屬性名稱無效。
255 0x00FF延伸的屬性不一致。
259 0x0103沒有可用的資料。
266 0x010A無法使用Copy API。
267 0x010B目錄名稱錯誤。
275 0x0113延伸屬性不適用於緩沖區。
276 0x0114在外掛的檔案系統上的延伸屬性檔案已經毀損。
277 0x0115延伸屬性表格檔滿。
278 0x0116指定的延伸屬性代碼無效。
282 0x011A外掛的這個檔案系統不支援延伸屬性。
288 0x0120意圖釋放不屬於叫用者的mutex。
298 0x012A semaphore傳送次數過多。
299 0x012B只完成Read/WriteProcessMemory的部份要求。
317 0x013D系統找不到位於訊息檔 %2中編號為0x%1的訊息。
487 0x01E7嘗試存取無效的位址。
534 0x0216運算結果超過32位元。
535 0x0217通道的另一端有一個行程在接送資料。
536 0x0218等候行程來開啟通道的另一端。
994 0x03E2存取延伸的屬性被拒。
995 0x03E3由於執行緒結束或應用程式要求,而異常終止I/O作業。
996 0x03E4重疊的I/O事件不是設定成通知狀態。
997 0x03E5正在處理重疊的I/O作業。
998 0x03E6對記憶體位置的無效存取。
999 0x03E7執行inpage作業發生錯誤。
『伍』 Akima 插值和樣條插值的C語言源代碼,要有注釋。
Akima插值
附帶的圖片為運行結果
#include"stdio.h"
#include"math.h"
#include"interpolation.h"
voidinterpolation_akima(AKINTEPap){
intnum,k,kk,m,l;
doublepio,*mtr,*x,*y,u[5],p,q;
num=ap->n;k=ap->k;
pio=ap->t;mtr=ap->s;
x=ap->x;y=ap->y;
if(num<1){
return;
}
elseif(num==1){
mtr[0]=mtr[4]=y[0];
return;
}
elseif(num==2){
mtr[0]=y[0];
mtr[1]=(y[1]-y[0])/(x[1]-x[0]);
if(k<0)
mtr[4]=(y[0]*(pio-x[1])-y[1]*(pio-x[0]))/(x[0]-x[1]);
return;
}
if(k<0){
if(pio<=x[1])kk=0;
elseif(pio>=x[num-1])kk=num-2;
else{
kk=1;m=num;
while(((kk-m)!=1)&&((kk-m)!=-1)){
l=(kk+m)/2;
if(pio<x[l-1])m=l;
elsekk=l;
}
kk--;
}
}
elsekk=k;
if(kk>=num-1)kk=num-2;
u[2]=(y[kk+1]-y[kk])/(x[kk+1]-x[kk]);
if(num==3){
if(kk==0){
u[3]=(y[2]-y[1])/(x[2]-x[1]);
u[4]=2.0*u[3]-u[2];
u[1]=2.0*u[2]-u[3];
u[0]=2.0*u[1]-u[2];
}
else{
u[1]=(y[1]-y[0])/(x[1]-x[0]);
u[0]=2.0*u[1]-u[2];
u[3]=2.0*u[2]-u[1];
u[4]=2.0*u[3]-u[2];
}
}
else{
if(kk<=1){
u[3]=(y[kk+2]-y[kk+1])/(x[kk+2]-x[kk+1]);
if(kk==1){
u[1]=(y[1]-y[0])/(x[1]-x[0]);
u[0]=2.0*u[1]-u[2];
if(num==4)u[4]=2.0*u[3]-u[2];
elseu[4]=(y[4]-y[3])/(x[4]-x[3]);
}
else{
u[1]=2.0*u[2]-u[3];
u[0]=2.0*u[1]-u[2];
u[4]=(y[3]-y[2])/(x[3]-x[2]);
}
}
elseif(kk>=(num-3)){
u[1]=(y[kk]-y[kk-1])/(x[kk]-x[kk-1]);
if(kk==(num-3)){
u[3]=(y[num-1]-y[num-2])/(x[num-1]-x[num-2]);
u[4]=2.0*u[3]-u[2];
if(num==4)u[0]=2.0*u[1]-u[2];
elseu[0]=(y[kk-1]-y[kk-2])/(x[kk-1]-x[kk-2]);
}
else{
u[3]=2.0*u[2]-u[1];
u[4]=2.0*u[3]-u[2];
u[0]=(y[kk-1]-y[kk-2])/(x[kk-1]-x[kk-2]);
}
}
else{
u[1]=(y[kk]-y[kk-1])/(x[kk]-x[kk-1]);
u[0]=(y[kk-1]-y[kk-2])/(x[kk-1]-x[kk-2]);
u[3]=(y[kk+2]-y[kk+1])/(x[kk+2]-x[kk+1]);
u[4]=(y[kk+3]-y[kk+2])/(x[kk+3]-x[kk+2]);
}
}
mtr[0]=fabs(u[3]-u[2]);
mtr[1]=fabs(u[0]-u[1]);
if((fabs(mtr[0])<0.0000001)&&(fabs(mtr[1])<0.0000001))
p=(u[1]+u[2])/2.0;
elsep=(mtr[0]*u[1]+mtr[1]*u[2])/(mtr[0]+mtr[1]);
mtr[0]=fabs(u[3]-u[4]);
mtr[1]=fabs(u[2]-u[1]);
if((fabs(mtr[0])<0.0000001)&&(fabs(mtr[1])<0.0000001))
q=(u[2]+u[3])/2.0;
elseq=(mtr[0]*u[2]+mtr[1]*u[3])/(mtr[0]+mtr[1]);
mtr[0]=y[kk];
mtr[1]=p;
mtr[3]=x[kk+1]-x[kk];
mtr[2]=(3.0*u[2]-2.0*p-q)/mtr[3];
mtr[3]=(q+p-2.0*u[2])/(mtr[3]*mtr[3]);
if(k<0){
p=pio-x[kk];
mtr[4]=mtr[0]+mtr[1]*p+mtr[2]*p*p+mtr[3]*p*p*p;
}
return;
}
main()
{
doublex[11]={3.0,5.0,8.0,13.0,17.0,25.0,27.0,29.0,31.0,35.0,39.0};
doubley[11]={7.0,10.0,11.0,17.0,23.0,18.0,13.0,6.0,3.0,1.0,0.0};
AKINTEaa={11,x,y,-1,14.0,{0}};
AKINTEab={11,x,y,-1,28.0,{0}};
printf(" ");
interpolation_akima(&aa);
printf("x=%6.3f,f(x)=%e ",aa.t,aa.s[4]);
printf("mtr0=%e,mtr1=%e,mtr2=%e,mtr3=%e ",aa.s[0],aa.s[1],aa.s[2],aa.s[3]);
printf(" ");
interpolation_akima(&ab);
printf("x=%6.3f,f(x)=%e ",ab.t,ab.s[4]);
printf("mtr0=%e,mtr1=%e,mtr2=%e,mtr3=%e ",ab.s[0],ab.s[1],ab.s[2],ab.s[3]);
printf(" ");
}
三次樣條插值的實現
1、程序比較簡單的:
#include<iostream>
#include<iomanip>
usingnamespacestd;
constintMAX=50;
floatx[MAX],y[MAX],h[MAX];
floatc[MAX],a[MAX],fxym[MAX];
floatf(intx1,intx2,intx3){
floata=(y[x3]-y[x2])/(x[x3]-x[x2]);
floatb=(y[x2]-y[x1])/(x[x2]-x[x1]);
return(a-b)/(x[x3]-x[x1]);
}//求差分
voidcal_m(intn){//用追趕法求解出彎矩向量M……
floatB[MAX];
B[0]=c[0]/2;
for(inti=1;i<n;i++)
B[i]=c[i]/(2-a[i]*B[i-1]);
fxym[0]=fxym[0]/2;
for(i=1;i<=n;i++)
fxym[i]=(fxym[i]-a[i]*fxym[i-1])/(2-a[i]*B[i-1]);
for(i=n-1;i>=0;i--)
fxym[i]=fxym[i]-B[i]*fxym[i+1];
}
voidprintout(intn);
intmain(){
intn,i;charch;
do{
cout<<"Pleaseputinthenumberofthedots:";
cin>>n;
for(i=0;i<=n;i++){
cout<<"PleaseputinX"<<i<<':';
cin>>x[i];//cout<<endl;
cout<<"PleaseputinY"<<i<<':';
cin>>y[i];//cout<<endl;
}
for(i=0;i<n;i++)//求步長
h[i]=x[i+1]-x[i];
cout<<"Please輸入邊界條件 1:已知兩端的一階導數 2:兩端的二階導數已知 默認:自然邊界條件 ";
intt;
floatf0,f1;
cin>>t;
switch(t){
case1:cout<<"PleaseputinY0'Y"<<n<<"' ";
cin>>f0>>f1;
c[0]=1;a[n]=1;
fxym[0]=6*((y[1]-y[0])/(x[1]-x[0])-f0)/h[0];
fxym[n]=6*(f1-(y[n]-y[n-1])/(x[n]-x[n-1]))/h[n-1];
break;
case2:cout<<"PleaseputinY0"Y"<<n<<"" ";
cin>>f0>>f1;
c[0]=a[n]=0;
fxym[0]=2*f0;fxym[n]=2*f1;
break;
default:cout<<"不可用 ";//待定
};//switch
for(i=1;i<n;i++)
fxym[i]=6*f(i-1,i,i+1);
for(i=1;i<n;i++){
a[i]=h[i-1]/(h[i]+h[i-1]);
c[i]=1-a[i];
}
a[n]=h[n-1]/(h[n-1]+h[n]);
cal_m(n);
cout<<" 輸出三次樣條插值函數: ";
printout(n);
cout<<"Doyoutohaveanthertry?y/n:";
cin>>ch;
}while(ch=='y'||ch=='Y');
return0;
}
voidprintout(intn){
cout<<setprecision(6);
for(inti=0;i<n;i++){
cout<<i+1<<":["<<x[i]<<","<<x[i+1]<<"] "<<" ";
/*
cout<<fxym[i]/(6*h[i])<<"*("<<x[i+1]<<"-x)^3+"<<<<"*(x-"<<x[i]<<")^3+"
<<(y[i]-fxym[i]*h[i]*h[i]/6)/h[i]<<"*("<<x[i+1]<<"-x)+"
<<(y[i+1]-fxym[i+1]*h[i]*h[i]/6)/h[i]<<"(x-"<<x[i]<<") ";
cout<<endl;*/
floatt=fxym[i]/(6*h[i]);
if(t>0)cout<<t<<"*("<<x[i+1]<<"-x)^3";
elsecout<<-t<<"*(x-"<<x[i+1]<<")^3";
t=fxym[i+1]/(6*h[i]);
if(t>0)cout<<"+"<<t<<"*(x-"<<x[i]<<")^3";
elsecout<<"-"<<-t<<"*(x-"<<x[i]<<")^3";
cout<<" ";
t=(y[i]-fxym[i]*h[i]*h[i]/6)/h[i];
if(t>0)cout<<"+"<<t<<"*("<<x[i+1]<<"-x)";
elsecout<<"-"<<-t<<"*("<<x[i+1]<<"-x)";
t=(y[i+1]-fxym[i+1]*h[i]*h[i]/6)/h[i];
if(t>0)cout<<"+"<<t<<"*(x-"<<x[i]<<")";
elsecout<<"-"<<-t<<"*(x-"<<x[i]<<")";
cout<<endl<<endl;
}
cout<<endl;
}
2、程序比較復雜的:
(程序前面的01.,02.,03.等等為語句編號,實際應用時請一一刪除)01./*=======================================================================*/
02.#include<stdio.h>
03.////////////////////////////////////////////////////////////////////////////////
04.#defineMAXNUM50//定義樣條數據區間個數最多為50個
05.typedefstructSPLINE//定義樣條結構體,用於存儲一條樣條的所有信息
06.{//初始化數據輸入
07.floatx[MAXNUM+1];//存儲樣條上的點的x坐標,最多51個點
08.floaty[MAXNUM+1];//存儲樣條上的點的y坐標,最多51個點
09.unsignedintpoint_num;//存儲樣條上的實際的點的個數
10.floatbegin_k1;//開始點的一階導數信息
11.floatend_k1;//終止點的一階導數信息
12.//floatbegin_k2;//開始點的二階導數信息
13.//floatend_k2;//終止點的二階導數信息
14.//計算所得的樣條函數S(x)
15.floatk1[MAXNUM+1];//所有點的一階導數信息
16.floatk2[MAXNUM+1];//所有點的二階導數信息
17.//51個點之間有50個段,func[]存儲每段的函數系數
18.floata3[MAXNUM],a1[MAXNUM];
19.floatb3[MAXNUM],b1[MAXNUM];
20.//分段函數的形式為Si(x)=a3[i]*{x(i+1)-x}^3+a1[i]*{x(i+1)-x}+
21.//b3[i]*{x-x(i)}^3+b1[i]*{x-x(i)}
22.//xi為x[i]的值,xi_1為x[i+1]的值
23.}SPLINE,*pSPLINE;
24.typedefintRESULT;//返回函數執行的結果狀態,下面為具體的返回選項
25.#ifndefTRUE
26.#defineTRUE1
27.#endif
28.#ifndefFALSE
29.#defineFALSE-1
30.#endif
31.#ifndefNULL
32.#defineNULL0
33.#endif
34.#ifndefERR
35.#defineERR-2
36.#endif
37.//////////////////////////////////////////////////////////////////////////////////
38./*===============================================================================
39.***函數名稱:Spline3()
40.***功能說明:完成三次樣條差值,其中使用追趕法求解M矩陣
41.***入口參數:(pSPLINE)pLine樣條結構體指針pLine中的x[],y[],num,begin_k1,end_k1
42.***出口參數:(pSPLINE)pLine樣條結構體指針pLine中的函數參數
43.***返回參數:返回程序執行結果的狀態TRUEorFALSE
44.================================================================================*/
45.RESULTSpline3(pSPLINEpLine)
46.{
47.floatH[MAXNUM]={0};//小區間的步長
48.floatFi[MAXNUM]={0};//中間量
49.floatU[MAXNUM+1]={0};//中間量
50.floatA[MAXNUM+1]={0};//中間量
51.floatD[MAXNUM+1]={0};//中間量
52.floatM[MAXNUM+1]={0};//M矩陣
53.floatB[MAXNUM+1]={0};//追趕法中間量
54.floatY[MAXNUM+1]={0};//追趕法中間變數
55.inti=0;
56.////////////////////////////////////////計算中間參數
57.if((pLine->point_num<3)||(pLine->point_num>MAXNUM+1))
58.{
59.returnERR;//輸入數據點個數太少或太多
60.}
61.for(i=0;i<=pLine->point_num-2;i++)
62.{//求H[i]
63.H[i]=pLine->x[i+1]-pLine->x[i];
64.Fi[i]=(pLine->y[i+1]-pLine->y[i])/H[i];//求F[x(i),x(i+1)]
65.}
66.for(i=1;i<=pLine->point_num-2;i++)
67.{//求U[i]和A[i]和D[i]
68.U[i]=H[i-1]/(H[i-1]+H[i]);
69.A[i]=H[i]/(H[i-1]+H[i]);
70.D[i]=6*(Fi[i]-Fi[i-1])/(H[i-1]+H[i]);
71.}
72.//若邊界條件為1號條件,則
73.U[i]=1;
74.A[0]=1;
75.D[0]=6*(Fi[0]-pLine->begin_k1)/H[0];
76.D[i]=6*(pLine->end_k1-Fi[i-1])/H[i-1];
77.//若邊界條件為2號條件,則
78.//U[i]=0;
79.//A[0]=0;
80.//D[0]=2*begin_k2;
81.//D[i]=2*end_k2;
82./////////////////////////////////////////追趕法求解M矩陣
83.B[0]=A[0]/2;
84.for(i=1;i<=pLine->point_num-2;i++)
85.{
86.B[i]=A[i]/(2-U[i]*B[i-1]);
87.}
88.Y[0]=D[0]/2;
89.for(i=1;i<=pLine->point_num-1;i++)
90.{
91.Y[i]=(D[i]-U[i]*Y[i-1])/(2-U[i]*B[i-1]);
92.}
93.M[pLine->point_num-1]=Y[pLine->point_num-1];
94.for(i=pLine->point_num-1;i>0;i--)
95.{
96.M[i-1]=Y[i-1]-B[i-1]*M[i];
97.}
98.//////////////////////////////////////////計算方程組最終結果
99.for(i=0;i<=pLine->point_num-2;i++)
100.{
101.pLine->a3[i]=M[i]/(6*H[i]);
102.pLine->a1[i]=(pLine->y[i]-M[i]*H[i]*H[i]/6)/H[i];
103.pLine->b3[i]=M[i+1]/(6*H[i]);
104.pLine->b1[i]=(pLine->y[i+1]-M[i+1]*H[i]*H[i]/6)/H[i];
105.}
106.returnTRUE;
107.}
108.//////////////////////////////////////////////////////////////////////////////////
109.SPLINEline1;
110.pSPLINEpLine1=&line1;
111.//////////////////////////////////////////////////////////////////////////////////
112.main()
113.{
114.line1.x[0]=27.7;
115.line1.x[1]=28;
116.line1.x[2]=29;
117.line1.x[3]=30;
118.line1.y[0]=4.1;
119.line1.y[1]=4.3;
120.line1.y[2]=4.1;
121.line1.y[3]=3.0;
122.line1.point_num=4;
123.line1.begin_k1=3.0;
124.line1.end_k1=-4.0;
125.Spline3(pLine1);
126.return0;
127.}
128.//////////////////////////////////////////////////////////////////////////////////
『陸』 求Sn=a+aa+aaa+……+aa…a(n個a)之值,其中a是一個數字,n表示a的位數 。用C語言怎樣編程
C語言編程:
#include<stdio.h>
intmain(intargc,char*argv[])
{
inta;
intn;
intnum=1;//計算每次n個a的值
intsum=0;//計算總和
inti;
scanf("%d%d",&a,&n);
for(i=0;i<n;i++)
{
if(i==0)//第一次
{
num=a;
sum+=num;
}
else//以後的都滿足關系:這個數等於前一個數*10+a
{
num=num*10+a;
sum+=num;
}
}
printf("%d",sum);//輸出總和
return0;
『柒』 電腦頻繁藍屏,代碼為0x0100000D1
一、Windows 2000/XP爆發藍色警報的原因
Windows 2000/XP採用了分層結構,它的兩個層又稱模式,分別為用戶模式(User Mode)和內核模式(Kernel Mode),應用程序是無法直接訪問硬體設備的,只有藉助驅動程序才能直接訪問。
不過,即使NT架構再穩定,由於會由於某些原因,例如硬體沖突、硬體產生問題、注冊表錯誤、虛擬內存不足、動態鏈接庫文件丟失、資源耗盡等,此時可能會導致驅動程序或應用程序出現錯誤,嚴重時甚至會波及內核層。這種情況下,Windows會中止系統運行,並啟動名為KeBugCheck的功能,通過檢查所有中斷的處理進程,並同預設的停止代碼和參數比較後,屏幕將變為藍色,並顯示相應的錯誤信息和故障提示,由於出現這種現象時實際上就意味著死機,因此常稱為「Blue Screen of Death」(BSOD),又稱「STOP信息」或「停止信息」。
二、認識藍色警報中隱藏的信息
Windows 2000/XP的BSOD窗口與Windows NT4以前的BOSD窗口有著很大的區別,最大的區別是NT的BSOD窗口僅包括一個通用的停止消息代碼,但Windows 2000/XP的BSOD包含了停止消息和硬體消息兩種類型,前者是發現一個無法恢復的軟體錯誤時產生的錯誤信息,後者是發現一個嚴重的硬體錯誤時產生的錯誤信息。
雖然圖1窗口中的信息看起來很復雜,但一般均由以下三部分組成:
1.錯誤信息
在「*** Stop:」至「****** wdmaud.sys」之間的這段內容是所謂的錯誤信息,由出錯代碼、自定義參數、錯誤符號等三部分組成,各部分的含義如下:
出錯代碼:STOP後面的16進制數字;
自定義參數:出錯代碼字元的組成,由程序人員定義,一般用戶很難理解;
錯誤符號:KMODE_EXCEPTION_NOT_HANDLED
在錯誤符號後面,這里還顯示了一個內存位置和文件名,可以了解到發生錯誤時的內存位置和源文件。對我們來說,其實最有用的還是前面的出錯代碼信息,在搜索微軟知識庫時將會用到。
2.推薦操作
這里顯示了系統推薦用戶採取的操作措施和步驟,例如在安全模式下卸載程序、回滾驅動程序、更新BIOS、安裝補丁等,不過大部分情況下都需要重新啟動系統後才能考慮進一步的操作。
3.調試埠信息
這里會顯示應該如何設置內核調試器的信息,包括內存轉儲映像是否已寫入磁碟、使用什麼埠來完成這次調試。
其實,根據筆者的經驗,藍色警報中除了出錯代碼比較有用外,對普通用戶來說,其餘的大部分信息並無多少實際意義,僅供參考而已。
為調試系統的需要,Windows在系統出現BSOP錯誤後,KeBugCheck會自動生成一個名為Memory.dmp的偵錯文件,該文件位於C:WindowsMinimp文件夾下,默認設置下,該文件的大小與系統物理內存容量一致,我們可以將該文件壓縮後發送給微軟的技術支持部門,以獲取相應的解決方案,但該文件的容量是如此巨大,如何發送是一個大問題,因此很少有用戶真正這樣做。
提示:打開「系統屬性→高級→啟動和故障恢復」窗口,如圖2所示,在這里可以看到「寫入調試信息」的生成方式:小內存轉儲、核心內存轉儲、完全內存轉儲、無,基於上面的分析的原因,建議在這里選擇「無」。
三、處理藍色警報三部曲
雖然Windows 2000/XP的藍色警報窗口顯示的信息可能各有不同,或者是硬體原因,或者是驅動程序與系統兼容性方面的問題,或者索性是應用程序的某些Bug。首先當然是排除病毒的原因,然後我們可以按照如下步驟進行處理:
第1步:重啟系統
出現藍色警報窗口時,我們首先應該考慮的是重新啟動系統,大部分情況下重啟系統後即可解決問題。不過,一般此時已無法通過「Ctrl+Alt+Del」熱啟動,而只能按下復位按鈕冷啟動,或者索性斷電後重新開機。
進入系統時,從「控制面板→管理工具→事件查看器」,或者在「開始→運行」框中鍵入「eventvwr.msc」命令進入事件查看器界面,如圖3所示,在這里根據日期和時間重點檢查「系統」和「應用程序」中的類型標志為「錯誤」的事件,例如圖4報告某個服務啟動失敗的錯誤。
第2步:恢復至最後一次正確的配置
Windows 2000/XP出現藍色警報並不是無緣無故而來,NT架構的操作系統也不會亂發脾氣,一般都是由於更新了設備驅動程序或者安裝了某些軟體而造成,有時甚至是用戶自行優化系統或刪除了某些重要的系統文件所導致,此時可以重啟系統,並快速按下F8鍵,選擇「最後一次正確配置」,這樣會恢復注冊表中HKEY_LOCAL_項的有效注冊表信息,但無法解決驅動程序或文件損壞而導致的錯誤。
或者,你也可以嘗試按下F8鍵選擇啟動至安全模式,如果能夠正常進入安全模式,那麼說明可能是驅動程序或系統服務的問題。
第3步:查詢出錯代碼
藍屏畫面解讀
數 值 敘 述
0 0x0000 作業完成。
1 0x0001 不正確的函數。
2 0x0002 系統找不到指定的檔案。
3 0x0003 系統找不到指定的路徑。
4 0x0004 系統無法開啟檔案。
5 0x0005 拒絕存取。
6 0x0006 無效的代碼。
7 0x0007 儲存體控制區塊已毀。
8 0x0008 儲存體空間不足,無法處理這個指令。
9 0x0009 儲存體控制區塊位址無效。
10 0x000A 環境不正確。
11 0x000B 嘗試載入一個格式錯誤的程式。
12 0x000C 存取碼錯誤。
13 0x000D 資料錯誤。
14 0x000E 儲存體空間不夠,無法完成這項作業。
15 0x000F 系統找不到指定的磁碟機。
16 0x0010 無法移除目錄。
17 0x0011 系統無法將檔案移到 其他的磁碟機。
18 0x0012 沒有任何檔案。
19 0x0013 儲存媒體為防寫狀態。
20 0x0014 系統找不到指定的裝置。
21 0x0015 裝置尚未就緒。
22 0x0016 裝置無法識別指令。
23 0x0017 資料錯誤 (cyclic rendancy check) 24 0x0018 程式發出一個長 度錯誤的指令。
25 0x0019 磁碟機在磁碟找不到 持定的磁區或磁軌。
26 0x001A 指定的磁碟或磁片無法存取。
27 0x001B 磁碟機找不到要求的磁區。
28 0x001C 印表機沒有紙。
29 0x001D 系統無法將資料寫入指定的磁碟機。
30 0x001E 系統無法讀取指定的裝置。
31 0x001F 連接到系統的某個裝置沒有作用。
32 0x0020 The process cannot access the file because it is being used by
another process.
33 0x0021 檔案的一部份被鎖定, 現在無法存取。
34 0x0022 磁碟機的磁片不正確。 請將 %2 (Volume Serial Number: %3) 插入磁碟
機%1。
36 0x0024 開啟的分享檔案數量太多。
38 0x0026 到達檔案結尾。
39 0x0027 磁碟已滿。
50 0x0032 不支援這種網路要求。
51 0x0033 遠端電腦無法使用。
52 0x0034 網路名稱重復。
53 0x0035 網路路徑找不到。
54 0x0036 網路忙碌中。
55 0x0037 The specified network resource or device is no longer available.
56 0x0038 The network BIOS command limit has been reached. 57 0x0039 網路配接卡發生問題。
58 0x003A 指定的伺服器無法執行要求的作業。
59 0x003B 網路發生意外錯誤。
60 0x003C 遠端配接卡不相容。
61 0x003D 印表機佇列已滿。
62 0x003E 伺服器的空間無法儲存等候列印的檔案。
63 0x003F 等候列印的檔案已經刪除。
64 0x0040 指定的網路名稱無法使用。
65 0x0041 拒絕存取網路。
66 0x0042 網路資源類型錯誤。
67 0x0043 網路名稱找不到。
68 0x0044 超過區域電腦網路配接卡的名稱限制。
69 0x0045 超過網路 BIOS 作業階段的限制。
70 0x0046 遠端伺服器已經暫停或者正在起始中。
71 0x0047 由於連線數目已達上限,此時無法再連線到這台遠端電腦。
72 0x0048 指定的印表機或磁碟裝置已經暫停作用。
80 0x0050 檔案已經存在。
82 0x0052 無法建立目錄或檔案。
83 0x0053 INT 24?@失敗
84 0x0054 處理這項要求的儲存體無法使用。
85 0x0055 近端裝置名稱已經在使用中。
86 0x0056 指定的網路密碼錯誤。
87 0x0057 參數錯誤。
88 0x0058 網路發生資料寫入錯誤。
89 0x0059 此時系統無法執行其他行程。
100 0x0064 無法建立其他的系統 semaphore。 101 0x0065 屬於其他行程專用的 semaphore 。
102 0x0066 semaphore 已經設定,而且無法關閉。
103 0x0067 無法指定 semaphore 。
104 0x0068 在岔斷時間無法要求專用的 semaphore 。
105 0x0069 此 semaphore 先前的擁有權已經結束。
106 0x006A 請將磁片插入 %1。
107 0x006B 因為代用的磁片尚未插入,所以程式已經停止。
108 0x006C 磁碟正在使用中或被鎖定。
109 0x006D Pipe 已經中止。
110 0x006E 系統無法開啟指定的 裝置或檔案。
111 0x006F 檔名太長。
112 0x0070 磁碟空間不足。
113 0x0071 沒有可用的內部檔案識別字。
114 0x0072 目標內部檔案識別字不正確。
117 0x0075 由應用程式所執行的 IOCTL 呼叫 不正確。
118 0x0076 寫入驗證參數值不正確。
119 0x0077 系統不支援所要求的指令。
120 0x0078 此項功能僅在 Win32 模式有效。
121 0x0079 semaphore 超過逾時期間。
122 0x007A 傳到系統呼叫的資料區域 太小。
123 0x007B 檔名、目錄名稱或儲存體標簽語法錯誤。
124 0x007C 系統呼叫層次不正確。
125 0x007D 磁碟沒有設定標簽。
126 0x007E 找不到指定的模組。
127 0x007F 找不到指定的程序。
128 0x0080 沒有子行程可供等待。
129 0x0081 %1 這個應用程式無法在 Win32 模式下執行。
130 0x0082 Attempt to use a file handle to an open disk partition for an
operation other than raw disk I/O.
131 0x0083 嘗試將檔案指標移至檔案開頭之前。
132 0x0084 無法在指定的裝置或檔案,設定檔案指標。
133 0x0085 JOIN 或 SUBST 指令 無法用於 內含事先結合過的磁碟機。
134 0x0086 嘗試在已經結合的磁碟機,使用 JOIN 或 SUBST 指令。
135 0x0087 嘗試在已經替換的磁碟機,使 用 JOIN 或 SUBST 指令。
136 0x0088 系統嘗試刪除 未連結過的磁碟機的連結關系。
137 0x0089 系統嘗試刪除 未替換過的磁碟機的替換關系。
138 0x008A 系統嘗試將磁碟機結合到已經結合過之磁碟機的目錄。
139 0x008B 系統嘗試將磁碟機替換成已經替換過之磁碟機的目錄。
140 0x008C 系統嘗試將磁碟機替換成已經替換過之磁碟機的目錄。
141 0x008d系統嘗試將磁碟機 SUBST 成已結合的磁碟機 目錄。
142 0x008E 系統此刻無法執行 JOIN 或 SUBST。
143 0x008F 系統無法將磁碟機結合或替換同一磁碟機下目錄。
144 0x0090 這個目錄不是根目錄的子目錄。
145 0x0091 目錄仍有資料。
146 0x0092 指定的路徑已經被替換過。
147 0x0093 資源不足,無法處理這項 指令。
148 0x0094 指定的路徑這時候無法使用。
149 0x0095 嘗試要結合或替換的磁碟機目錄,是已經替換過的的目標。
150 0x0096 CONFIG.SYS 檔未指定系統追蹤資訊,或是追蹤功能被取消。
151 0x0097 指定的 semaphore事件 DosMuxSemWait 數目不正確。
152 0x0098 DosMuxSemWait 沒有執行;設定太多的 semaphore。 153 0x0099 DosMuxSemWait 清單不正確。
154 0x009A 您所輸入的儲存媒體標 元長度限制。
155 0x009B 無法建立其他的執行緒。
156 0x009C 接收行程拒絕接受信號。
157 0x009D 區段已經被舍棄,無法被鎖定。
158 0x009E 區段已經解除鎖定。
159 0x009F 執行緒識別碼的位址不正確。
160 0x00A0 傳到 DosExecPgm 的引數字串不正確。
161 0x00A1 指定的路徑不正確。
162 0x00A2 信號等候處理。
164 0x00A4 系統無法建立執行緒。
167 0x00A7 無法鎖定檔案的部份范圍。
170 0x00AA 所要求的資源正在使用中。
173 0x00AD 取消范圍的鎖定要求不明顯。
174 0x00AE 檔案系統不支援自動變更鎖定類型。
180 0x00B4 系統發現不正確的區段號碼。
182 0x00B6 作業系統無法執行 %1。
183 0x00B7 檔案已存在,無法建立同一檔案。
186 0x00BA 傳送的旗號錯誤。
187 0x00BB 指定的系統旗號找不到。
188 0x00BC 作業系統無法執行 %1。
189 0x00BD 作業系統無法執行 %1。
190 0x00BE 作業系統無法執行 %1。
191 0x00BF 無法在 Win32 模式下執行 %1。
192 0x00C0 作業系統無法執行 %1。
193 0x00C1 %1 不是正確的 Win32 應用程式。
194 0x00C2 作業系統無法執行 %1。
195 0x00C3 作業系統無法執行 %1。
196 0x00C4 作業系統無法執行 這個應用程式。
197 0x00C5 作業系統目前無法執行 這個應用程式。
198 0x00C6 作業系統無法執行 %1。
199 0x00C7 作業系統無法執行 這個應用程式。
200 0x00C8 程式碼的區段不可以大於或等於 64KB。
201 0x00C9 作業系統無法執行 %1。
202 0x00CA 作業系統無法執行 %1。
203 0x00CB 系統找不到輸入的環境選項。 r
205 0x00CD 在指令子目錄下,沒有任何行程有信號副處理程式。
206 0x00CE 檔案名稱或副檔名太長。
207 0x00CF ring 2 堆疊使用中。
208 0x00D0 輸入的通用檔名字元 * 或 ? 不正確, 或指定太多的通用檔名字元。
209 0x00D1 所傳送的信號不正確。
210 0x00D2 無法設定信號處理程式。
212 0x00D4 區段被鎖定,而且無法重新配置。
214 0x00D6 附加到此程式或動態連結模組的動態連結模組太多。
215 0x00D7 Can`t nest calls to LoadMole.
230 0x00E6 The pipe state is invalid.
231 0x00E7 所有的 pipe instances 都在忙碌中。
232 0x00E8 The pipe is being closed.
233 0x00E9 No process is on the other end of the pipe.
234 0x00EA 有更多可用的資料。
240 0x00F0 作業階段被取消。
254 0x00FE 指定的延伸屬性名稱無效。
255 0x00FF 延伸的屬性不一致。
259 0x0103 沒有可用的資料。
266 0x010A 無法使用 Copy API。
267 0x010B 目錄名稱錯誤。
275 0x0113 延伸屬性不適用於緩沖區。
276 0x0114 在外掛的檔案系統上的延伸屬性檔案已經毀損。
277 0x0115 延伸屬性表格檔滿。
278 0x0116 指定的延伸屬性代碼無效。
282 0x011A 外掛的這個檔案系統不支援延伸屬性。
288 0x0120 意圖釋放不屬於叫用者的 mutex。
298 0x012A semaphore 傳送次數過多。
299 0x012B 只完成 Read/WriteProcessMemory 的部份要求。
317 0x013D 系統找不到位於訊息檔 %2 中編號為 0x%1 的訊息。
487 0x01E7 嘗試存取無效的位址。
534 0x0216 運算結果超過 32 位元。
535 0x0217 通道的另一端有一個行程在接送資料。
536 0x0218 等候行程來開啟通道的另一端。
994 0x03E2 存取延伸的屬性被拒。
995 0x03E3 由於執行緒結束或應用程式要求,而異常終止 I/O 作業。
996 0x03E4 重疊的 I/O 事件不是設定成通知狀態。
997 0x03E5 正在處理重疊的 I/O 作業。
998 0x03E6 對記憶體位置的無效存取。
999 0x03E7 執行 inpage 作業發生錯誤。
藍屏故障和其它故障一樣,根據成因大致可以分為軟體和硬體兩個方面。現在還是遵循先軟後硬的原則來看看故障的成因和解決辦法吧!
一、軟體引起的藍屏故障
1.重要文件損壞或丟失引起的藍屏故障(包括病毒所致)。
實例:Win98中的VxD(虛擬設備驅動程序)或是.DLL�動態連接庫之類的重要文件丟失,情況一般會比較嚴重,會出現「藍屏警告」。
解決方法一:記下所丟失或損壞的文件名�用Win98啟動盤中的「Ext」命令從Win98安裝盤中提取和恢復被損壞或丟失的文件,步驟如下:
(1)用Win98啟動盤引導計算機,在提示符下敲入「Ext」命令。
(2)在提示「Please enter the path to the Windows CAB files( a):」後輸入Win98安裝壓縮包所在的完整路徑,如「F�\Pwin98\Win98」,完成後回車。
(3)在提示「Please enter the name(s)of the file(s) you want to extract:」後輸入你記下的丟失文件名,如「Bios.Vxd」,回車。
(4)在解壓路徑提示「Please enter path to extract to(『Enter』 for current directory):」後輸入文件將被解壓到的完整路徑,如「C� \Windows\System」並敲回車。
(5)最後出現確認提示「Is this Ok?(y/n):」,輸入「y」後回車。「Ext」程序會自動查找安裝盤中的CAB壓縮包,並將文件釋放到指定的位置。
(6)重新啟動即可。
解決方法二:用殺毒軟體殺毒。有的病毒可能會破壞注冊表項�殺毒後注冊表應恢復中毒之前的備份。
解決方法三:如果能啟動圖形界面,可以採取重裝主板以及顯卡的驅動程序,和進行「系統文件掃描」來恢復被破壞或丟失的文件。「系統文件掃描」的方法為�單擊「開始/程序/附件/系統工具/系統信息/工具/系統文件檢查器」,然後掃描改動過的文件即可。
2.注冊表損壞導致文件指向錯誤所引起的藍屏。
實例:注冊表的擅自改動(包括人為地改動和軟體安裝時的自動替換)�其現象表現為開機或是在調用程序時出現藍屏,並且屏幕有出錯信息顯示(包含出錯的文件名)。
解決方法一:恢復備份。
(1)單擊「開始/關機/重新啟動計算機並切換到MS-DOS方式」,然後單擊「是」;
(2)進入Windows目錄下。例如,如果你的Windows安裝在「C�\Windows」 目錄下,應鍵入以下內容�「CD C�\WINDOWS」後回車;
(3)鍵入「SCANREG\RESTORE」後回車。
(4)按照上述步驟,可以將注冊表恢復到最近一次啟動計算機時的狀態。
解決方法二:刪除鍵值。
如果是在卸載程序後出現藍屏的話,筆者斷定故障是由於程序卸載不完善造成的。解決這類問題非常簡單,首先你要記下出錯的文件名,然後再到注冊表中找到以下分支「HKEY_LOCAL_MACHINE\System
\CurrentControlSet\Services\VxD」。在「查找」中輸入剛才的文件名,把查到的鍵值刪除即可。此時,千萬不要忘記備份注冊表哦!
典型案例:筆者在刪除金山毒霸時中途死機,重新啟動後剛看到桌面的圖標就出現藍屏,並伴有錯誤信息出現。錯誤信息中提到Kavkrnl.vxd文件找不到,筆者首先根據文件名的前兩個字元確定該文件不是Win98的系統文件,ka開頭的應是金山毒霸的虛擬設備驅動程序。基本判斷為文件指向錯誤,於是決定刪除它在注冊表中相應鍵值。在注冊表編輯器的查找中輸入「Kavkrnl.vxd」,將它在「HKEY_LOCAL_
MACHINE\System\CurrentControlSet\Services\VxD」中的相應主鍵值刪除,重啟後故障消除。
3.System.ini 文件錯誤引起的「藍屏」。
實例:軟體卸載或是安裝後未即時更新System.ini 文件所造成的錯誤。
解決方法:禁用注冊表中該項或是重新安裝相應的軟體或驅動程序。
4.Win98自身的不完善造成的藍屏。
實例:Win98的sp1和Microsoft的Vxd_fix.exe補丁程序對Win98的穩定性起著至關重要的作用。
解決方法:快去下載吧,如華軍網站南京站http�//nj.onlinedown.net/Win98SP1.htm�Win98sp1及http�//nj.onlinedown.net/Windows98VxDpatch.htm� Vxd_fix.exe。
5.系統資源耗盡引起的藍屏故障。
實例:藍屏故障常常發生在進行一項比較大的工作時,或是在保存復制的時候,且往往發生得比較突然。這類故障的發生原因主要是與三個堆資源(系統資源、用戶資源、GDI資源)的佔用情況有關。
解決方法:打開你的資源狀況監視器,看一下剩餘資源,如果你的三種資源都在50%甚至更低,就很容易出現諸如「非法操作」、「藍屏」或「死機」故障。為此,必須減少資源浪費,減少不必要的程序載入,避免同時運行大程序(圖形、聲音和視頻軟體),例如載入計劃任務程序,輸入法和聲音指示器,音效卡的DOS驅動程序,系統監視器程序等等。
6.DirectX問題引起的藍屏故障。
實例:(1)DirectX版本過低或是過高;(2)游戲與它不兼容或是不支持;(3)輔助重要文件丟失;(4)顯卡對它不支持。
解決方法:升級或是重裝DirectX。如果是顯卡不支持高版本的DirectX那就說明你的顯卡實在是太老了,嘗試更新顯卡的BIOS和驅動程序,否則,只好花錢升級顯卡了。
二、硬體引起的藍屏故障
1.內存超頻或不穩定造成的藍屏。
實例:隨機性藍屏。
解決方法:先用正常頻率運行,若還有問題。找一根好的內存條進行故障的替換查找,一般可以解決。再就是應當注意當CPU離內存很近時內存的散熱問題。
2.硬體的兼容性不好引起的藍屏。
兼容機好就好在它的性價比較高,壞就壞在它在進行組裝的時候,由於用戶沒有完善的監測手段和相應的知識,無法進行一系列的兼容性測試,從而把隱患留在了以後的使用過程中。
實例:升級內存時,將不同規格的內存條混插引起的故障。
解決方法:注意內存條的生產廠家、內存顆粒和批號的差異,往往就是因為各內存條在主要參數上的不同而產生了藍屏或死機,甚至更嚴重的內存故障。也可以換一下內存條所插的插槽位置。如果內存條還是不能正常工作,那就只好更換了。此處,提醒各位:內存在整個微機系統中起著非常重要的作用,它的好壞將直接影響到系統的穩定性,所以在內存的選購時要注意,最好是有內行人陪伴,避免買到Remark過的條子或頻率過低的條子。
3.硬體散熱引起的「藍屏」故障。
實例:在微機的散熱問題上所出現的故障,往往都有一定規律,一般在微機運行一段時間後才出現,表現為藍屏死機或隨意重啟。故障原因主要是過熱引起的數據讀取和傳輸錯誤。
解決方法:採取超頻的應降頻,超溫的應降溫。其實不一定所有的故障都那麼復雜,有時候從簡單的方面考慮,也能很好地解決問題�要學會觸類旁通。
4.I/O沖突引起的藍屏現象。
解決方法:這種現象出現得比較少,如果出現了,可以從系統中刪除帶!號或?號的設備名,重新啟動計算機進行確認,或者請高手手動分配系統資源。
凡事要防患於未然,下面是筆者總結出來的一些經驗,可供大家參考:
1定期對重要的注冊表文件進行手工備份,避免系統出錯後,未能及時替換成備份文件而產生不可挽回的錯誤。
2盡量避免非正常關機,減少重要文件的丟失。如.VxD .DLL文件等。
3對普通用戶而言,只要能正常運行,沒有必要去升級顯卡、主板的BIOS和驅動程序,避免升級造成的危害。
4定期檢查優化系統文件,運行「系統文件檢查器」進行文件丟失檢查及版本校對。檢查步驟參見前面相關介紹。
5減少無用軟體的安裝,盡量不用手工卸載或刪除程序,以減少非法替換文件和文件指向錯誤的出現。
6如果不是內存特別大和其管理程序非常優秀,盡量避免大程序的同時運行,如果你發現在聽MP3時有沙沙拉拉的聲音,基本可以判定該故障是由內存不足而造成的