无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 195485|回复: 178
打印 上一主题 下一主题

[原创] 关于Windows Boot Manager、Bootmgfw.efi、Bootx64.efi、bcdboot.exe 的详解..

    [复制链接]
跳转到指定楼层
1#
发表于 2013-4-17 23:06:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 2011hiboy 于 2013-4-19 01:12 编辑

前言:
1、本教程针对于UEFI启动来叙述的,根据普遍的支持UEFI的机器来叙述
2、本教程以Windows 8 X64 来作为参考

标题简要说明:
Windows Boot Manager  --------安装完Windows系统后而出现的启动选项(相关的信息存储在NVRAM),可以删除和建立和bcdboot.exe有关
Bootmgfw.efi  --------引导Windows的引导文件  
Bootx64.efi ---------UEFI的必需引导文件
bcdboot.exe--------修复UEFI启动的命令行工具,微软出品


开始前先引进两个概念:

计算机默认引导  
-----------就是不管你的计算机有没有操作系统,定义了UEFI启动后将通过Bootx64.efi 引导你的计算机,并进入各种模式,维护、安装、计算机或者系统
                                          这里是 Bootx64.efi ,它只是一个通用名,权限丰富且大于Windows 默认,就是说如果你的Windows 默认的启动文件不在了,
                                          启动计算机默认的引导文件Bootx64.efi 也是可以启动计算机的。使用计算机默认文件随时可以在各种环境下启动计算机,EFI SHELL、ISO、
                                          Windows、Linux...都可以,通吃型.

Windows默认引导 -------就是你为计算机安装了操作系统,或者修复了UEFI引导后,启动菜单会有 Windows Boot Manager 选项,该选项默认从bootmgfw.efi 启动系统
                                          bootmgfw.efi  该位置的该文件只能用于启动Windows,不是通用名,权限单一




========================================================
0、
对于UEFI启动环境来说,Bootx64.efi 用处更大,这里Bootx64.efi 是个通用名,就是所任意有效的efi改成Bootx64.efi 都被计算机启动加载,并启动。
bootmgfw.efi 不是通用名,只适合启动Windows。

当然对于UEFI启动Windows来说Bootx64.efi 和bootmgfw.efi 其实是同一个文件,二者的循环冗余校验CRC值是一样的。
他们都有启动windows的能力,但是身处的位置不一样,

efi\boot\bootx64.efi
efi\microsoft\boot\bootmgfw.efi

对系统的引导产生的影响肯定也不一样,下面我们来验证....
======================================================


从三个方向来讲:(以下结论都经过事实验证,经得住任何怀疑和猜测!!)
========================================================
1、光盘介质UEFI启动【已验证】:

通过分析微软原装镜像的UEFI引导记录(efisys.bin)我发现,最初出光盘的引导文件是efi\boot\bootx64.efi,因为此项验证较简单,我总共验证了:
win7 x64 ;win8 x86 ;win8 x64 三者的光盘引导文件分别是 bootx64.efi  bootia32.efi  bootx64.efi

结论:UEFI在光盘上的启动不依赖于操作系统,可认为是无操作系统环境,故 bootx64.efi计算机默认引导文件========================================================

2、移动磁盘介质UEFI启动【已验证】:

普遍的,可以从论坛上看到通过bootx64.efi 启动U盘

结论:UEFI在移动磁盘介质上的启动不依赖于操作系统,可认为是无操作系统环境,故 bootx64.efi计算机默认引导文件
========================================================

3、本地磁盘介质UEFI启动【已验证】:

::原生ESP分区引导文件分析

我为此安装了微软win8 x64的操作系统,分析ESP分区的全部文件,分别存在
efi\boot\bootx64.efi
efi\microsoft\boot\bootmgfw.efi

我们不禁思考:
哪个文件测试真正用到的呢?计算机默认启动哪个呢?系统默认启动哪个呢?

那好很简单,我们依次删除他们看看系统能否启动就知道了....

1、删除 bootmgfw.efi ,保留 bootx64.efi  

