Win 98系統啟動過程全揭密
2004-10-27 13:04作者:老瓦出處:天極網責任編輯:原野
【編者按:有朋友可能會驚詫----Windows XP都出來了,幹嘛還寫Win 9X的內容呢?我主要是基於兩方面考慮:一是技術具有延續性,特別是作業系統,XP是在9X的基礎上發展起來的,它的出現並不意味著所有都推倒從來,通過瞭解9x的一些技術內幕,對更好地瞭解2000版或XP版有觸類旁通的作用;二是許多朋友還是在使用9X版本,在多重系統安裝、最佳化、遊戲修改、系統程式開發等方面,都要涉及到Windows啟動方面的知識,而時下關於Windows啟動的資料雜亂紛繁,有必要正本清源,讓大家系統地瞭解這方面的知識。基於此,作者老瓦費了不少心血對這方面的資料進行搜集。】
目錄
Win 9X啟動概述
引導記錄
IO.SYS
MSDOS.SYS
COMMAND.COM
CONFIG.SYS和AUTOEXEC.BAT
Win.COM
GUI啟動
Win 9X啟動順序小結
結語
一、Win 9X啟動概述
自Win 95發行以來,微軟公司堅持對Win 9X系統核心技術保密,使用者難以獲得Win 9X啟動過程更底層的技術資料,它始終是一個黑色的過程。掌握系統的啟動過程是全面控制系統和最佳化系統的關鍵,現在根據公開的技術資料和實踐經驗,僅從應用角度,對Win 9X(包括95、96(95OSR1)、97(95 OSR2.X)、98、98SE)的啟動過程全面揭密,並對各技術細節加以必要的說明。
Win 9X家族主要由四個版本系列組成,其中Windows 95是第一個版本,正是它開創了PC世界新紀元,並將比爾·蓋茨推向世界首富的寶座。該版本並不完善,BUG最多,在推出一個多月後就開始提供修正軟體包。
Win 96即Win 95的OSR1版(稱其為96,是因其發佈於96年,97同此),該版本幾乎重寫了Win 95的核心,糾正了Win 95在實際應用中的種種問題,由於與Win 95發布時間太近,流傳不廣。
Win 97即Win 95的OSR2.X,該版本發生了質的飛躍,其最大的變化是提供了新磁碟的格式FAT 32,整合了Internet瀏覽器IE 3.0,這表明微軟的系統發展戰略開始轉向網際網路。OSR2.X有三種版本,即OSR2.0、OSR2.1和OSR2.5,其中OSR2.1支援USB和AGP顯卡,OSR2.5則提供了IE4.0。由於FAT 32使OSR2.X與Win 95和DOS不相容,微軟只將其做為OEM產品而不提供零售版,Win 97因此也成為Win 95後最流行的版本。
Win 98是以DOS為基石的Windows系列的最後輝煌。它將網際網路技術和作業系統緊密結合,同時提供了IE4.0和DirectX5.0,但沒有提供更激動人心的東西,更象是Win 97的零售版。
Win 98 SE是Win 98的第二版,與Win 98相比只是提供了IE5.0和DirectX6.1a,別無新意。
Windows 2000是以Windows NT為基礎的網路作業系統,它已經是與Win9X截然不同的產品了,而新推出的Windows Me則是Windows 9X的替代產品,但除了借用Windows 2000的介面外,尚沒有更新的發現。
Win 9X版本沿革比較複雜,其核心卻保持著相對的穩定,沒有根本性變化,啟動過程也幾乎完全相同,這是本文存在的依據。
二、引導記錄
草木瓜註:很遺憾,沒有在網上找到這部分內容,不過在《小議電腦儲存》系列中就已經做了比較詳細的說明。可參考
三、IO.SYS
1、IO.SYS的內部啟動菜單
Win 9X的IO.SYS由原DOS的系統檔案IO.SYS、MSDOS.SYS合并而成,提供標準硬體的輸入/輸出介面和DOS的中斷調用,功能全面增強,它基本上控制著Win 9X的全部啟動過程,是Windows的DOS實模式的核心檔案。但它需要根據MSDOS.SYS的設定才能實現正常的啟動過程。
IO.SYS可由啟動功能鍵改變啟動過程,這些功能鍵對應著啟動菜單各選項:
功能鍵 對應的啟動功能表項目
F4: Previous MS-DOS version
F5: Safe mode
Shift+F5: Command prompt only
F6: Safe mode with network support
F8: 啟動時調出啟動菜單
Shift+F8: Step-by-step confirmation
系統啟動出現“Starting Windows 95...”時按下功能鍵即可
IO.SYS提供啟動選擇菜單,便於使用者根據需要選擇啟動方式:
⑴Normal
正常啟動模式(預設的啟動方式)
當MSDOS.SYS中的BootWin=0時,選擇本項系統將啟動舊版DOS
⑵Logged(BOOTLOG.TXT)
正常啟動模式,同時在根目錄下形成BOOTLOG.TXT
BOOTLOG.TXT記錄了啟動過程中發生的所有情況,是Win 9X系統啟動過程唯一全面的診斷記錄,可供使用者檢查啟動過程中的問題
⑶Safe mode
安全模式的GUI,螢幕四角有“安全模式”字樣不載入CONFIG.SYS、AUTOEXEC.BAT,也不載入啟動程式組中任何程式,只載入最基本硬體設定 (標準VGA模式,無音效卡、光碟機等),即最簡單的GUI啟動,用於糾正因硬體設定等造成的GUI啟動問題。系統出現問題無法正常啟動時,多數情況下會進入該啟動模式,但該模式能解決的問題非常有限,多用於顯示器等配置系統配置主要在控制台上調整。要進入正常的GUI,必須重新啟動
⑷Step-by-step confirmation
逐步執行 Windows啟動
用於確定因系統檔案損壞造成的啟動故障,該方式僅能確定DOS啟動過程中的系統問題,主要修正Config.sys和Autoexec.bat中存在的問題要確定GUI啟動過程中的問題,只能藉助BOOTLOG.TXT檔案
⑸Command prompt only
僅執行完整的實模式 DOS啟動過程,進入純DOS狀態載入全部支援Win啟動的DOS驅動程式,主要用於只能運行於純DOS模式下的應用軟體或解決嚴重的系統問題,可用命令Win啟動正常的GUI
⑹Safe mode command prompt only最簡單的 DOS啟動僅執行最基本的IO.SYS、MSDOS.SYS和COMMAND.COM三個系統檔案,不載入預設驅動程式(HIMEM.SYS、IFSHLP.EXE和SETVER.EXE)和CONFIG.SYS,AUTOEXEC.BAT,其它的環境預設值同Win 9X 的設定,該模式無法繼續啟動正常的或安全模式的GUI,主要用於處理最嚴重的系統故障。
⑺Previous MS-DOS version
啟動舊版DOS,執行雙重啟動根目錄下應有以.DOS為副檔名儲存的五個原DOS系統檔案。該選項的出現由MSDOS.SYS中的參數“BootMulti”控制注意:當MSDOS.SYS中的BootWin=0時,選擇本項將啟動正常的Win 9X系統⑻Safe mode with network support帶實模式網路訪問的安全模式該選項的出現由MSDOS.SYS中的參數“NetWork”控制用於排除網路系統的PC故障,可通過實模式網路系統,獲得更大的系統支援
2、IO.SYS提供的擴充的DOS預設配置
IO.SYS在啟動時與DOS的最大不同,是提供能滿足大多數DOS應用的預設CONFIG.SYS配置,能夠自動載入必要的驅動程式,以保證Win 9X正常啟動,具體內容如下:
HIMEM.SYS :支援1M以上記憶體,提供擴充記憶體(XMS)管理保證Win啟動的必需檔案
DBLBUFF.SYS :雙重緩衝驅動程式,僅需要時載入,多用於支援SCSI卡
IFSHLP.EXE :增強檔案管理驅動程式,支援Win的VFAT系統
保證Win啟動的必需檔案
SETVER.EXE :版本登入服務,消除版本限制,僅在DOS下用
Dblspace.bin :DOS 6.0磁碟壓縮驅動程式,僅在硬碟被壓縮時才載入
Drvspace.bin :DOS 6.22以後的磁碟壓縮驅動程式,同上
DOS=HIGH,UMB :將DOS系統移入HMA,以留出更多的常規記憶體而UMB對系統沒有任何作用,實屬擺設
FILES=30 :能開啟的最大檔案數,能滿足大多數應用僅為DOS下使用,Win 9X不需要
BUFFERS=30 :設定最大的磁碟緩衝區數,能滿足大多數應用
僅為DOS使用,Win 9X不需要
FCBS=4 :檔案控制區數,現已極少使用,僅為DOS使用
LASTDRIVE=Z :最大盤符設定,該值設定過小,將無法載入光碟機
STACKS=9,256 :設定棧數目、大小,該設定為舊程式使用Win 9X系統不需要
SHELL=COMMAND.COM/P :指定Win 9X命令列處理常式
IO.SYS提供的系統內容設定如下:
命令查尋路徑 : PATH=C:/Windows;C:/Windows/COMMAND
DOS提示符 : PROMPT=$P$G
臨時檔案目錄 : TEMP=TMP=C:/Windows/TEMP
命令列處理常式位置:COMSEPC=C:/Windows/COMMAND/COMMAND.COM
IO.SYS提供了較完善的系統配置,使取消CONFIG.SYS、AUTOEXEC.BAT成為可能。出於相容性考慮,IO.SYS不載入EMM386.EXE驅動,不提供擴充記憶體EMS和上位記憶體UMB。EMM386.EXE在系統搜尋新硬體時可能引起系統死機,在日常使用時不會有問題。
3、IO.SYS控制下的啟動過程
⑴系統啟動時,IO.SYS顯示“Starting Windows 95...”,此時可由啟動功能鍵選擇啟動方式。
⑵IO.SYS根據啟動菜單選擇和MSDOS.SYS的配置確定啟動模式。
⑶若使用原DOS系統,IO.SYS自動將DOS和Win 9X的系統開機檔案對換,然後由原DOS控制系統啟動過程。(即Win 9X的雙重啟動過程最終是由IO.SYS控制完成的,與引導記錄等無關)
⑷IO.SYS根據啟動模式先由CONFIG.SYS進行系統硬體設定,若CONFIG.SYS中沒有載入Win 9X啟動的必需檔案(如HIMEM.SYS、IFSHLP.EXE等),系統則根據預設設定自動載入。(如果要載入使用擴充記憶體的驅動程式,如EMM386.EXE等,必須在CONFIG.SYS第一行加上HIMEM.SYS驅動,否則由於系統此時未提供擴充記憶體,EMM386.EXE等程式將無法運行)
⑸完成CONFIG.SYS等硬體設定後,IO.SYS通過COMMAND.COM調用AUTOEXEC.BAT進行軟體配置。
⑹系統根目錄下的BOOTLOG.TXT是由IO.SYS控制完成的,其它一些記錄檔多是在安裝系統時建立的。
⑺完成DOS啟動過程後自動調用Win.COM,開始啟動GUI。
四、MSDOS.SYS
1、MSDOS.SYS的作用
在Win 9X中,MSDOS.SYS變成了純文字系統設定檔,用於控制Win的啟動方式。可以在DOS模式下解除其特殊屬性(唯讀、隱藏、系統),根據需要自行配置。MSDOS.SYS可以是空檔案,甚至可以刪除,當然此時系統只能以純DOS方式啟動,不能進入GUI系統。
不同方式形成的MSDOS.SYS預設內容不同,主要有四種,其中前三種方法形成的MSDOS.SYS檔案無任何配置命令,幾乎是空檔案,僅保留一行注釋,以說明該檔案形成方式,這類檔案多見於系統磁碟片中。不同的MSDOS.SYS內容如下:
1)Win安裝時建立的系統硬碟 : ;Win95EBO
2)FORMAT /S建立的系統硬碟 : ;FORMAT
3)SYS A:傳遞建立系統硬碟 : ;SYS
4)建立系統時在硬碟上形成的MSDOS.SYS
系統硬碟中的MSDOS.SYS內容比較完整,包括必要的啟動配置命令,檔案長度必須大於1024 bytes,即佔用兩個以上磁碟扇區,這一要求在該檔案中說明為保證相容性,但從未見更深入的介紹,實際上檔案小於1024 bytes對系統並無明顯影響,該要求估計是為了保證系統與舊版DOS和Win 3.X相容而提出的,這一點尚望行家指教。
用SYS向硬碟傳送系統以修複開機檔案時,將覆蓋引導記錄、IO.SYS和COMMAND.COM,MSDOS.SYS的內容保持不變,保證系統引導部分修複後,整個系統仍能正常啟動,這一做法非常聰明。
2、MSDOS.SYS的配置參數
MSDOS.SYS由三小節組成,其各配置參數無順序要求,內容如下:
[PATHS] 指定Windows的系統檔案路徑
WinDir= 指定Win 9X各系統檔案及其子目錄所在的目錄
該路徑必須包括註冊表檔案SYSTEM.DAT和Win 9X啟動必需的驅動程式,如HIMEM.SYS等
WinBootDir= 指定Win 9X的GUI啟動程式Win.COM所在的目錄
HostWinBootDrv= 指定Win.COM所在的磁碟機,不需冒號(:)
UninstallDir= 指定儲存原系統的目錄,便於自身刪除時恢複原系統用
該參數出現在Win的升級版本中
[OPTIONS] 指定Windows的啟動方式,/前的值為預設值
LOGO=1/0 允許/禁止啟動時顯示Win 9X標誌(LOGO)
屏蔽該畫面有時可解決第三方記憶體管理程式造成的衝突 看到系統啟動過程出現的提示資訊,也使系統啟動稍快,啟動
啟動時可用ESC鍵清除Win 9X標誌,查看實模式啟動資訊
BootKeys=1/0 允許/禁止啟動鍵改變啟動方式
為0時直接進入預設的啟動方式,不能用啟動熱鍵轉換
BootGUI=1/0 啟動圖形介面GUI / 僅啟動DOS 7.X,進入DOS字元介面
為0時可為DOS 7.X多重啟動提供方便,能進一步啟動圖形介面
BootWin=1/0 啟動Win 9X / 啟動舊版DOS,可按要求對換系統檔案
當BootWin=0時,預設啟動舊版DOS,若此時選擇啟動菜單的
“Previous MS-DOS version”,將啟動Win 9X
註:BootWin層級高於BootGUI,兩者衝突時以前者為準
BootMulti=0/1 禁止/允許雙重啟動
即在啟動菜單中是否出現“Previous vertion of MS DOS”項
從舊版DOS升級Win 9X時會自動出現此項,並設定為 1,但對於Win 97/98 來說,如果不對啟動系統進行修改,選擇此項將造成系統下次無法啟動
BootMenu=0/1 系統啟動時是否自動顯示啟動選擇菜單
該值為1,在啟動時會直接彈出啟動選擇菜單
Network=0/1 啟動菜單中是否出現“帶網路的安全模式啟動”項
即“Safe mode with network support”項
BootDelay=n 系統引導前顯示“Starting Windows 95...”時間,預設為2秒供使用啟動鍵改變啟動方式,該值為0時不出現任何提示直接進入預設的啟動過程,可加快啟動速度,但仍可用啟動熱鍵選擇啟動方式
BootMenuDefault= 啟動菜單使用的預設選項,預設值為 1
BootMenuDelay= 啟動菜單按預設啟動延遲間,預設值30,單位:秒
BootSafe=0/1 系統是否以安全模式啟動,為1時系統直接以安全模式啟動
BootWarn=1/0 啟動時是否顯示警告資訊
當系統非順利關機重新啟動時,是否提示“應進入安全模式” 實際上安全模式解決問題能力非常有限,真正的系統問題在該模式下是無法解決的,不進也罷
BootConfig=1/0 能否使用單步配置模式,其作用不明
DisableLog=0/1 在“Step-by-step config”時是否建立BOOTLOG.TXT
1:不選擇“Logged”時不詢問也不建立Bootlog.txt
0:詢問是否建立記錄檔Bootlog.txt
SystemReg=1/0 系統啟動時是否運行Windows 9X註冊器
1:“Step-by-step config”下詢問是否運行註冊器
其他模式則自動運行註冊器
0:不運行也不詢問是否運行Windows 9X的註冊器
該註冊器在整個系統啟動前首先運行,但運行與否對系統無明顯影響,其作用不明
LoadTop=1/0 是否將COMMAND.COM、Drvspace.bin、Dblspace.bin等載入到高端記憶體,如啟動中出現記憶體位址衝突,可將該值設為0
這類衝突多由CONFIG.SYS、AUTOEXEC.BAT載入的程式造成Autoscan=1/0
非順利關機(如掉電等)再啟動時,是否自動執行SCANDISK
(僅在Win 97/98有效)
取消自動檢測硬碟固然可以免除一些煩惱,但確實給系統帶來了隱患,還是不關閉的好
DoubleBuffers=1/2/0 是否載入BDLBUFF.SYS,提供雙重緩衝支援
0:不提供;1:需要時提供,如有SCSI卡等;
2:無條件提供雙重緩衝
DblSpace=1/0 允許需要時自動載入DblSpace.bin壓縮驅動(DOS6.0、6.2)
DrvSpace=1/0 允許自動載入DrvSpace.bin壓縮磁碟驅動(DOS6.22、Win 9X)
壓縮硬碟降低了系統整體效能,更增加了資料的危險性
在硬碟容量已不成問題的今天,還是不用壓縮為妙
注意,FAT32不支援任何磁碟壓縮軟體
WinVer= 註明Windows版本正式推出日期
第三部分由以分號“;”開頭的數行任一字元組成,在MSDOS.SYS中屬於注釋行,對系統不起任何設定作用,主要用於保證MSDOS.SYS檔案長度大於1024位元組。
MSDOS.SYS提供的參數多數是用於調整系統使用的,對於普通使用者來說,常用的主要包括NetWork前的幾個參數。
五、COMMAND.COM
COMMAND.COM是Windows 9X中的DOS外殼程式(SHELL),較DOS 6.22僅增加了部分內部命令,沒有更新的東西。
IO.SYS對COMMAND.COM的處理則有了根本改變,當Win 9X在CONFIG.SYS中載入EMM386.EXE驅動提供UMB時,COMMAND.COM的常駐部分裝入HMA,暫駐部分裝入UMB中(在DOS6.22中,COMMAND.COM只能將常駐部分裝入HMA),這將為DOS程式提供更大的常規記憶體,也不需要反覆從磁碟中恢複暫駐部分,有效地提高了系統效能。當然,如果沒有載入EMM386.EXE,系統不提供UMB,COMMAND.COM的暫駐部分就只能象DOS6.22那樣置於常規記憶體的高端。
六、CONFIG.SYS和AUTOEXEC.BAT
Win 9X中的CONFIG.SYS、AUTOEXEC.BAT的作用與DOS的一樣,用於裝配所有DOS實模式的驅動程式和應用程式,或者修改IO.SYS的預設配置。其中,CONFIG.SYS主要用於硬體設定,AUTOEXEC.BAT主要用於軟體配置,其在啟動過程中的使用參見IO.SYS一節。
Win 9X啟動後,這兩個檔案的配置作為全域設定始終保留在系統底層,決定著Win 9X下所有的DOS、Win 16應用環境。如果沒有DOS全域設定,Windows視窗下的DOS應用程式將使用Win 9X的預設設定,當然也可由使用者單獨配置。注意,DOS軟體需要的PATH、SET等環境設定可在各自視窗的屬性中單獨設定;16位的Win 3.X軟體需要的PATH、SET等環境設定只能在AUTOEXEC.BAT中設定。
Win 9X新增了不少配置命令,使實模式DOS環境更便於最佳化,各配置命令參見系統目錄/Windows下的CONFIG.TXT說明,這裡不再多說。 Win 9X通過VXD(虛擬設備驅動)、DLL(動態連結程式庫)等保護模式驅動程式統一管理和使用系統軟、硬體資源,基本上不需要實模式程式支援。實模式程式主要是為支援一些老裝置而保留的。實模式程式的存在使Win 9X必須在保護模式和實模式之間頻繁地轉換,大大降低了系統效能,更損害了系統穩定性,所以應盡量避免在啟動時裝載實模式程式。
Win 9X對DOS環境的預設設定能滿足大多數DOS軟體需要,在完成Win 9X安裝後試著刪除這兩個檔案中的內容非常必要。刪除其中的實模式程式,盡量實現Win 9X的保護模式驅動,可使Win 9X處於高效能、高穩定性的最佳化運行狀態。
沒有CONFIG.SYS、AUTOEXEC.BAT的DOS系統幾乎一無所能,而沒有它們的Win 9X效能也許更好。在Win 9X中它們主要是為支援原DOS軟體和古老的裝置而保留的。目前多數報章建議完全刪除這兩個檔案,這其實很有問題,具體分析參見《電腦界·電腦高手》'99年10月號。
七、Win.COM
Win.COM是Windows的GUI啟動命令,從檔案名稱可以看出這是一個純粹的DOS命令,它也是GUI系統中唯一的COM檔案。該命令是DOS和GUI的介面命令,主要用來載入保護模式的虛擬設備驅動程式VMM32.VXD(該程式是由多個子程式組合而成的,使CPU運行於保護模式下),同時處理GUI啟動中的各種問題,它控制著系統的整個調入過程。
Win.COM提供的各類啟動開關,主要用於確定系統故障,會使系統效能降低:
Win [/D: [F][M][S][V][X]]
/D 當Windows不能正常啟動時用於尋找故障原因
:F 關閉32位磁碟存模數式,用於不支援32位存取的硬碟
等價於在SYSTEM.INI的[386ENH]節中設定: 32BitDiskAccess=FALSE.
:M 安全模式啟動,等價於使用功能鍵F5啟動
:N 帶實模式網路支援的安全模式啟動,等價於使用功能鍵F6啟動
:S 禁止Windows使用在F000:0000與1 MB之間的ROM地址空間做為斷點
等價於在SYSTEM.INI的[386ENH]節中設定: SystemROMBreakPoint=FALSE.
:V 指定啟動時由ROM常式處理硬碟控制器中斷
等價於在SYSTEM.INI的[386ENH]節中設定: VirtualHDIRQ=FALSE.
:X 禁止Windows使用所有高端記憶體(從A000-FFFF),解決記憶體衝突問題
等價於在SYSTEM.INI的[386ENH]節中設定: EMMExclude=A000-FFFF.
八、GUI啟動
Win 9X的GUI啟動過程是非常複雜,更是微軟公司的核心秘密,不為外人所知。而對普通使用者而言,完全掌握這個複雜多變的機制也無必要,這裡只對整個GUI啟動機製做一個大致的說明。
1、GUI的設定檔
同所有複雜的系統一樣,Win 9X主要是根據系統設定檔調用各類程式來組合系統,保證系統正常啟動並執行。Win 9X的GUI系統設定檔以系統註冊表為核心,以各系統目錄下的INI檔案為輔助配置。把握住系統設定檔,就掌握了系統的核心。
GUI系統的核心設定檔主要有5個,即:Win.INI、SYSTEM.INI、SYSTEM.DAT、USER.DAT和POLICES.DAT。
Win.INI和SYSTEM.INI據說是為Win 3.X下的Win 16保護模式程式保留的,Win 3.X在這兩個檔案中的設定在Win 9X中大部分已移入系統註冊表中。Win 9X下Win 32保護模式程式主要通過系統註冊表完成配置,不需要這兩個檔案的支援。這一做法規範了應用程式的開發和使用,消除了隨意設定INI檔案的混亂,便於Win 9X統一管理系統,增加了系統的穩定性。但如果刪除這兩個檔案,Win 9X系統無法啟動,並提示“找不到SYSTEM.INI檔案”,這說明Win 9X的啟動還是離不開這兩個檔案的。
Win.INI提供了Win 16程式需要的字型設定、檔案關聯等種種資訊,主要完成GUI下相應的環境配置,對Win 9X應用沒有太大影響,如果沒有這個檔案,Win 9X將自動產生一個最簡單的只有幾行配置命令的Win.INI。
SYSTEM.INI則不同,它是Win 16的系統硬體設定檔,Win 9X又為其增加了一些新設定,以保證Win 16和Win 32相互協調,使Win 16可以調用VXD驅動程式,這一點在Win.COM提供的系統調試參數中已有充分體現。另外GUI的外殼程式(SHELL,即介面程式)、滑鼠器、顯示器等驅動程式必須通過SYSTEM.INI設定才能載入使用,這些決定了SYSTEM.INI是絕對不能刪除的。這充分證明了Win 9X是一個Win 16和Win 32的混合系統,也揭示了Win 9X系統先天脆弱的根本原因。
SYSTEM.DAT和USER.DAT即所謂的系統註冊表檔案,是Win 9X的核心檔案,Windows就是通過它來管理整個系統的。SYSTEM.DAT儲存著硬體設定及軟體安裝資訊,USER.DAT儲存著與使用者的個人設定有關的資訊,前者只能有一個,而後者可以有多個。這兩個檔案共同作用,包含了系統的全部資訊,在使用註冊表編緝軟體(如REGEDIT.EXE)時,這兩個檔案共同被修改,不能分開。它們的損壞將導致系統徹底癱瘓,無法挽救。不幸的是,系統註冊表非常脆弱,缺乏自我整理和維護機制,當系統運行一段時間後,使用者往往只能走上痛苦的系統重建之路。
在Win 95/96/97中,註冊表的備份為SYSTEM.DA0和USER.DA0,儲存在/Windows下;在Win 98中,Win.INI、SYSTEM.INI、SYSTEM.DAT和USER.DAT四個檔案被合并備份成一個檔案RB00?.CAB,儲存在/Windows/SYSBCKUP下,預設保留5個。
每次GUI啟動時系統會對備份檔案自動更新,這種處理缺乏安全管理機制,難以保證備份檔案不受錯誤資訊幹擾,多數情況下備份檔案形同虛設。
令人遺憾的是,除了手工編緝註冊表軟體REGEDIT.EXE,Win 9X沒有提供更有效註冊表維護工具。在Win 98提供了註冊表檢測軟體ScanReg.exe和ScanRegw.exe,這是一個進步,但它只能處理註冊表的物理故障,無法解決結構性問題,其可靠性又有多大呢?
博大的註冊表完全應該用一本專著來剖析,在《新潮電子精華本1》中也有簡單的介紹,這裡就不做更深的解釋了。
POLICES.DAT是微軟的MSN(Microsoft Network)註冊支援檔案,該網路國內使用者很少,該檔案也很少使用。
儘管沒有更直接的資料介紹,但是有充分的理由證明在Win 9X的啟動過程中,儲存在/Windows/INF目錄下的各種INF檔案是Win 9X系統中最有力的支援檔案。在啟動系統的過程中,Win 9X會適時地調用這些檔案,以裝載相應的驅動程式。如果沒有了這些檔案,Win 9X也是無法啟動的。另外,Win 9X的PNP技術主要是通過INF檔案實現驅動程式安裝的。
2、GUI的啟動過程
GUI的啟動過程主要由三個階段組成:WinINIT.EXE階段、16位保護模式啟動和32位保護模式啟動。
⑴WinINIT.EXE階段Win.COM開始運行後,首先調用/Windows下的WinINIT.EXE,該命令在同目錄下尋找WinINIT.INI,如果有則按照該檔案配製對系統檔案進行重新調整或升級,以保證整個系統的驅動程式能夠得到及時更新。這是Windows系統支援PNP技術,實現系統驅動程式升級的主要途徑。這個過程自然是在DOS狀態下完成的。
⑵16位保護模式啟動
Win.COM開始執行後,調入/Windows/SYSTEM下的VMM32.VXD,VMM32.VXD將處理器置於保護模式下,根據SYSTEM.INI和註冊表的配置開始啟動GUI系統的16位保護模式。這可以保證系統支援Win16軟體,更主要的是PNP BIOS(隨插即用BIOS)規範只提供16位保護模式介面,以PNP為硬體技術核心的Win 9X必須通過16位元模式直接獲得BIOS提供的硬體裝置資訊來配置系統,提高系統啟動效能,否則對硬體的配置必須在實模式下從頭開始。
GUI的啟動首先載入Win 9X的系統驅動程式,再從PNP BIOS獲得硬體裝置資訊,先後載入PNP裝置驅動程式VXD和支援非PNP硬體所需的全部16位虛擬保護模式驅動程式VXD,分配系統資源,避免裝置衝突,然後初始化所有的驅動程式(包括系統驅動程式和裝置驅動程式),完成系統硬體設定。最後載入16位外殼組件USER.EXE、GUI.EXE、KRNL386.EXE等,形成Win16的API,完成16位保護模式啟動,此時,每個系統組件都已存在,但還不具使用介面。
⑶32位保護模式啟動
完成16位元模式啟動後,系統調用32位的外殼程式資源管理員,16位核心一看到這一調用,就先自動載入VWin32.386,由它載入三個32位DLL庫檔案:USER32.DLL、GDI32.DLL、KERNEL32.DLL,形成Win32的API(這是Win 9X的核心),VWin32.386完成這一任務後,將控制權還給16位核心,16位核心再將控制權交給32位核心,開始32位保護模式啟動。這時系統載入並初始化所有32位驅動程式,這個過程與16位元模式相同。
最後,運行GUI的外殼程式(該外殼程式由SYSTEM.INI中的[BOOT]節中“SHELL=”設定,預設是資源管理員),完成GUI啟動。
3、GUI啟動過程中故障的排除
GUI系統相當複雜,相關的技術資料卻極少,這決定了使用者不能象在DOS中那樣根據啟動過程去排查故障。
Win 9X對GUI的啟動過程從未提供詳盡的說明,僅在根目錄下提供了一份開機記錄檔案BOOTLOG.TXT。該檔案記錄了啟動過程使用的所有程式模組的載入情況,是解決系統問題的唯一依據。根據該記錄可以全面瞭解GUI啟動過程中發生的種種問題。
面對啟動過程中的失敗,主要有兩個處理方法,一是用完好的來源程式覆蓋出現問題的程式,但其痛點在於如何在各類軟體包中找到那些完好的來源程式,注意,直接調試、修複出現問題的程式在Win 9X下是難以想象的;一是從啟動設定檔(CONFIG.SYS、AUTOEXEC.BAT、Win.INI、SYSTEM.INI和註冊表)中刪除調用有問題模組的命令。後者主要用於解決某軟體卸載失敗出現的問題。
在圖形模式GUI下解決系統問題時多會受到種種限制,而純DOS模式不受系統制約,是最後的系統之門(對於電腦高手來說,DOS仍是永恒的主題)。
Windows系統的複雜性決定了排除那些莫名其妙的故障的難度,若對系統經過幾次調整後仍未解決問題,最保險也是最快捷的辦法就是重新安裝系統。也許這是微軟對使用者唯一有用的建議。
在Windows下重新安裝系統,要保證產品的序號一致,否則系統可能拒絕安裝。
九、Win 9X啟動順序小結
本文詳盡地討論了Win 9X的啟動過程,複雜的參數和技術分析模糊了其清晰的體繫結構,現在對整個啟動過程做一簡單的概括,使讀者根據啟動過程中的現象能夠相對準確地判斷啟動過程,更好地處理系統啟動過程中的問題。
⑴系統加電啟動,依次載入擴充卡(包括顯卡等)、主板的BIOS程式(這與所有的作業系統(如Win 9X、LINUX、UNIX、OS/2等)無關),完成自檢過程
⑵讀入硬碟的主引導記錄、分區引導記錄,自動載入IO.SYS
⑶IO.SYS讀取MSDOS.SYS配置,確定啟動方式,根據CONFIG.SYS,進行硬體設定
⑷IO.SYS根據Win 9X啟動要求,自動載入必要的預設驅動程式(HIMEM.SYS、SETVER.EXE,IFSHLP.SYS等)
⑸IO.SYS調入COMMAND.COM,解釋執行AUTOEXEC.BAT,進行軟體配置
⑹IO.SYS進行必要的預設環境設定
⑺自動執行Win.COM,進入GUI啟動階段
⑻執行WinINIT.EXE,對系統驅動程式進行升級
⑼載入SYSTEM.INI中[BOOT]、[386ENH]、[DEVICES]等節設定的驅動程式
⑽根據SYSTEM.INI、Win.INI和系統註冊表進行系統組合、配置,各類啟動時調用的VXD檔案主要存放在C:/Windows/SYSTEM下的VMM32和IOSUBSYS下
⑾載入SYSTEM.INI中的“SHELL=”指定的外殼程式
⑿執行系統註冊表中的HKEY_LOCAL_MACHINE→Software→Microsoft→Windows→CurrentVersion下的Run、RunOnce中包含的應用程式(其中RUNONCE包含的程式只運行一次後就被自動刪除,該鍵主要用於軟體安裝),通常預設載入Internat.exe(IME)、Systray.exe(音量控制)和Win 98的ScanRegw.exe/autorun。
⒀當使用者完成身份登入後,系統執行HKEY_CURRENT_USER→Software→Microsoft→Windows→CurrentVersion下的Run、RunOnce中包含的應用程式
⒁執行Win.INI中的LOAD= RUN=載入的應用程式
⒂執行開始菜單中[啟動]組包含的應用程式
十、結語
Win 9X的啟動過程終於介紹完了。由於筆者知識水平和眼界的局限,其中還是留下了許多空白就教於諸位高手。
誠然,這個過程本來是一個相當陳舊的話題,但是多數介紹僅限於局部技巧,且謬傳頗多,比較系統完整的非常少見,這給廣大電腦愛好者帶來很大的困惑,這裡不自量的獻醜,實是糾正一些流傳的誤解,使電腦愛好者對Windows 9X的啟動過程有一個相對完整清晰的把握。