NTLDR

NTLDRNT 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内核态管理程序,并移交控制权。

boot.ini
在确认系统为冷启动,即非休眠模式后,NTLDR所做的第一件事为读取boot.ini。

示例
以下是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:不检测串行接口的鼠标。
*** /noexecute=optin:在Windows XP SP2后默认安装的系统会有该引导参数,意为为基本Windows程序和服务启用数据执行保护(DEP)。。

参考来源

评论 (0)

  • 还没有评论,来抢沙发吧。