Windows引导加载程序(Windows Boot Loader)
NTLDR 引导文件存储于系统分区 \ntldr,引导配置文件存储于系统分区 \boot.ini(如果没有 BOOT.INI 文件,则 NTLDR 对于 Windows 2000 之前的系统选择 \WINNT\SYSTEM32,对于新系统选择 \WINDOWS\SYSTEM32)。
BOOTMGR
BIOS(Legacy BIOS)模式启动:引导文件位于系统分区下 \bootmgr,启动管理器配置文件BCD(Boot Configuration Data,启动配置数据)位于系统分区下 \Boot\BCD,系统加载程序 winload.exe 存储在 \Windows\System32\winload.exe (\Windows\System32\Boot\winload.exe)。
UEFI 模式启动:引导文件位于EFI系统分区 (ESP) \EFI\Microsoft\Boot\bootmgfw.efi,启动管理器配置文件BCD位于 EFI系统分区 (ESP) \EFI\Microsoft\Boot\BCD,系统加载程序 winload.efi 存储在 \Windows\System32\winload.efi (\Windows\System32\Boot\winload.efi)。
EFI系统分区下 \EFI\Boot\bootx64.efi 与 \EFI\Microsoft\Boot\bootmgfw.efi 各自的作用
关于Windows Boot Manager、Bootmgfw.efi、Bootx64.efi、bcdboot.exe 的详解
bootx64.efi 是计算机默认引导文件,UEFI的必需引导文件,bootx64.efi是一个通用名,任何有效的efi文件都可以被重命名为bootx64.efi并被计算机启动加载,权限丰富且大于Windows默认引导,如果 Windows 默认的引导文件不在了,启动计算机默认的引导文件 Bootx64.efi 也是可以启动计算机的,在Windows系统中,bootx64.efi 一般是 bootmgfw.efi 的副本文件。使用计算机默认引导文件可以在各种环境下启动计算机,包括EFI SHELL、ISO、Windows、Linux等。
bootmgfw.efi 是 Windows默认引导文件,是UEFI中的“Windows Boot Manager”的引导固件,bootmgfw是“Boot Manager Firmware”的缩写,bootmgfw.efi不是通用名,只适合启动Windows。
bootmgr.efi 的作用
- 物理机使用实体光盘系统镜像或者虚拟机中使用ISO系统镜像从UEFI启动时才会使用 bootmgr.efi,光盘引导的中间文件
简述系统启动过程
BIOS → 读取 MBR(加载MBR扇区引导代码) → 读取 分区表DPT(查找活动分区) → 读取激活分区PBR(加载PBR扇区引导代码) → 加载系统引导程序 bootmgr → 读取BCD → 选择启动系统 → Winload.exe → 加载内核、驱动、服务等 → 启动整个操作系统
UEFI → 读取 EFI系统分区(ESP) → 加载系统引导程序 bootmgr(bootmgfw.efi) → 读取 BCD → 选择启动系统 → Winload.efi → 加载内核、驱动、服务等 → 启动整个操作系统
NTLDR
NTLDR(NT Loader)是Windows 2000/XP/2003以及之前的引导加载程序。它在系统启动时起着至关重要的作用。以下是NTLDR加载操作系统文件的基本流程:
BIOS自检
- BIOS执行POST(Power-On Self-Test)检查计算机硬件。
加载BIOS设置
- BIOS从CMOS芯片中加载用户设置,这些设置包括启动顺序、系统时间和日期等。
搜索启动设备
- 根据BIOS中设置的启动顺序,BIOS开始搜索可启动的设备。
MBR(主引导记录)加载
- BIOS找到启动设备(例如硬盘)并加载MBR。MBR包含一个小的引导代码和分区表,用于找到活动分区。
活动分区的引导扇区
- MBR将控制权传递给活动分区的引导扇区。对于装有Windows的分区,这通常涉及加载NTLDR。
NTLDR 加载
- 引导扇区加载NTLDR文件。NTLDR文件通常位于系统分区的根目录中,它是一个隐藏文件,用于加载Windows。
加载 BOOT.INI
- NTLDR读取BOOT.INI文件。BOOT.INI包含一个或多个操作系统的列表,以及关于每个操作系统的启动参数的信息。
用户交互
- 如果BOOT.INI包含多个操作系统条目,NTLDR将显示一个菜单,让用户选择要启动的操作系统。如果没有用户交互,NTLDR将加载默认的操作系统。
加载 NTDETECT.COM
- NTLDR运行NTDETECT.COM,它检测计算机上安装的硬件。
加载 HAL 和 System Registry
- 根据用户的选择和BOOT.INI的配置,NTLDR加载硬件抽象层(HAL)和系统注册表信息。
选择 Windows 系统目录
加载内核和驱动程序
- NTLDR加载Windows内核(NTOSKRNL.EXE)和硬件驱动程序,这些驱动程序是在系统注册表中定义的,并且通常包含在SYSTEM32\DRIVERS目录中。
启动 Windows
- Windows内核接管,初始化系统,加载更多的设备驱动程序,然后启动Winlogon.exe进程,进而启动用户登录和用户界面。
这个流程是Windows NT系列操作系统(包括Windows XP和Windows Server 2003)的通用启动过程。Windows Vista及更高版本的Windows使用一个不同的引导加载程序(BOOTMGR),其流程有所不同。
BOOTMGR
"bootmgr"(Windows Boot Manager)是Windows Vista/7及更高版本的引导加载程序。它在BIOS和UEFI两种固件类型的系统中有稍微不同的工作方式。下面分别介绍在BIOS和UEFI环境下,
传统BIOS环境
BIOS自检
- BIOS执行POST(Power-On Self-Test)检查计算机硬件。
加载BIOS设置
- BIOS从CMOS芯片中加载用户设置,这些设置包括启动顺序、系统时间和日期等。
搜索启动设备
- 根据BIOS中设置的启动顺序,BIOS开始搜索可启动的设备。
MBR加载
- BIOS找到启动设备并加载其MBR(主引导记录)。
活动分区
- MBR找到设置为活动的分区,并加载该分区的引导扇区。
BOOTMGR加载
BCD存储
- BOOTMGR读取Boot Configuration Data(BCD)存储,获取有关已安装的操作系统和启动参数的信息。
操作系统选择
- 如果有多个操作系统,BOOTMGR显示一个菜单供用户选择。否则,它直接加载默认的操作系统。
Winload.exe加载
- BOOTMGR加载操作系统加载程序(例如
winload.exe)。
Windows内核加载
Winload.exe加载Windows内核(NTOSKRNL.EXE)及其必要的驱动程序,并将控制权转交给它。
Windows启动
- Windows内核开始初始化过程,加载设备驱动程序,并最终启动操作系统。
UEFI环境
UEFI固件初始化
EFI系统分区
- UEFI固件读取EFI系统分区,并从中加载BOOTMGR文件。
BCD存储
- BOOTMGR读取BCD存储,获取有关已安装的操作系统和启动参数的信息。
操作系统选择
- 如果有多个操作系统,BOOTMGR显示一个菜单供用户选择。否则,它直接加载默认的操作系统。
Winload.efi加载
- BOOTMGR加载EFI操作系统加载程序(例如
winload.efi)。
Windows内核加载
Winload.efi加载Windows内核(NTOSKRNL.EXE)及其必要的驱动程序,并将控制权转交给它。
Windows启动
- Windows内核开始初始化过程,加载设备驱动程序,并最终启动操作系统。
这两种情况下的主要区别在于BIOS使用MBR来找到启动代码,而UEFI使用EFI系统分区。在UEFI模式下,文件系统已经在EFI系统分区中,因此BOOTMGR可以直接被固件加载,而不需要通过引导扇区代码。
扩展
来源:https://blog.51cto.com/hsuing/1669729
WindowsXP系统启动:开机自检——将MBR代码读入内存,管理权交给MBR-MBR读取分区表DPT——DPT读取硬盘中的活动分区(系统控制权交给该分区的PBR)。到这里为止和安装的系统无关,前面讲过活动分区就是系统分区,而系统分区里面含有“启动文件”(NTLDR)——接着读取同目录下的BOOT.INI文件(系统启动菜单管理文件)——进入WindowsXP系统。
Windows7系统启动:开机自检——将MBR代码读入内存,管理权交给MBR-MBR读取分区表DPT——DPT读取硬盘中的活动分区(系统控制权交给该分区的PBR)。到这里为止和安装的系统无关,前面讲过活动分区就是系统分区,而系统分区里面含有“启动文件”(BOOTMGR)——接着读取同目录下的BCD文件(启动配置文件)——交给启动分区的Winload.exe——进入Windows7系统。
WindowsXP和Windows7双系统启动:开机自检——将MBR代码读入内存,管理权交给MBR-MBR读取分区表DPT——DPT读取硬盘中的活动分区(系统控制权交给该分区的PBR)。到这里为止和安装的系统无关,前面讲过活动分区就是系统分区,而系统分区里面含有“启动文件”(BOOTMGR)——读取同目录下的\BOOT\BCD和BOOT.INI文件——列出启动菜单:如果选择Windows7接下来由Winload.exe接管;如果选择WindowsXP接下来由NTLDR接管。
为什么在Windows7的基础上装WindowsXP双系统后,只能进入WindowsXP?
答:系统安装过程中会更新PBR,WindowsXP系统将PBR修改成为适合WindowsXP的了,因此无法进入Windows7。