事實上,Windows 2000的引導過程是從安裝時候就已經開始的。
那我們首先從Windows 2000的安裝說起。
當Windows 2000 setup運行時,它向硬盤上寫入MBR(主引導記錄),同時在這個磁盤驅動器的第一個可引導 分區(就是我們在fdisk後激活的分區)寫入引導扇區,引導扇區的內容根據不同的文件系統格式而變化(FAT或者是NTFS)。如果你的機器上曾裝有MS操作系統並建立了引導扇區的話,Windows 2000 setup將檢測它要覆蓋的引導扇區是否有效,如果有效的話,Windows 2000 setup安裝程序將把引導扇區的內容復制到這個分區的根目錄中的文件bootsect.dos中。Setup程序在寫完引導扇區後,將把Windows 2000所用的文件拷貝到硬盤,包括兩個引導文件Ntldr和Ntdetect.com。另外,setup還會在引導分區的根目錄中建立引導菜單文件boot.ini。
例:
[boot loader]
timeout=3
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS='Microsoft Windows '
multi(0)disk(0)rdisk(0)partition(2)\WINDOWS='Windows Server 2000' /fastdetect
這是我的機器上的boot.ini文件,該內容顯示裝了兩個操作系統,Win98和Win2000,後面的那個參數/fastdetect最常見,是安裝系統時默認的,它的作用是使ntdetect忽略秉性和串行設備的枚舉。Boot.ini文件中的相關參數還有很多,各有不同的功能,因為與本文沒太大關系,所以不作具體介紹,有興趣的朋友可以到網上找找有關資料。
Windows 2000的啟動:
當你按下機器上的power鍵,計算機就開始啟動了,首先是上電自檢,通過後bios引導計算機去讀取硬盤上的MBR,根據MBR中的信息,找到引導分區,將引導分區內的引導扇區的代碼讀入內存並把控制權交給該代碼。引導扇區代碼的作用是向Windows 2000提供磁盤驅動器(硬盤)的結構和格式信息並且從磁盤根目錄中讀取Ntldr文件,在引導扇區代碼將Ntldr加載到內存後,它把控制權交給Ntldr的入口點。如果引導扇區代碼在根目錄中沒有找到Ntldr文件的話,若文件系統為FAT格式,則顯示:“Boot:無法找到Ntldr”,若引導文件系統是NTFS格式,則顯示:“NTLDR丟失”。然後,Ntldr使用內建的文件系統代碼從根目錄讀取boot.ini文件(Ntldr內建代碼與引導扇區文件系統代碼不同的是,Ntldr文件系統代碼可以讀取子目錄)。此時,Ntldr清除屏幕,如果boot.ini中存在不止一種引導選項,則顯示引導選擇菜單,如果在boot.ini制定的超時范圍內未有任何動作的話,Ntldr會選擇默認的選項。引導選項確定後,Ntldr加載和執行Ntdetect.com(這是一個使用系統bios進行查詢計算機基本設備和設置信息的16位實模式程序)。然後,Ntldr開始清除屏幕並顯示:“Starting Windows……”進度欄。這個進度欄保持空白,直到Ntldr開始加載引導驅動程序(假如有100個引導驅動程序,則每加載一個文件,進度條增加1%)。在進度條的下面是信息:“For troubleshooting and advanced startup options for windows 2000 , press F8 .”如果此時按下F8鍵,會出現高級啟動菜單,包括:已知的最近正確模式(last known good),安全模式(safe mode),調試模式(debug mode)等等等等。
此後,Ntldr加載合適的內核和HAL映像文件(缺省為Ntoskrnl.exe和HAL.dll),讀入SYSTEM注冊表hive文件(hive文件是一種包含注冊表子樹的文件)以確定該加載哪些引導驅動程序,加載引導驅動程序,為Ntoskrnl.exe的執行准備CPU寄存器。之後,Ntldr調用Ntoskrnl.exe並由它開始初始化執行程序子系統並引導系統-啟動(system-start)設備驅動程序,在一系列的初始化工作完成後Ntoskrnl.exe為系統本機應用程序作准備並運行smss.exe。
Smss的主要任務是:初始化注冊表,創建系統環境變量,加載Win32子系統(Win32k.sys)的內核模式部分,啟動子系統進程Crss,啟動登陸進程Winlogon。然後,Winlogon開始執行其啟動步驟,如創建初始的窗口和桌面對象等等。然後它創建服務控制管理器(SCM)進程(Winnt\System32\Services.exe),它加載所有的標記為自動啟動(auto-start)的服務程序和設備驅動程序和本機安全驗證子系統(Lsass)進程(Winnt\system32\Lsass.exe)。當一切加載成功且用戶在控制台成功登陸後,SCM則認為系統引導成功,注冊表中 已知最近正確配置(HKLM\SYSTEM\select\LastKnownGood)由\CurrentControlSet替代。反之,如果用戶在引導的時候選擇高級菜單中的已知最近正確模式(LastKnownGood)或者加載時驅動程序返回一個嚴重的或者關鍵的錯誤,系統會以LastKnownGood的值作為CurrentControlSet 的值。
之後,我們便看到了熟悉的桌面。至此,Windows 2000的引導過程結束。