使用 Bitlocker 全驱动器加密对 Windows 启动时出现的错误 0xc000000e 进行故障排除

Sig*_*uza 4 mbr bitlocker multi-boot bootmgr bcd

注:我原本以为是BCD的问题,结果是错的。


我最初的笔记本电脑设置如下:

  • 具有 OS X 10.10 和本机全驱动器加密 (FileVault) 的 300 GB 分区。
  • 具有 Windows 10 和本机全驱动器加密 (BitLocker) 的 200 GB 分区。
  • 安装在 ESP 中的 rEFInd 启动管理器/EFI/boot
  • 安装在 ESP 中的 Microsoft 启动管理器/EFI/Microsoft/Boot

两天前,我将 OS X 分区缩小到 200GB,并在中间添加了一个 100GB 的分区,我在上面安装了 Ubuntu。
从那时起,我一直无法启动 Windows。
进入 Windows 启动管理器时,我仍然提示输入密码,但之后,我看到一个屏幕说

您的 PC/设备需要维修

发生意外的错误。

错误代码:0xc000000e

然后我插入了我的 Windows 10 安装驱动器,并从命令行 ( ShiftF10)检查了分区。
diskpart事实证明无法挂载分区,因为它显然是在 MBR 上运行的。
(我确保我在 EFI 模式下启动了安装驱动器(通过 rEFInd 中的手动启动节),所以我希望diskpart在 GPT 上运行,但是哦……)

MBR 最初包含四个分区:

  • 静电除尘器
  • 麦金塔高清
  • 恢复高清
  • 训练营

GPT 在 BOOTCAMP 之后还包含一个 BitLocker 恢复分区。
原来,添加Linux分区发生了变化,将BOOTCAMP从列表中推出,并让“Linux HD”成为第四个分区。
我只是简单地调整了 MBR 以再次获得 BOOTCAMP 的最后一个入口点,从而“跳过”Linux 分区。

在那之后,我仍然能够启动 OS X 和 Ubuntu,现在我也能够从diskpart.
我设法解锁了分区

manage-bde -unlock W: -Password
Run Code Online (Sandbox Code Playgroud)

证明 1) 我没有弄乱 MBR,2) 分区仍然完好无损。

有鉴于此,我很确定问题出在 BCR 上。
由于我仍然不清楚的原因,我无法从安装驱动器安装 ESP - 尝试为磁盘 0 的第一个分区分配一个驱动器号告诉我“没有指定卷”,但list volume只列出了已经安装的所有内容。
bootrec /rebuildbcd也失败了,从安装驱动器中删除 BCD 文件。
但是,我可以简单地将 BCD 复制到安装驱动器,并bcdedit在其上使用。

bcedit /store BCD 印刷:

Windows Boot Manager
--------------------
identifier              {bootmgr}
device                  unknown
path                    \EFI\Microsoft\Boot\bootmgfw.efi
description             Windows Boot Manager
locale                  en-US
inherit                 {globalsettings}
default                 {default}
resumeobject            {cc3e7046-4857-11e5-a015-f353893f9a4c}
displayorder            {default}
toolsdisplayorder       {memdiag}
timeout                 30

Windows Boot Loader
-------------------
identifier              {default}
device                  unknown
path                    \Windows\system32\winload.efi
description             Windows 10
locale                  en-US
inherit                 {bootloadersettings}
recoveryenabled         No
custom:16000060         Yes
custom:17000077         352321653
osdevice                unknown
systemroot              \Windows
resumeobject            {cc3e7046-4857-11e5-a015-f353893f9a4c}
nx                      OptIn
custom:250000c2         1
Run Code Online (Sandbox Code Playgroud)

现在这些unknown对我来说看起来不太好,所以我将它们改为partition=W:使用

bcdedit /store BCD /set {default} device partition=W:
bcdedit /store BCD /set {default} osdevice partition=W:
Run Code Online (Sandbox Code Playgroud)

我验证了结果:

Windows Boot Manager
--------------------
identifier              {bootmgr}
device                  unknown
path                    \EFI\Microsoft\Boot\bootmgfw.efi
description             Windows Boot Manager
locale                  en-US
inherit                 {globalsettings}
default                 {default}
resumeobject            {cc3e7046-4857-11e5-a015-f353893f9a4c}
displayorder            {default}
toolsdisplayorder       {memdiag}
timeout                 30

Windows Boot Loader
-------------------
identifier              {default}
device                  partition=W:
path                    \Windows\system32\winload.efi
description             Windows 10
locale                  en-US
inherit                 {bootloadersettings}
recoveryenabled         No
custom:16000060         Yes
custom:17000077         352321653
osdevice                partition=W:
systemroot              \Windows
resumeobject            {cc3e7046-4857-11e5-a015-f353893f9a4c}
nx                      OptIn
custom:250000c2         1
Run Code Online (Sandbox Code Playgroud)

但是在将该 BCD 文件推回我的 ESP 后,Windows 启动管理器甚至不再提示我输入密码,而是立即向我显示一个不同的错误,说

您的 PC/设备需要维修。

