none
[分享]一種爲 Windows 10 添加高級啓動選項的變通解決方案 RRS feed

  • 常规讨论

  • 重要注意事項

    1. 此方法需要修改系統核心引導文件 \boot\BCD,對該文件任何不恰當修改可能導致無法成功啓動系統。
    2. 本解決方案,一共有兩種方案可選,其中第一種方案,僅在未啓用 BitLocker 的虛擬機進行了測試,
       在啓用了系統卷加密或設備加密的系統上,不保證在特定條件下,會將用戶鎖在門外,這將導致數據間接“丟失”。
    3. 本解決方案,僅在 Surface 3 with Windows 10 Pro 和 VM with Windows 10 Pro 進行有限測試。如要使用,風險自擔

    無論使用哪種方法,都强烈建議,先通過以管理員身份運行命令提示符并執行命令

    bcdedit -export bcd.bak

    備份一份最新的 BCD 引導記錄,并存放在安全的位置。

    第一種方法:

    1. 正常啓動系統

    2. 以管理員身份運行命令提示符,并執行命令

    bcded1t -set {current} bootmenupolicy legacy

    需要注意,爲了避免直接執行此命令,我將 bcdedit 中的 i 替換爲了數字 1。
    使用 legacy 將讓系統恢復使用較早版本文本格式的高級啓動項。因爲考慮到如果由於操作失誤,而被 BitLocker 所在門外,所以此方法并未在 Surface 3 上進行驗證。

    如果要恢復 Windows 10 客戶端的默認設置,則執行

    bcdedit -set {current} bootmenupolicy standard

    此外存在一種臨時啓用高級啓動項的設置

    bcdedit -set {current} onetimeadvancedoptions yes

    此設置僅在下次重新啓動系統時有效,如果啓用了 BitLocker 加密,系統則會提示需要提供恢復密鑰來訪問系統卷。
    從初步的測試看(設備同時啓用 TPM 和安全啓動),至少默認設置僅接受 USB 或數字恢復密鑰。

    第二種方法

    這個方法主要思路是,添加引用了特點選項的 OSLoader。

    1. 正常啓動系統。

    2. 以管理員身份運行命令提示符。

    3. 先刪除 bootmgr 中默認啓動項設置

    bcdedit -deletevalue {bootmgr} default

    默認情況下, 該 default 指示系統直接啓動 Windows 10 所對應的 OSLoader。

    4. 下面添加一系列 OSLoader。
       爲了描述方便,直接將我系統上生成的每個啓動項的 GUID 複製下來,如果要應用此方法,需要依據實際值進行替換。
       部分啓動項的設置組合可能依據設備不同,而未必生效。

    bcdedit -copy {current} -d "Enable Boot Logging"
    bcdedit -set {454bb480-ffa8-11e4-8256-c0335edf6e5a} bootlog yes

    bcdedit -copy {current} -d "Enable low-resolution video"
    bcdedit -set {454bb481-ffa8-11e4-8256-c0335edf6e5a} vga yes

    bcdedit -copy {current} -d "Safe Mode"
    bcdedit -set {454bb482-ffa8-11e4-8256-c0335edf6e5a} safeboot minimal

    bcdedit -copy {current} -d "Safe Mode with Networking"
    bcdedit -set {454bb483-ffa8-11e4-8256-c0335edf6e5a} safeboot network

    bcdedit -copy {current} -d "Safe Mode with Command Prompt"
    bcdedit -set {454bb484-ffa8-11e4-8256-c0335edf6e5a} safeboot minimal safebootalternateshell yes

    bcdedit -copy {current} -d "Directory services Restore Mode"
    bcdedit -set {454bb485-ffa8-11e4-8256-c0335edf6e5a} safeboot dsrepair

    bcdedit -copy {current} -d "Safe Mode with Low DPI"
    bcdedit -set {454bb486-ffa8-11e4-8256-c0335edf6e5a} safeboot minimal vga yes

    bcdedit -copy {current} -d "Safe Mode with Command Prompt and Networking"
    bcdedit -set {454bb487-ffa8-11e4-8256-c0335edf6e5a} safeboot network safebootalternateshell yes

    bcdedit -copy {current} -d "Directory services Restore Mode with Low DPI"
    bcdedit -set {454bb488-ffa8-11e4-8256-c0335edf6e5a} safeboot dsrepair vga yes

    添加完成后,就可以直接在啓動時選擇要進入的模式,比如安全模式。
    當然副作用是,減慢了啓動速度。
    但如果系統存在多個 Windows 系統,那麽此方法可能會導致快速啓動失敗而轉變爲一般啓動。
    至於是否與休眠關機有衝突,并未進行測試。


    最後,雖然此方法僅僅在 Windows 10 進行了測試,但應該也適用於 Windows 8/8.1 系統。


    Folding@Home

    2015年8月16日 5:53

全部回复

  • 經過後續進一步測試,發現設置 vga 選項時,可能會因爲由於某種原因,導致保存丟失。需要重新設置一次。
    但我不能完全肯定是否如此,也可能是最初執行命令時,遺漏了該選項。

    安全啓動的限制

    但是表示帶命令提示符的安全模式,選項 safebootalternateshell 就比較麻煩了,在啓用了安全啓動的 Surface 3 中,
    直接通過 bcdedit -set 設置這個選項會失敗,系統提示由於安全啓動策略的保護,該選項無法被修改或刪除。

    通過如下方法强行設置

    bcdedit -export bcd.temp

    先導出一個中間 BCD 文件。

    然後用

    bcdedit -store bcd.temp -set ...

    的方式設置好 safebootalternateshell 選項。

    最後用

    bcdedit -import bcd.temp

    方式覆蓋現有 bcd 文件。

    但修改好的設置,會在下次啓動時被還原。

    而在 UEFI 禁用安全啓動,會導致 Surface 3 不能自動解鎖系統卷。

    不清楚該限制的緣由,但我個人覺得,衹使用 cmd.exe 作爲 Shell, 要比 explorer.exe 更安全才對,因爲能夠直接調用的功能少。


    Folding@Home

    2015年8月16日 11:23