NTLDR

来自Local Chinese Wikipedia
跳转到导航 跳转到搜索

NTLDRNT loader缩写)是微软Windows NT系列操作系统(直至Windows XPWindows Server 2003)的引导程序。NTLDR可以从硬盘以及CD-ROMU盘等移动存储器运行并引导Windows NT系统的启动。如果要用NTLDR启动其他操作系统,则需要将该操作系统所使用的启动扇区代码保存为一个文件,NTLDR可以从这个文件加载其它引导程序

File:Windows Advanced Options menu.png
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).