NTLDRNT loader縮寫)是微軟Windows NT系列作業系統(直至Windows XPWindows Server 2003)的引導程式。NTLDR可以從硬碟以及CD-ROMUSB手指等移動記憶體執行並引導Windows NT系統的啟動。如果要用NTLDR啟動其他作業系統,則需要將該作業系統所使用的啟動磁區代碼儲存為一個檔案,NTLDR可以從這個檔案載入其它引導程式

Windows XP的NTLDR進階開機選單

NTLDR主要由兩個檔案組成,這兩個檔案必須放在系統分區(根據微軟的定義,為在MBR中標識為活動分區的分區,一般為第一個分區/C分區):

  • NTLDR,這是引導程式本身
  • NTDETECT.COM,用於檢測基礎硬件資訊,以便系統正常啟動。

boot.ini也是比較重要的檔案。它是引導程式的組態檔。當boot.ini遺失時,NTLDR會啟動第一塊硬碟第一個分區上的\Windows目錄中的系統。

在安裝、維護Windows NT系統時,可以使用fixmbr命令在硬碟中寫入啟動NTLDR引導程式的代碼。

Windows VistaWindows 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。

啟動步驟 編輯

  1. 與一般的系統啟動行程一致,BIOS呼叫MBR,然後呼叫活動分區的卷引導記錄,該卷引導記錄被設計為搜尋NTLDR,並執行之。
  2. NTLDR的第一部分被呼叫。此時系統進入保護模式,並可以辨識並執行PE格式的可執行檔案。
  3. NTLDR的第二部分,OSLOADER.EXE被呼叫。OSLOADER.EXE中內嵌有FATNTFSISO 9660三種檔案系統的驅動,啟動管理器,以及INI檔案讀取器的CAB檔案解壓縮器。OSLOADER中附帶的檔案系統驅動通過BIOS中斷直接訪問磁碟,因為內核和HAL此時都沒有被載入。此時系統可以訪問磁碟內的檔案。
  4. 如果Windows被置於休眠模式,讀取hiberfil.sys中的內容並將其寫入記憶體,然後恢復系統的執行。
  5. OSLOADER使用內建的INI檔案讀取器,試圖讀取boot.ini檔案的內容,並組態啟動選單。如果boot.ini不存在,OSLOADER將視為boot.ini中有且僅有一個指向multi(0)disk(0)rdisk(0)partition(1)\WINDOWS且沒有參數的啟動專案。如果boot.ini中只存在一個啟動專案,則忽略timeout的時間設置(視為0)。
  6. 向用戶顯示啟動選單,並按照timeout的時間設置倒計時。如果用戶按下按鍵,則停止倒計時。(這樣即使只有一個啟動專案,當用戶在自檢結束後狂按F8鍵,也可以進入進階開機選單)
  7. 如果一個非NT的系統被選擇,OSLOADER載入列表項中指定的啟動磁區代碼檔案,並移交控制權。此時系統回到真實模式。如果沒有指定檔案(常見於Windows 9x和Windows NT共存),則載入bootsect.dos,然後移交控制權,由其搜尋並載入IO.SYS。
  8. 如果一個NT系統被選擇,OSLOADER呼叫NTDETECT.COM。NTDETECT將檢測系統硬件相關的資訊,決定系統將使用的硬件設定檔,並將以上資訊交給OSLOADER。
  9. OSLOADER根據NTDETECT返回的系統硬件相關資訊,載入列表項中指定的資料夾中的Windows NT內核態管理程式(Windows Executive),包括NTOSKRNL.EXEHAL.DLL。此外尚有KDCOM.DLL及BOOTVID.DLL也在這個階段載入。
  10. OSLOADER載入登錄檔的SYSTEM組態單元,其中包含數個系統組態集,每個組態集都包括應當載入的驅動程式和服務等;以及一系列指示標誌,指向預設組態集、上次啟動失敗的組態集及「最後一次正確的組態」對應的組態集。OSLOADER根據用戶選擇及上次啟動情況選擇組態集,讀取對應的應當載入的驅動程式列表。
  11. 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的系統的啟動專案。
    • multi(0)disk(0)rdisk(0)partition(1)\WINDOWS:對於基於Windows NT的系統,系統檔案路徑由ARC路徑給出。
    • "Microsoft Windows XP Professional":啟動專案的友好名稱,即顯示在啟動選單中的名稱。
    • /fastdetect:指定預設的引導參數。使用進階引導選單啟動系統會覆蓋引導參數的設置。
      • /fastdetect:不檢測串行介面的滑鼠。[3]
      • /noexecute=optin:在Windows XP SP2後預設安裝的系統會有該引導參數,意為為基本Windows程式和服務啟用數據執行保護(DEP)。[3]
  • C:\grldr="Ubuntu":基於非Windows NT的系統的啟動專案。
    • C:\grldr:對於基於非Windows NT的系統,引導磁區檔案路徑由DOS路徑給出。
    • 「grldr」是GRUB4DOS的預設引導磁區檔名。Ubuntu曾使用Wubi提供在Windows下安裝Ubuntu的解決方案。
  • C:\="Previous Version of Windows"
    • C:\:對於基於MS-DOS的系統,在非三方啟動(DOS、Windows 9x、Windows NT共存)、非啟動到恢復控制台的情況下,引導磁區檔案名稱可以省略,此時視為「C:\bootsect.dos」。
    • 在三方啟動情況下,需要進行一些特殊操作,比如「/WIN95」和「/WIN95DOS」參數用來模擬單系統狀況,且引導磁區檔案名稱不可省略。[4][3]
    • 恢復控制台對應的啟動專案一般為:C:\CMDCONS\BOOTSECT.DAT="Microsoft Windows Recovery Console" /cmdcons

多語言支援 編輯

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]

參考來源 編輯

  1. ^ Microsoft. Windows 2000 Professional Resource Kit  1st. Redmond, WA: Microsoft Press. 2000. ISBN 1-57231-808-2. 
  2. ^ Rick Maybury, Startup and Shutdown Problems, part 1頁面存檔備份,存於互聯網檔案館, Bootcamp, 2009, accessed 25 April 2012
  3. ^ 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). 
  4. ^ How to Triple Boot to Windows NT, Windows 95/98, and MS-DOS. Microsoft Support. 2007-01-19 [2019-10-12]. (原始內容存檔於2015-06-02). 
  5. ^ NTLDR文件丢失的解决方案. [2010-11-26]. (原始內容存檔於2010-11-25).