无法加载应用程序或操作系统,因为缺少所需文件或包含错误。

文件:\Windows\system32\winload.efi 错误代码:0xc0000225

我尝试在解密驱动器之前和之后进行设置device,结果相同。 设置了也没有什么区别。现在,我很确定这是一个退步,因为它甚至不再要求我输入密码。osdeviceW:
device{bootmgr}

我还注意到bcdedit /store BCD,鉴于没有数据更改,即使运行也对文件进行了大量更改。
除其他外,该文件显然包含自己的路径,Volume1\EFI\Microsoft\Boot\BCD用于原始 BCD 文件和??\C:\BCD我修改后的文件。
我起初担心,这将在某种程度上“impurify”的文件,但我跑的测试,改变description{default}Windows 42,这又引起了颇多文件中的变化,但Windows启动管理器还问我要使用该文件时的密码,因此自定义文件位置既不会“净化”文件,也不会bcdedit损坏我正在使用的文件。

现在,最后我的问题是:

如何修复我的 BCD?
或者,如果这不是问题,那么问题是什么,我该如何解决?


附加信息:

diskutil list

/dev/disk0
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *500.3 GB   disk0
   1:                        EFI EFI                     209.7 MB   disk0s1
   2:          Apple_CoreStorage                         200.4 GB   disk0s2
   3:                 Apple_Boot Recovery HD             650.1 MB   disk0s3
   4:       Microsoft Basic Data                         99.0 GB    disk0s4
   5:       Microsoft Basic Data                         199.7 GB   disk0s5
   6: DE94BBA4-06D1-4D40-A16A-BFD50179D6AC               363.9 MB   disk0s6
/dev/disk1
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:                  Apple_HFS Macintosh HD           *200.0 GB   disk1
                                 Logical Volume on disk0s2
                                 4A45027B-2703-4C7D-816E-3419DE0F0F61
                                 Unlocked Encrypted
Run Code Online (Sandbox Code Playgroud)

sudo gpt show -l /dev/disk0

gpt show: /dev/disk0: Suspicious MBR at sector 0
      start       size  index  contents
          0          1         MBR
          1          1         Pri GPT header
          2         32         Pri GPT table
         34          6         
         40     409600      1  GPT part - "EFI System Partition"
     409640  391334208      2  GPT part - "Customer"
  391743848    1269760      3  GPT part - "Recovery HD"
  393013608       1688         
  393015296  193355776      4  GPT part - "Linux HD"
  586371072       2048         
  586373120  390019148      5  GPT part - "BOOTCAMP"
  976392268       1972         
  976394240     710656      6  GPT part - ""
  977104896        131         
  977105027         32         Sec GPT table
  977105059          1         Sec GPT header
Run Code Online (Sandbox Code Playgroud)

sudo fdisk /dev/disk0

Disk: /dev/disk0    geometry: 60821/255/63 [977105060 sectors]
Signature: 0xAA55
         Starting       Ending
 #: id  cyl  hd sec -  cyl  hd sec [     start -       size]
------------------------------------------------------------------------
 1: EE    0   0   2 - 1023 254  63 [         1 -     409639] <Unknown ID>
*2: DA 1023 254  63 - 1023 254  63 [    409640 -  391334208] <Unknown ID>
 3: AF 1023 254  63 - 1023 254  63 [ 391743848 -    1269760] HFS+        
 4: 07 1023 254  63 - 1023 254  63 [ 586373120 -  390019148] HPFS/QNX/AUX
Run Code Online (Sandbox Code Playgroud)

带有原始 BCD 的 Windows 启动管理器:

要求密码

输入密码后带有原始 BCD 的 Windows 启动管理器:

错误 0xc000000e

带有修改过的 BCD 的 Windows 启动管理器:

错误 0xc0000225

更新 1:

我尝试在 MBR 中将 BOOTCAMP 标记为“可引导”,完全没有变化。

Sig*_*uza 6

BCD 实际上很好,是 MBR 造成了所有麻烦。

我已经解密了我的驱动器[1]并试图重新安装 Windows,但是在选择驱动器时给了我一个弹出窗口,上面写着“这个硬盘驱动器使用 MBR,但基于 EFI 的系统只能安装在 GPT 驱动器上”。
显然,在 Windows 上,MBR 优先于 GPT。

我继续更换?我的 MBR 带有“保护性”,使用

sudo gdisk /dev/disk0   # On Linux, use /dev/sda
r                       # Recovery/transformation
x                       # Expert mode
n                       # New protective MBR
w                       # Write changes to disk
y                       # Yes (confirm)
Run Code Online (Sandbox Code Playgroud)

(在 Linux 上,gdisk应该默认安装(否则尝试sudo apt-get install gdisk),在 Mac 上,您可以从这里获取。)

这终于解决了我的问题。


[1]似乎这实际上不是必需的,但为了记录:假设您的加密驱动器被标记为W:,首先从安装驱动器命令行解锁它,然后运行manage-bde -off W:,不时检查进度,然后manage-bde -status W:重新启动一次加密命中 0%。