>结果:
选择 从本地硬盘启动 系统仍然可以引导进入
选择 Windows Boot Manager
进入失败


2、删除 bootx64.efi ,保留 bootmgfw.efi  

>结果:
选择 从本地硬盘启动 进入失败
选择 Windows Boot Manager 系统仍然可以引导进入

结论:
bootx64.efi
计算机默认引导文件
bootmgfw.efi 是 Windows默认引导文件



4、bcdboot 和 “Windows Boot Manager ” “ Bootmgfw.efi” “  Bootx64.efi ” 之间的联系

bcdboot 修复系统引导的命令格式: bcdboot 系统位置 /l 语言

例:
  1. bcdboot c:\windows /l zh-cn
复制代码
当我们执行了上述代码后:

bcdboot.exe 会修复系统引导,而且会同时修复计算机默认引导Windows 默认引导,在ESP分区同时出现bootx64.efi和bootmgfw.efi,

并且bootx64.efi是由bootmgfw.efi 改名而来的。与此同时在Boot Menu启动选择菜单那里生成“Windows Boot Manager”,

Windows Boot Manager 及其包含的信息是保存在主板上的NVRAM里面的,而不是保存在硬盘上,故删除Windows Boot Manager需要到BIOS设置区删除。

::这里我们如果通过bcdedit查看bcd文件的话,我们可以发现,bootmgfw.efi 是 Windows默认引导文件。所以我们的结论同原生ESP分区测试的结论一样。


UEFI规范中,关于NVRAM的正解:
NVRAM是BIOS ROM中的一段区域,一般定义为64k byte, 现在EFI把所有的变量都存在这里。



结论:
bootx64.efi
计算机默认引导文件
bootmgfw.efi 是 Windows默认引导文件


最后:
写这篇帖子最主要的原因,是能够让那些不是很明白Bootx64.efiBootmgfw.efi区别的、或者模糊知道的朋友,清楚了解二者之间的关联以及区别不要再有 Bootx64.efi就是Bootmgfw.efi改名而来的、Bootx64.efi就是Bootmgfw.efi
像这些不正确的说法,以免误导后来的朋友.....
准确的说:“
Bootx64.efi 可以是 Bootmgfw.efi,也可以是其他任意有效的efi程序

另:
通过上面的验证可以知道UEFI下修复Windows 引导可以分为:修复计算机默认引导Windows默认引导。

比较通用的是修复计算机默认引导,如果你能够会UEFI下手动/自动修复计算机默认引导,那么修复Windows 默认引导也不在话下,

从UEFI层面上说,Windows其实是计算机的一个efi应用,它被计算机包含了。所以修复计算机默认引导才是万能的

当然在不会手动修复的时候,bcdboot还是很有用的,正常情况下都能修复。只要你的系统没有经过过度精简,bcdboot应该都能搞定,
能够学会手动修复就不用担心这些了。



下方是一个手动修复计算机默认引导的视频教程,在一楼底部,视频看起来很直观,一看就懂。修复计算机默认引导后,我们可以直接引导Windows,
而可以不必理会Windows默认引导是否存在或者是否正确。


【完美版】挂载GPT磁盘的ESP分区的批处理+手动修复UEFI+GPT系统引导视屏教程
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=300068&fromuid=396698


计算机默认引导的一些文件参考:
UEFI启动详解:启动分析+N项操作实例,赶紧进来学习,不要落伍啦,该给自己充电咯...
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=299643&fromuid=396698

评分

