注:方法总结写在了最后,是探索过程。
升级了Windows 10开发者预览版,Build版本号16193。升级之后由于重重原因,打算回退Windows 10 Creator正式版。进行系统恢复时发现,原可以引导系统的U盘,出现了错误。
具体的错误现象:停滞在windows Boot Manager界面,错误代码:0xc0e90002。查询宏映射得知0xc0e90002被映射为:STATUS_SYSTEM_INTEGRITY_POLICY_VIOLATION。看来是权限的问题。于是,关闭了secure boot,还是不行。
我想,是不是这个版本的windows 10修改了UEFI的RAM代码,导致只能认16193以及更高的版本。我的电脑上正好有Fedora 26 Alpha测试版,调整好启动项,Fedora顺利开机。于是,排除了只认windows的可能。进而想到,应该不是修改了UEFI的RAM代码。(仅仅是应该,不确定是不是只识别16193更高版本)那么问题来了,怎么能把这个系统重装……
Dism++这个软件开发团队设计了一个功能,在windows RE中运行Dism++。Windows RE是一个Windows应急恢复环境。

图1 RE中运行Dism++选项
在Windows RE中果然恢复成功。(恢复的是我以前备份过的Creator正式版系统)。出于好奇,我又试了一下U盘启动,还是0xc0e90002。
是不是应该更新一下U盘中的Windows PE。一天过去了,无论如何(U+,量产)都不能正确引导。

图2 Windows PE
我的电脑只有UEFI没有BIOS,所以必须把U盘制作成FAT32格式,然而这个格式又不能放大于4G的文件,所以……很头疼。先不管格式了,全盘格式成FAT32.
用UltraISO这个软件进行U+启动盘制作。所有的都试过了。仍然不好使。PE已经用到了Creator更新的PE。
上网搜了一个制作U+的PE。微PE。这个PE在知乎上评价很高,在此也推荐给大家。

图3 WEPE网站

图4安装界面
在安装界面可以看到,直接安装到硬盘是可以的。为了排除U盘的干扰,这里直接安装到了硬盘。没有时间点击完成安装,直接操作Win+X——U——R(意思是重启)。屏幕上:Surface——进度条——选择一个操作系统——“winPE”——【重启】——Surface——进度条——Windows BOOT Management——0xc0e90002,再次GG。
既然是权限的问题,那么就跟证书有关。进入EFI分区,看到若干证书,修改时间是升级Insider的时间,还有BCD文件,修改时间就是安装微PE工具箱的时间。由于新版windows 10 Creator(Build版本号1703)没办法正常映射EFI分区。用磁盘工具DiskGenius强制映射一下,提示系统错误,没有指定权限……是不是权限不足?管理员身份运行,“系统错误”。于是用起了windows自带的diskpart。
先看看图,和图下的文字说明,没什么可以打字的。

图5 diskpart

图6 DiskPart分配盘符

图7表面上看起来很好的E盘


图8,图9迷惑性的可以取得权限

图10傻眼了吧,根本没有安全选项卡

图11一键添加超级管理员权限的代码

图12驱动器上根本没有取得管理员权限选项
想到System权限吗?Windows XP及以前的时代,可以直接System权限运行个explorer.exe,方法大家上网搜吧。Windows Vista后,不能像XP那么简单获取System权限了。Windows 7以前(windows 8 8.1没有测试过)可以通过创建服务的方式来取得System权限。代码还是给你们放出来。

图13 Win7 System权限获取代码

图14 Microsoft :休想随便取得System权限
糟糕,可是我还有一个最后的办法取得System权限。替换讲述人(Narrator.exe)。

图15讲述人的原型

图16取得Narrator的超级管理员权限

图17分配修改权限


图18 19替换成功的Narrator.exe

图20成功取得system权限

图21休想在System权限运行explorer.exe

图22终于可以了(这个是现在正常的样子,故障的时候哪里想得到截图)
用C:WindowsBoot替换EFI分区里面的关键文件
替换完成后,心惊胆战的重启了一下,进入系统了,长舒一口气。
测试PE,仍然0xc0e90002。
尝试bcdboot

图23想用bcdboot修复EFI分区

图24正常状态下可以修复的EFI分区(故障的时候这个直接提示权限不足)

图25 System权限下也不能修复
真正的解决方案——mountvol

图26 mountvol界面
看了一眼说明之后,mountvol H: /s
奇迹出现了,EFI分区可以进去了,我把它备份了一下,彻底格式化(因为毕竟要返厂了,无所谓了),在一连串bcdboot c:windows /l zh-cn /s h: /f UEFI
重启
果然,不能进系统了。
抱着碰碰运气的心里关闭了“安全启动”(secure boot)。
Surface——进度条——选择一个操作系统——Windows 10——正在寻找你——欢迎
哇!
重启——Surface——进度条——选择一个操作系统——Windows PE——重启——Surface——Windows Boot Management——Loading Files——进度条——Windows PE正在启动
!!!
插入以前做好的U盘,Surface——Windows Boot Management——Loading Files——进度条——Windows PE正在启动
尘埃落定。
总结一下:步骤
1.用mountvol这个微软自带工具,将EFI分区映射为本地磁盘。
在以管理员身份运行的命令提示符窗口输入mountvol H: /s
H就是待映射的盘符,这里举个例子为H盘。
给出mountvol官方文档:
Mountvol创建、删除或列出卷装入点。
用法
MOUNTVOL [drive:]path VolumeName
MOUNTVOL [drive:]path /D
MOUNTVOL [drive:]path /L
MOUNTVOL [drive:]path /P
MOUNTVOL /R
MOUNTVOL /N
MOUNTVOL /E
MOUNTVOL drive: /S
path 指定装入点将驻留的现有NTFS目录。
VolumeName 指定装入点的目标的卷名称。
/D 从指定的目录中删除卷装入点。
/L 列出指定目录的已装入的卷名称。
/P 从指定目录删除卷装入点,卸下此卷并使此卷无法装入。您可以创建
一个卷来再次使此卷可以装入。
/R 删除不在系统中的、卷的装入点目录和注册表设置。
/N 禁用新卷的自动装入。
/E 再次启用新卷的自动装入。
/S 将EFI系统分区装载到提供的驱动器。
2.用DiskGenius格式化EFI分区,格式FAT32
3.在以管理员身份运行的命令提示符窗口输入bcdboot c:windows /l zh-cn /s H: /f UEFI
C:Windows要替换成你安装的Windows所在磁盘
H替换成你映射EFI的盘符
给出bcdboot官方文档
Bcdboot - Bcd启动文件创建和修复工具。
bcdboot.exe命令行工具用于将关键启动文件复制到系统分区以及创建新的系统BCD存储
bcdboot[/l] [/s] [/v]
[/m [{OS Loader ID}]]
source 指定windows系统根目录的位置。
/l 指定在初始化BCD存储时使用的可选区域设置参数。
默认值为“简体中文”。
/s 指定一个可选的卷号参数,该参数用于指定要将启动环境文件复到
的目标系统分区。默认值为固件标识的系统分区。
/v 启用详细模式。
/m 如果提供了操作系统加载器GUID,则此选项可以将给定的加载器
对象与系统模板合并起来,以产生可启动条目。否则,只合并全局
对象。
示例: bcdboot c:windows /l en-us
bcdboot c:windows /s h:
bcdboot c:windows /m {d58d10c6-df53-11dc-878f-00064f4f4e08}
4.重启计算机