UEFI 固件可以强制 OS 更改其启动模式吗?
Can UEFI firmware force the OS to change its boot mode?
Windows 8 和 10 默认启动时启用了 Hiberboot,所以当您转到开始->电源->关机时,系统实际上进入了 S4,而不是 S5。在某些情况下,我需要能够强制 Windows 从 S4 执行完全启动而不是 "wake",而不管它之前是如何关闭的。我试图强制我的 UEFI BIOS BootMode 始终为 BOOT_WITH_FULL_CONFIGURATION,但它无济于事 - Windows 仍然采用快速启动路径。
过去,可以在 BI 中使用 Simple Boot Flag 设置 DIAG 模式OS;这可能对我有用,但似乎 Windows 8/10 仍不支持它。是否有某些 UEFI 变量或其他方式与 OS 通信以在完全模式或诊断模式下启动?
以下是我为解决此问题所做的工作。我注册了一个 ExitBootServices 事件回调,并在该例程中检查启动模式是否为 BOOT_ON_S4_RESUME。我还检查我的其他内部条件,所以如果系统从 S4 唤醒并且我需要强制启动 diagnostic/full,我只需执行 gRT->ResetSystem (...)。 ExitBootServices 事件在 Windows 引导过程中已经足够远了,因此此时突然重置会使它废弃 Hiberfil 数据并进行完全引导。
似乎没有明显的不利影响,例如任何错误消息 - 重置后它可以干净地启动。从视觉上看,重置是在显示 Windows 徽标后立即发生的,因此用户体验应该也不错。我不知道这种方法是否会成为生产代码,但我认为这是一个成功的实验。
Windows 8 和 10 默认启动时启用了 Hiberboot,所以当您转到开始->电源->关机时,系统实际上进入了 S4,而不是 S5。在某些情况下,我需要能够强制 Windows 从 S4 执行完全启动而不是 "wake",而不管它之前是如何关闭的。我试图强制我的 UEFI BIOS BootMode 始终为 BOOT_WITH_FULL_CONFIGURATION,但它无济于事 - Windows 仍然采用快速启动路径。
过去,可以在 BI 中使用 Simple Boot Flag 设置 DIAG 模式OS;这可能对我有用,但似乎 Windows 8/10 仍不支持它。是否有某些 UEFI 变量或其他方式与 OS 通信以在完全模式或诊断模式下启动?
以下是我为解决此问题所做的工作。我注册了一个 ExitBootServices 事件回调,并在该例程中检查启动模式是否为 BOOT_ON_S4_RESUME。我还检查我的其他内部条件,所以如果系统从 S4 唤醒并且我需要强制启动 diagnostic/full,我只需执行 gRT->ResetSystem (...)。 ExitBootServices 事件在 Windows 引导过程中已经足够远了,因此此时突然重置会使它废弃 Hiberfil 数据并进行完全引导。
似乎没有明显的不利影响,例如任何错误消息 - 重置后它可以干净地启动。从视觉上看,重置是在显示 Windows 徽标后立即发生的,因此用户体验应该也不错。我不知道这种方法是否会成为生产代码,但我认为这是一个成功的实验。