参与人数 29无忧币 +129 收起 理由
879792799 + 5 专业
likeyouli + 1 非常感谢,受益良多
wywangwang + 5 赞一个!
anythingsky + 5 很给力!
katanalyp + 5 很给力!
anarki2001 + 3
bala0707 + 1 <font style="vertical-align: inh
supmou + 5 赞一个!
wjzj + 3 很给力!
brook + 5 赞一个!
rolensifix + 5 很给力!
丛山一叶 + 5 很给力!
jinql + 3 赞一个!
hzghgz + 5 赞一个!
goodsky + 3 很给力!
szmsys + 5 神马都是浮云
armymangl + 5 很给力!
zhangxx + 5 这个绝对是硬货。我TM百度了半天,这个就是.
yijingmo + 5 很给力!
xuxuezeng + 5 很给力!
tm7801 + 5 很给力!
pinpai + 5 学到老,活到老哈
sincerelysw + 5 很给力!
wyqdlthy + 5 赞一个!
wakin20 + 5 很给力!
詹姆斯草 + 5 赞一个!
2011hjcjie + 5 赞一个!
hero8000 + 5 很给力!
zds1210 + 5 很给力!

查看全部评分

推荐
发表于 2014-3-29 20:43:25 | 只看该作者
最近开始学习UEFI启动
回复

使用道具 举报

推荐
发表于 2013-4-17 23:16:08 | 只看该作者
myBOOT 发表于 2013-4-17 23:10
晕,还在编辑呀?
不知道STD、VOL、Pro的bootx64.efi相同么?

bootx64版本很多,大同小异,都能引导,有什么不同就要问微软是怎么写的了,要么就自己参照联盟技术规范试着编写吧
回复

使用道具 举报

推荐
发表于 2013-4-17 23:10:11 | 只看该作者
晕,还在编辑呀?
不知道STD、VOL、Pro的bootx64.efi相同么?
回复

使用道具 举报

推荐
 楼主| 发表于 2013-4-18 02:06:13 | 只看该作者
fujianabc 发表于 2013-4-18 01:33
顺便说一下我以前研究过的windows启动光盘中一堆.efi文件的作用,比如bootx64.efi,cdboot.efi,cdboot_nop ...

现在win8安装盘那些文件都明白了。呵呵

大家一起研究,大家一起进步才对。把自己知道的分享给不知道的朋友....

其实也很开心
回复

使用道具 举报

6#
 楼主| 发表于 2013-4-17 23:46:24 | 只看该作者
2013hkwwcl 发表于 2013-4-17 23:16
bootx64版本很多,大同小异,都能引导,有什么不同就要问微软是怎么写的了,要么就自己参照联盟技术规范试 ...

这个还真不会写。我只是明白他的用途,和特性。
回复

使用道具 举报

7#
发表于 2013-4-18 01:33:28 | 只看该作者
本帖最后由 fujianabc 于 2013-4-18 01:35 编辑

顺便说一下我以前研究过的windows启动光盘中一堆.efi文件的作用,比如bootx64.efi,cdboot.efi,cdboot_noprompt.efi,bootmgr.efi:

1、efisys.bin中的bootx64.efi和cdboot.efi作用相同,就是找到光盘根目录中的bootmgr.efi并执行,而且会有按任意键从光盘启动的提示
2、cdboot_noprompt.efi和cdboot.efi功能类似,但不会出现按任意键从光盘启动的提示,与之对应efisys_noprompt.bin也是一个软盘镜像,里面的bootx64.efi功能和cdboot_noprompt.efi相同

3、bootmgr.efi不是一个efi可执行文件,需要配合cdboot.efi或者cdboot_noprompt.efi或者bootx64.efi才能执行。其作用类似于bios中ntldr和bootmgr的没有文件头的osloader.exe和bootmgr.exe
4、bootmgfw.efi是直接可执行的文件,只需要单独一个文件即可启动入bootmgr菜单,而不需要cdboot.efi、cdboot_noprompt.efi、bootx64.efi、bootmgr.efi中的任意一个文件。相当于bios中的bootmgr

还试了一下,用bootmgfw.efi替换efisys.bin中的bootx64.efi(文件名还是bootx64.efi),可以直接启动,udf的光盘中一个.efi都不用,可以全删

点评

