1

默认情况下,Windows 8 和 10 是在启用 Hiberboot 的情况下启动的,因此当您转到 Start->Power->Shutdown 时,系统实际上会进入 S4,而不是 S5。在某些情况下,我需要能够强制 Windows 执行完全启动,而不是从 S4“唤醒”,无论它之前是如何关闭的。我试图强制我的 UEFI BIOS BootMode 始终为 BOOT_WITH_FULL_CONFIGURATION,但这无济于事 - Windows 仍然采用快速启动路径。

过去,可以在 BIOS 中使用 Simple Boot Flag 设置 DIAG 模式;这可能对我有用,但 Windows 8/10 似乎仍然不支持它。是否有一些 UEFI 变量或其他一些与操作系统通信的方式以在完全模式或诊断模式下启动?

4

1 回答 1

1

这是我为解决这个问题所做的。我注册了一个 ExitBootServices 事件回调,并在该例程中检查启动模式是否为 BOOT_ON_S4_RESUME。我还检查了我的其他内部条件,因此如果系统从 S4 唤醒并且我需要强制诊断/完全启动,我只需执行 gRT->ResetSystem (...)。ExitBootServices 事件在 Windows 启动过程中已经足够深入,因此此时突然重置会使其废弃 Hiberfil 数据并进行完全启动。

似乎没有明显的不利影响,例如任何错误消息 - 它在重置后启动干净。从视觉上看,重置发生在显示 Windows 徽标之后,因此用户体验也应该没问题。我不知道这种方法是否会成为生产代码,但我认为这是一个成功的实验。

于 2016-01-10T03:49:32.607 回答