我在 UEFI、GPT 模式下设置了 Windows Vista/7 双启动(即使用 EFI 系统分区进行启动)。Windows 启动管理器让我在 7 和 Vista 之间进行选择,并且两个操作系统都运行良好。然后我在另一个分区中安装了 Windows 10,问题就从那时开始。Windows 10 用自己的启动管理器替换了 ESP 中的旧 Windows 7 启动管理器,尽管 Windows Vista 仍出现在操作系统列表中,但在启动时,它会崩溃并出现 STOP 0x0000001e。(不过,我仍然能够启动 Windows 7)。
四处搜寻后我发现这个人遇到了同样的问题。他能够确定 Windows 8 也会导致此问题,但最后我认为他放弃了(他说这是“Vista 不支持的驱动程序”,但我认为这不是我的情况,因为我之前使用过所有驱动程序,Vista 都可以正常工作)。
所以,为什么 Windows 10(和 8)启动管理器无法加载 Windows Vista?。我以为 Boot Manager 所做的唯一一件事就是加载并将控制权转移到特定的操作系统加载程序,但它似乎做了更多的事情,其中之一就是现在阻止 Vista 加载。bcdedit /enum all /v
在 Windows 10 中使用时,我发现 Vista 引导加载程序下有一些“隐藏”变量:
custom:42000002 \system32\winload.efi
custom:45000001 2
custom:47000005 301989892
2
这里(在模板元素副标题中)它说这些元素来自 BCDSRV.DLL 文件,最重要的是:
直到 Windows 7 中的 BCDSRV.DLL 中的类型库才将 BcdSetupInteger_DeviceType 真正计算为整数的数据类型。所有 Windows Vista 版本都将其设为 0x41000001。
如该页面表格所示,Windows 7+ 的值是0x45000001,这与我的输出中出现的相同bcdedit
。这可能是问题的原因吗?Vista 期望一个 0x41000001 元素,但 Windows 10 替换了它,现在它传递了 0x45000001,Vista 无法识别它。但为什么 Windows 7 本身之前没有替换它呢?此外,我无法找到有关 0x47000005 元素的信息。我尝试了以下操作:
- 使用删除所有三个条目
bcdedit /deletevalue
,但是没有作用(相同的 BSOD)。 - 尝试使用设置“正确”元素 0x41000001
bcdedit /set
,但它抱怨该设备无效,因为它被指定,并且参数不正确(这是有道理的,因为这个元素在 Windows 7 和 10 上的 BCDSRV.DLL 中不再存在)。 bcdboot D:\Windows
,根据这会将启动文件从选定的安装复制到 ESP(Vista 安装在驱动器 D 上),但它也不起作用(而且它似乎没有复制任何文件,因为文件夹中的所有文件\EFI\Microsoft\Boot
仍然具有 Windows 10 文件的日期和大小)。
在我看来,似乎存在一些结构限制,导致 Windows 10 启动管理器无法正确加载 Windows Vista 加载器,但我不知道它是什么以及是否可以“修复”。
如果这不可能,我想到了一个解决方法。由于 Windows 7 启动管理器能够正确启动 Vista,因此我可以将其安装在 ESP 中,与 Windows 10 启动管理器一起安装。然后,使用 UEFI 启动菜单,我可以选择要加载哪个启动管理器:Windows 7 或 Windows 10。Windows 7 应该能够启动 Windows Vista(但不能启动 Windows 10,为此我必须选择 Windows 10)。但我不知道该怎么做。我认为将 Windows 7 启动管理器文件从 Windows 7 安装复制到 ESP(在另一个文件夹中,比如说\EFI\Win7mgr\Boot
)是不够的;为了让 UEFI 识别它们,必须在 NVRAM 中设置一些值(可能是启动管理器的路径),但我不知道该怎么做。
(由于我是该网站的新手,请告诉我最后一部分是否应该放在另一个问题中)
额外细节:
- 安全启动:主板上不存在(华硕 P8H61-M LX,大约从 2011 年起)
- UEFI 操作系统:在 UEFI 启动菜单(启动时按 Del 进入)中,显示以下设备:
UEFI: Windows Boot Manager (Hard disk id)
DVD drive id
Hard disk id (BIOS mode, I assume)
UEFI: UEFI OS (Hard disk id)
我发现UEFI OS
一个是位于的引导加载程序\EFI\Boot\bootx64.efi
,如果 UEFI 找不到 NVRAM 中设置的另一个条目(我认为),则用作后备,并且在安装 Windows 后,它实际上是EFI\Microsoft\Boot\bootmgfw.efi
(Windows 10 启动管理器,我自己测试过)的副本。如果我无法按照我的目的解决方法设置 NVRAM,我是否可以将 Windows 7 启动管理器文件复制到该目录(\EFI\Boot
)并将 Windows 7 重命名bootmgfw.efi
为,bootx64.efi
以便我可以通过UEFI OS
在 UEFI 启动菜单中选择来加载它,而无需创建或更新 NVRAM 条目,因为该选项应该已经存在?