牛叉,向大神学习  详情 回复 发表于 2018-11-9 09:35
这个 cdboot.efi和 cdboot_noprompt.efi,从哪里可以得到? 是从 efisys_noprompt.bin和 efisys.bin,减压 BOOTX64.EFI改名吗? 我查看了 Win10的iso镜像,和 Windows\boot文件夹,没看到有 cdboot.efi和 cdboot_n  详情 回复 发表于 2018-2-25 13:10
学习了  详情 回复 发表于 2017-11-5 22:30
菜鸟来请教一个问题:efisys.bin中的bootx64.efi怎么看到,怎么替换?  详情 回复 发表于 2013-12-8 23:50
分析地太好了!  详情 回复 发表于 2013-6-8 09:31
回复

使用道具 举报

8#
发表于 2013-4-18 10:10:22 | 只看该作者
最近开始学习UEFI启动,虽然不知什么时候才有电脑进行实践。
回复

使用道具 举报

9#
 楼主| 发表于 2013-4-18 12:28:14 | 只看该作者
hero8000 发表于 2013-4-18 10:10
最近开始学习UEFI启动,虽然不知什么时候才有电脑进行实践。

你可以使用虚拟机实验啊。原理一样的,效果95%以上相似。剩下的5%就和各大厂商的主板,bios bug有关了。

点评

什么虚拟机可以试验efi?  详情 回复 发表于 2014-12-22 19:42
回复

使用道具 举报

10#
 楼主| 发表于 2013-4-18 13:33:05 | 只看该作者
本帖最后由 2011hiboy 于 2013-4-19 00:44 编辑

UEFI规范中,关于NVRAM的正解:
NVRAM是BIOS ROM中的一段区域,一般定义为64k byte, 现在EFI把所有的变量都存在这里。

点评

我的电脑里bios 里面貌似没有NVRAM 。进bios看不到什么和uefi有关的,boot选项里面只有从硬盘启动,网络启动。光盘启动。uefi启动,只认/efi/boot/bootx64.efi,找到他就能启动,否则失败,bios里面没有能选择efi启动  详情 回复 发表于 2013-6-2 13:16
回复

使用道具 举报

11#
 楼主| 发表于 2013-4-18 13:45:44 | 只看该作者
本帖最后由 2011hiboy 于 2013-4-19 00:44 编辑

UEFI规范中,关于NVRAM的正解:
NVRAM是BIOS ROM中的一段区域,一般定义为64k byte, 现在EFI把所有的变量都存在这里。
回复

使用道具 举报

12#
发表于 2013-4-18 13:55:46 | 只看该作者
看了楼主的视频,问题讲得透彻,楼主真的很强大!—— 惟一不足的声音有点小。
回复

使用道具 举报

13#
 楼主| 发表于 2013-4-18 14:07:02 | 只看该作者
本帖最后由 2011hiboy 于 2013-4-19 00:45 编辑

UEFI规范中,关于NVRAM的正解:
NVRAM是BIOS ROM中的一段区域,一般定义为64k byte, 现在EFI把所有的变量都存在这里。
回复

使用道具 举报

14#
 楼主| 发表于 2013-4-18 16:41:49 | 只看该作者
本帖最后由 2011hiboy 于 2013-4-19 00:45 编辑

UEFI规范中,关于NVRAM的正解:
NVRAM是BIOS ROM中的一段区域,一般定义为64k byte, 现在EFI把所有的变量都存在这里。
回复

使用道具 举报

15#
发表于 2013-4-18 17:07:35 | 只看该作者
2011hiboy 发表于 2013-4-18 12:28
你可以使用虚拟机实验啊。原理一样的,效果95%以上相似。剩下的5%就和各大厂商的主板,bios bug有关了。

谢谢。有空试试。刚开始学习。
回复

使用道具 举报

16#
发表于 2013-4-18 17:25:38 | 只看该作者
来好好学习这些知识,多谢楼主分享
回复

使用道具 举报

17#
发表于 2013-4-18 23:47:25 | 只看该作者
我在VirtualBox下建立GPT+UEFI,可惜VBOX不支持UEFI启动。
不知道QEMU支持么?

点评

VBox 討論區那邊的說法提到. 現階段MS不支援Vbox的efi shell ...沒辦法!  发表于 2013-5-26 16:12
回复

