NTLDR
NTLDR(NT loader的縮寫)是微軟的Windows NT系列操作系統(直至Windows XP和Windows Server 2003)的引導程序。NTLDR可以從硬盤以及CD-ROM、U盤等移動存儲器運行並引導Windows NT系統的啟動。如果要用NTLDR啟動其他操作系統,則需要將該操作系統所使用的啟動扇區代碼保存為一個文件,NTLDR可以從這個文件加載其它引導程序。
NTLDR主要由兩個文件組成,這兩個文件必須放在系統分區(根據微軟的定義,為在MBR中標識為活動分區的分區,一般為第一個分區/C分區):
- NTLDR,這是引導程序本身
- NTDETECT.COM,用於檢測基礎硬件信息,以便系統正常啟動。
boot.ini也是比較重要的文件。它是引導程序的組態檔。當boot.ini丟失時,NTLDR會啟動第一塊硬盤第一個分區上的\Windows目錄中的系統。
在安裝、維護Windows NT系統時,可以使用fixmbr命令在硬碟中寫入啟動NTLDR引導程序的代碼。
Windows Vista、Windows Server 2008及以後版本的操作系統中,NTLDR被BOOTMGR替代。
結構
[編輯]NTLDR由兩個可執行文件構成:
- 第一部分是一個標準二進制文件,用於切換系統至保護模式,使得系統能識別並運行可移植可執行(PE)文件,並運行第二部分。一般被稱為STPBOOT.BIN
- 第二部分是一個可移植可執行文件,被稱為OSLOADER.EXE
使用WinHex或者類似的二進制處理軟件,在NTLDR中搜索「MZ」,並將其前的部分截去,即可以獲得OSLOADER.EXE。在Windows安裝文件中也可以找到壓縮後的OSLOADER.EX_文件。
Windows NT最初是為ARC(一類RISC系統架構)設計的,因此只有OSLOADER.EXE,即系統加載器,通過接受指定的系統文件路徑和其他啟動參數引導對應目錄下的Windows NT系統,而指定這些參數的工作交給ARC自帶的啟動管理器進行。x86架構缺乏啟動管理器:BIOS只會調用第一啟動設備的MBR中列明的活動分區的卷引導記錄。因此啟動管理器的功能被包括在OSLOADER部分中,直至微軟在2003年引入了自己的啟動管理器。ARC的啟動管理器的保護模式切換和PE文件識別運行功能則交給STPBOOT完成。boot.ini中的列表項也被設計為類似於ARC的格式,以便直接傳給OSLOADER.EXE。
啟動步驟
[編輯]- 與一般的系統啟動進程一致,BIOS調用MBR,然後調用活動分區的卷引導記錄,該卷引導記錄被設計為搜索NTLDR,並執行之。
- NTLDR的第一部分被調用。此時系統進入保護模式,並可以識別並運行PE格式的可執行文件。
- NTLDR的第二部分,OSLOADER.EXE被調用。OSLOADER.EXE中內嵌有FAT、NTFS和ISO 9660三種文件系統的驅動,啟動管理器,以及INI文件讀取器的CAB文件解壓縮器。OSLOADER中附帶的文件系統驅動通過BIOS中斷直接訪問磁盤,因為內核和HAL此時都沒有被載入。此時系統可以訪問磁盤內的文件。
- 如果Windows被置於休眠模式,讀取hiberfil.sys中的內容並將其寫入內存,然後恢復系統的運行。
- OSLOADER使用內置的INI文件讀取器,試圖讀取boot.ini文件的內容,並配置啟動菜單。如果boot.ini不存在,OSLOADER將視為boot.ini中有且僅有一個指向multi(0)disk(0)rdisk(0)partition(1)\WINDOWS且沒有參數的啟動項目。如果boot.ini中只存在一個啟動項目,則忽略timeout的時間設置(視為0)。
- 向用戶顯示啟動菜單,並按照timeout的時間設置倒計時。如果用戶按下按鍵,則停止倒計時。(這樣即使只有一個啟動項目,當用戶在自檢結束後狂按F8鍵,也可以進入進階開機選單)
- 如果一個非NT的系統被選擇,OSLOADER加載列表項中指定的啟動扇區代碼文件,並移交控制權。此時系統回到實模式。如果沒有指定文件(常見於Windows 9x和Windows NT共存),則加載bootsect.dos,然後移交控制權,由其搜索並加載IO.SYS。
- 如果一個NT系統被選擇,OSLOADER調用NTDETECT.COM。NTDETECT將檢測系統硬件相關的信息,決定系統將使用的硬件配置文件,並將以上信息交給OSLOADER。
- OSLOADER根據NTDETECT返回的系統硬件相關信息,加載列表項中指定的文件夾中的Windows NT內核態管理程序(Windows Executive),包括NTOSKRNL.EXE及HAL.DLL。此外尚有KDCOM.DLL及BOOTVID.DLL也在這個階段加載。
- OSLOADER加載註冊表的SYSTEM配置單元,其中包含數個系統配置集,每個配置集都包括應當加載的驅動程序和服務等;以及一系列指示標誌,指向默認配置集、上次啟動失敗的配置集及「最後一次正確的配置」對應的配置集。OSLOADER根據用戶選擇及上次啟動情況選擇配置集,讀取對應的應當加載的驅動程序列表。
- OSLOADER將NTDETECT檢測到的硬件信息及驅動程序列表交給Windows NT內核態管理程序,並移交控制權。[1]
boot.ini
[編輯]在確認系統為冷啟動,即非休眠模式後,NTLDR所做的第一件事為讀取boot.ini。[2]
示例
[編輯]以下是boot.ini的一個示例:
[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /fastdetect
C:\grldr="Ubuntu"
C:\="Previous Version of Windows"
解釋
[編輯]- [boot loader]節:配置啟動菜單的細節。
- timeout=30:timeout選項控制啟動菜單顯示的時間長度,單位為秒,最短為0,此時啟動菜單不顯示。
- default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS:default選項控制啟動菜單的默認選項。
- [operating systems]節:列舉啟動項目。
- multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /fastdetect:基於Windows NT的系統的啟動項目。
- C:\grldr="Ubuntu":基於非Windows NT的系統的啟動項目。
- C:\="Previous Version of Windows"
多語言支持
[編輯]NTLDR不支援多語言,如果中日韓版本的Windows NT 5.x NTLDR找不到BOOTFONT.BIN字型檔案,會自動顯示英語代替。Windows Boot Manager支援多語言。
常見問題
[編輯]NTLDR的問題常見於使用者不慎將該文件刪除,這樣會導致Windows NT系列系統無法啟動,開機時將以黑屏白字顯示錯誤信息:"NTLDR is missing, Press CTRL+ALT+DEL to restart." 當用戶重啟後又將出現上述信息,這樣就無法進入系統。
解決該問題需要向光驅內放入一張相應的Windows安裝光碟,開機時先將BIOS設置為從光盤啟動,進入系統安裝菜單後再選擇進入故障恢復台,按屏幕相關說明進入命令行模式,然後將光盤根目錄下i386文件夾內的「ntldr」文件和「ntdetect.com」拷貝至系統分區根目錄下,重新啟動後將BIOS設置回復為硬盤啟動即可[5]。
參考來源
[編輯]- ^ Microsoft. Windows 2000 Professional Resource Kit 1st. Redmond, WA: Microsoft Press. 2000. ISBN 1-57231-808-2.
- ^ Rick Maybury, Startup and Shutdown Problems, part 1 (頁面存檔備份,存於網際網路檔案館), Bootcamp, 2009, accessed 25 April 2012
- ^ 3.0 3.1 3.2 Russinovich, Mark. Boot INI Options Reference. Windows Sysinternals Library on TechNet. Microsoft. November 1, 2006 [August 19, 2009]. (原始內容存檔於2008-04-30).
- ^ How to Triple Boot to Windows NT, Windows 95/98, and MS-DOS. Microsoft Support. 2007-01-19 [2019-10-12]. (原始內容存檔於2015-06-02).
- ^ NTLDR文件丢失的解决方案. [2010-11-26]. (原始內容存檔於2010-11-25).