2015-12-24 157 views
1

默认情况下,Windows 8和10默认是在启用Hiberboot的情况下启动的,所以当您进入开始 - >电源 - >关闭时,系统会进入S4而不是S5。我需要在某些情况下可以强制Windows执行完全启动,而不是从S4中“唤醒”,无论先前是如何关闭的。我试图强制我的UEFI BIOS BootMode始终为BOOT_WITH_FULL_CONFIGURATION,但这并没有帮助 - Windows仍然需要快速启动路径。UEFI固件是否可以强制操作系统更改其启动模式?

过去,可以在BIOS中用简单引导标志设置DIAG模式;这可能对我有用,但它似乎并没有在Windows 8/10中支持。是否有一些UEFI变量或其他方式与操作系统进行通信以在完整或诊断模式下引导?

+0

针对您的问题的解决方案将与您使用的实施和硬件高度相关,即新的英特尔芯片具有棒状寄存器,可保持启动状态,直到CMOS电池复位。你能提供更多关于你使用的硬件的信息吗? –

+0

为什么解决方案要与硬件绑定?我需要我的UEFI驱动程序以一种或多或少的标准方式告诉操作系统,虽然它选择通过休眠关闭,但在此启动时,它需要放弃Hiberfil数据并执行完整的引导或诊断引导。我使用基于Atom的平台进行实验,但这必须适用于任何硬件。您能否详细说明在粘性寄存器中保存了哪些引导状态信息,操作系统应该检查哪些引导类型信息以作出引导类型决定? – sun2sirius

+0

这是相当复杂的话题。首先,固件始终知道您要从哪个ACPI启动并基于哪个ACPI决定要选择的启动路径。固件获取信息的方式取决于硬件和固件。你的应用程序的实现不会是微不足道的。你想欺骗ACPI状态和操作系统关于以前的硬件状态。请检查[this](http://superuser.com/a/1012982/64511)帖子。还请提供确切的Atom模型,以便我可以查看数据表并指出您注册。 –

回答

1

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

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

+0

有趣的解决方案我不知道这会不会长期影响Windows的稳定性,也不知道Linux或其他系统的表现如何。 'ExitBootServices'由系统引导程序调用,这就是为什么您在重置之前看到启动屏幕的原因。肯定OS没有机会对之前的状态做任何事情。我最担心的主要是BIOS控制的硬件(ME,AMT,BMC),也不知道系统中的各种驱动程序如果发现S5和S4都没有,那么就会发生什么。 –

相关问题