使用道具 举报

18#
发表于 2013-4-19 07:25:10 | 只看该作者
很给力,学习了,赞一个!
回复

使用道具 举报

19#
发表于 2013-4-20 00:36:48 | 只看该作者
有没有关于 bcd 文件的,  还有没有作用?
回复

使用道具 举报

20#
发表于 2013-4-23 12:34:18 | 只看该作者
LZ辛苦了,学习ing……
回复

使用道具 举报

21#
发表于 2013-4-25 15:18:23 | 只看该作者
回贴是一种付出,付出就会有回报,祝那些回帖的人看到本帖茅塞顿开...
回复

使用道具 举报

22#
发表于 2013-4-25 16:42:39 | 只看该作者
myBOOT 发表于 2013-4-18 23:47
我在VirtualBox下建立GPT+UEFI,可惜VBOX不支持UEFI启动。
不知道QEMU支持么?


还是安心用vmware吧,嫌体积大,就用vmware player
回复

使用道具 举报

23#
发表于 2013-5-21 17:39:08 | 只看该作者
看贴回帖是美德。楼主写得很清楚。
回复

使用道具 举报

24#
发表于 2013-6-2 13:16:01 | 只看该作者
2011hiboy 发表于 2013-4-18 13:33
UEFI规范中,关于NVRAM的正解:
NVRAM是BIOS ROM中的一段区域,一般定义为64k byte, 现在EFI把所有的变量都 ...

我的电脑里bios 里面貌似没有NVRAM 。进bios看不到什么和uefi有关的,boot选项里面只有从硬盘启动,网络启动。光盘启动。uefi启动,只认/efi/boot/bootx64.efi,找到他就能启动,否则失败,bios里面没有能选择efi启动文件的选项,是不是bios精简的太厉害了,lenovo V370.

点评

不能说精简,只是以前的BIOS就这样,其实我的BIOS和你的情况一样的。NVRAM针对那些新电脑来说的。  详情 回复 发表于 2013-6-2 23:04
回复

使用道具 举报

25#
 楼主| 发表于 2013-6-2 23:04:26 | 只看该作者
2013_jesson 发表于 2013-6-2 13:16
我的电脑里bios 里面貌似没有NVRAM 。进bios看不到什么和uefi有关的,boot选项里面只有从硬盘启动,网络启 ...

不能说精简,只是以前的BIOS就这样,其实我的BIOS和你的情况一样的。NVRAM针对那些新电脑来说的。
回复

使用道具 举报

26#
发表于 2013-6-8 09:25:55 | 只看该作者
这个分析地太好了!
回复

使用道具 举报

27#
发表于 2013-6-8 09:31:43 | 只看该作者
fujianabc 发表于 2013-4-18 01:33
顺便说一下我以前研究过的windows启动光盘中一堆.efi文件的作用,比如bootx64.efi,cdboot.efi,cdboot_nop ...

分析地太好了!
回复

使用道具 举报

28#
发表于 2013-6-30 11:40:32 | 只看该作者
不错啊,一天就学习了不少东西
回复

使用道具 举报

29#
发表于 2013-7-1 22:56:37 | 只看该作者
回帖,支持LZ的研究精神。不过现在的 UEFI都还保留支持bios启动的盘,呵呵,至少我见过的好几台dell机子是这样。
回复

使用道具 举报

30#
发表于 2013-7-5 15:35:22 | 只看该作者
这段文章加上那两个视频,真的的懂了,楼主果然是NB人。
回复

使用道具 举报

31#
发表于 2013-7-8 15:34:04 | 只看该作者
想请教bcdboot能不能在bcd当中添加关于pe的引导项目????

点评

成功了吗?UEFI引导PE。  详情 回复 发表于 2017-10-11 19:12
能。可以。  详情 回复 发表于 2016-7-28 08:20
可用bcdedit修改bcd中的相关信息  详情 回复 发表于 2013-10-5 13:37
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-3-29 15:04

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表