本教程针对于UEFI启动来叙述的,根据普遍的支持UEFI的机器来叙述。

标题简要说明:
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(or efi)分区引导文件分析

在微软win10 x64的操作系统,分析efi分区的全部文件,分别存在: 
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 语言

例:

 bcdboot c:\windows /l zh-cn

我们执行完这段代码后:

bcdboot.exe 会修复系统引导,而且会同时修复计算机默认引导和Windows 默认引导,在efi分区同时出现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.efi和Bootmgfw.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默认引导是否存在或者是否正确。

http://bbs.wuyou.net/forum.php?mod=viewthread&tid=303679&page=3#pid2789441

http://bbs.wuyou.net/forum.php?mod=viewthread&tid=299643&page=1

Windows Boot Manager、Bootmgfw.efi、Bootx64.efi、bcdboot.exe 文件的关系的更多相关文章

  1. [转载] 关于Windows Boot Manager、Bootmgfw.efi、Bootx64.efi、bcdboot.exe 的详解

    原帖: http://bbs.wuyou.net/forum.php?mod=viewthread&tid=303679 前言:1.本教程针对于UEFI启动来叙述的,根据普遍的支持UEFI的机 ...

  2. bios中只有windows boot manager下用U盘启动

    在重装系统的时候,很多时候都是先进入bios设置成U盘启动项,然后进行安装,如果年代久远一点的,就设置成光驱启动,再进行:随着时间的推行,光驱已经开始淘汰了,也怀念以前的光驱装机的时光!-:) 开始进 ...

  3. 用U盘安装 win7 ”找不到任何设备驱动程序“ 和 系统出现 windows boot manager 解决方案

    用U盘安装win7系统时,系统交替的出现了如下的2个错误,捣鼓了半天,记录下来: 问题1描述: 安装win7时  ”找不到任何设备驱动程序“  问题2描述: 安装win7时,用U盘启动后, 系统出现 ...

  4. 关于Windows Boot Manager、Bootmgfw.efi、Bootx64.efi、bcdboot.exe 的详解

    1. http://bbs.wuyou.com/forum.php?mod=viewthread&tid=303679&fromuid=396698

  5. Windows Boot Manager改成中文菜单

    用管理员身份运行"命令提示符",依次执行以下命令 bcdedit /deletevalue {bootmgr} device bcdedit /deletevalue {bootm ...

  6. Windows 7/8/8.1 误删EFI启动项,无法开机解决方式(U盘+原版镜像)

    今天手贱把Windows 7的启动项删了.由于是GPT分区,EFI引导的,又不像MBR那般easy解决 想想重装系统也麻烦,并且仅仅是删了个启动项而已.就不是必需去费那个时间 想了一下,Windows ...

  7. Windows 10 Manager v2.3.3

    Windows 10 Manager 是专门用于微软 Windows10 的集所有功能于一身的实用工具,它包括了40多个不同的实用程序来优化.调整.清理.加快和修复您的 Windows 10,可以让你 ...

  8. (转)The windows boot configuration data file dose not contain a valid OS entry

    开价蓝屏,显示: Windows failed  to start. A recent hardware or software change might be the case.to fix the ...

  9. FAQ: SBS 2011. The Windows SBS Manager service terminated unexpectedly

    Symptoms The Windows SBS Manager service is stopped with EventID 7034 every half an hour on SBS 2011 ...

随机推荐

  1. mybatis基础CURD的学习

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "- ...

  2. 重新修改AD中PCB的形状快捷键

    Altium Designer 快速修改板子形状为Keep-out layer大小   1,切换到 Keep-out layer层,   2,选择层,快捷键为S+Y:   3,设计-板子形状-按照选择 ...

  3. 并发 ping

    参考 [root@RS2 ~]# cat .sh #!/bin/bash # --, by wwy #------------------------------------------------- ...

  4. hdu3359 Kind of a Blur

    因为变化出来的是平均数,那么就可以对每一个变化出来的列方程,直接高斯消元就行了. #include<bits/stdc++.h> #define N 100005 #define LL l ...

  5. LIS(最长上升子序列)的 DP 与 (贪心+二分) 两种解法

    正好训练赛来了一道最长递减序列问题,所以好好研究了一下最长递增序列问题. B - Testing the CATCHER Time Limit:1000MS     Memory Limit:3000 ...

  6. 短网址资料-nginx非root用户启动-systemctl启动脚本-分割root权限

    https://www.cnblogs.com/aspnethot/articles/3492191.htmlhttps://www.cnblogs.com/aspnethot/articles/34 ...

  7. POJ 1469:COURSES

    COURSES Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 19458   Accepted: 7658 Descript ...

  8. JavaSE--Arrays.copyof

    背景: 想偷懒一次数组赋值下面多个例子复制下数组就好了.. 以为 Arrays.copyof(Arrays.copyof内部调用的是 System.copy, 所以同 Arrays.copy)拷贝出来 ...

  9. Spring框架-IOC和AOP

    IOC:它并不是一种技术实现,而是一种设计思想.在任何一个有实际开发意义的程序项目中,我们会使用很多类来描述它们特有的功能,并且通过类与类之间的相互协作来完成特定的业务逻辑.这个时候,每个类都需要负责 ...

  10. Unity获取游戏对象详解

    我觉得Unity里面的Transform 和 GameObject就像两个双胞胎兄弟一样,这俩哥们很要好,我能直接找到你,你也能直接找到我.我看很多人喜欢在类里面去保存GameObject对象.解决G ...