NTLDRNT loader缩写)是微软Windows NT系列操作系统(直至Windows XPWindows Server 2003)的引导程序。NTLDR可以从硬盘以及CD-ROMU盘等移动存储器运行并引导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).