无忧启动论坛

标题: 开机按F8出现修复计算机选项原理 [打印本页]

作者: yjqd    时间: 2018-11-13 12:58
标题: 开机按F8出现修复计算机选项原理
开机按 F8出现“修复计算机”选项
reagentc配置winre正确后,在开机按 F8出现“修复计算机”选项
其实开机按 F8出现“修复计算机”选项并不是reagentc自身的作用实现的,是reagentc配置winre时,向bcd中操作系统标识{比如win7}项写入了数据

recoverysequence {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}是winre在bcd中的标识

BCDEDIT是编辑bcd的工具,用它可实现开机按 F8出现“修复计算机”选项
随便写一个结构正确的bcd启动标识,比如:{00000000-0000-0000-0000-000000000000}
执行下面命令:
BCDEDIT -set {比如win7} recoverysequence {00000000-0000-0000-0000-000000000000}
开机按 F8也会出现“修复计算机”选项,当然它不能启动任何内容

按上面原理,把bcd中配置好的pe启动项的标识写入bcd{current}中
PE启动的标识{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
BCDEDIT -set {比如win7} recoverysequence {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
开机按 F8出现“修复计算机”选项,选择“修复计算机”,就可启动PE了

再增加一条命令
BCDEDIT -set {比如win7} recoveryenabled  Yes   当系统启动出现故障时,会自动启动winre
recoveryenabled的值如果为No 当系统启动出现故障时,不会自动启动winre,只能手动开机按F8

你可以测试一下,把C:\windows\system32的winload.exe改为其它名称,当recoveryenabled为Yes时,启动win7,会自动启动winre,当recoveryenabled为No时,启动win7,不会自动启动winre


作者: holley2008    时间: 2018-11-13 14:37
学习了!
作者: 23070205    时间: 2018-11-13 14:50
技术好贴
作者: 窄口牛    时间: 2018-11-13 14:52
所以说bcd是动态的,不可靠。
作者: 时光漫步    时间: 2018-11-14 09:24
学习了,谢谢!
作者: levinsky    时间: 2018-11-14 10:12
谢谢分享
作者: pio9999    时间: 2018-11-14 10:40
谢谢分享,辛苦啦
作者: being    时间: 2018-11-14 12:24
怎么取得PE的标识{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}?
作者: yjqd    时间: 2018-11-14 22:13
being 发表于 2018-11-14 12:24
怎么取得PE的标识{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}?

创建pe启动项时就会产生标识{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}

Windows 启动加载器
-------------------
标识符                  {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
device                  ramdisk=[boot]\winpe.wim,{ramdiskoptions}
path                    \windows\system32\boot\winload.exe
description             Win8PE
作者: vaf    时间: 2018-11-14 22:58
一问题只涉一项不会错
一问题涉及千头万绪必有错
作者: 南城旧梦    时间: 2018-12-7 15:56
好贴,收藏了
作者: 南城旧梦    时间: 2018-12-7 15:56
好贴,收藏了
作者: 南城旧梦    时间: 2018-12-7 15:56
好贴,收藏了
作者: chishingchan    时间: 2018-12-8 10:55
{比如win7} 这里看不懂,能不能列个标准一点的示例?
作者: yjqd    时间: 2018-12-8 20:02
本帖最后由 yjqd 于 2018-12-8 20:04 编辑
chishingchan 发表于 2018-12-8 10:55
{比如win7} 这里看不懂,能不能列个标准一点的示例?


比如你安装了win7,那么bcd中有win7的启动项,有winre启动项,winre主要是用来为系统服务的,它的启动标识符会出现在win7的启动项中,win7启动出现问题时便会凭标识符以调用winre

我说的BCDEDIT -set {比如win7} recoverysequence {00000000-0000-0000-0000-000000000000}中的{比如win7},意思是bcd中win7的启动项的标识符
如果你启动的win7是当前系统,就可以:

BCDEDIT -set {current} recoverysequence {e8e6343d-f6d6-11e8-9f8d-c0f8dab23362} 红色的是winre启动项标识符

Windows 启动加载器
-------------------
标识符                  {current}
device                  partition=C:
path                    \windows\system32\winload.exe
description             Windows 7
locale                  zh-CN
inherit                 {bootloadersettings}
recoverysequence       {e8e6343d-f6d6-11e8-9f8d-c0f8dab23362}
recoveryenabled         Yes
osdevice                partition=C:
systemroot              \windows
resumeobject            {6caac07e-ddb6-11e8-9cf4-b2480dc20ac0}
nx                      OptIn
作者: chishingchan    时间: 2018-12-8 23:44
如果运行 bcdedit 后显示以下的内容:
Windows 启动加载器
-------------------
标识符                  {current}
device                  partition=C:
path                    \windows\system32\winload.exe
description             Windows 7
locale                  zh-CN
inherit                 {bootloadersettings}
recoverysequence        {e8e6343d-f6d6-11e8-9f8d-c0f8dab23362}
recoveryenabled         Yes
osdevice                partition=C:
systemroot              \windows
resumeobject            {6caac07e-ddb6-11e8-9cf4-b2480dc20ac0}
nx                      OptIn


BCDEDIT -set {current} recoverysequence {e8e6343d-f6d6-11e8-9f8d-c0f8dab23362}
运行上面这行是不是等于没有被更改过?因为系统现时默认就是 {e8e6343d-f6d6-11e8-9f8d-c0f8dab23362}

作者: yjqd    时间: 2018-12-10 12:02
chishingchan 发表于 2018-12-8 23:44
如果运行 bcdedit 后显示以下的内容:
Windows 启动加载器
-------------------

如果BCDEDIT -set {current} recoverysequence 后面的标识和当前系统中 {current}下面的recoverysequence 后面的标识一样,当然是没被更改




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/) Powered by Discuz! X3.3