我无法理解 ESP 调用引导管理器之后的过程,它将开始加载引导加载程序并传递给内核。
我提到的最后一步是无法理解这里是否会调用 NTDETECT 或 NTOSKRNL,然后调用 WINLOGON 或 LTASS?或者它与 UEFI GPT 引导有何不同?
有人能解释一下吗?
答案1
我无法理解 ESP 调用引导管理器之后的过程,它将开始加载引导加载程序并传递给内核。
启动过程由固件 (EFI) 执行,而不是由 ESP 执行。“ESP”只是一个保存固件使用的文件(引导加载程序等)的分区。
EFI 固件有一个内置的启动管理器,它将设置存储在 NVRAM 中:这就是它如何知道实际要加载 ESP 中的哪个文件。
但是,当谈到 BOOTMGR 或 NTLDR 之类的东西时,固件实际上并没有区分引导管理器和引导加载程序 - 它们都只是由固件启动的 .efi 应用程序。(并且在 BIOS 中,两者都是同一种引导扇区。)
如果应用程序支持显示菜单来选择操作系统(如 NTLDR 或 BOOTMGR 所做的那样),那么它就被称为启动管理器;如果它支持启动操作系统内核本身(如 WINLOAD 所做的那样),那么它就被称为引导加载程序;但对于固件来说,它仍然是同一类型的程序。
因此在 BIOS 上:
- 固件读取 NVRAM 数据(通常称为“CMOS”或“BIOS 设置”),告诉它使用哪个磁盘的 MBR。
- 固件启动 MBR 引导扇区,然后从 Windows 系统分区启动 BOOTMGR(Windows 引导管理器的 BIOS 变体)。
- Windows 启动管理器读取 BCD 并在需要时显示菜单,然后从主 Windows 分区启动 WINLOAD.EXE(Windows 启动加载程序的 BIOS 变体)。
- Windows 启动加载程序启动 NTOSKRNL.EXE(主 Windows 内核)。
在 UEFI 上:
- 固件读取 NVRAM 数据(EFI 变量),告诉它
*.EFI
使用哪个文件以及在哪个磁盘上找到它。 - 固件从 EFI 系统分区启动 BOOTMGFW.EFI(Windows 启动管理器的 EFI 变体)。
- Windows 启动管理器读取 BCD 并在需要时显示菜单,然后从主 Windows 分区启动 WINLOAD.EFI(Windows 启动加载程序的 EFI 变体)。
- Windows 启动加载程序启动 NTOSKRNL.EXE(主 Windows 内核)。
两者最终都会启动相同的内核。之后的过程对于两种固件类型也相同。Windows 组件(例如 LSASS)不管无论您是在 EFI 模式还是 BIOS 模式下启动——当它们启动时,固件的主要任务就已经完成。