2015-12-24 86 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都沒有,那麼就會發生什麼。 –

相關問題