最近一直在WIN7下進行驅動開發,經常要使用BCDEDIT對啓動項、系統調試等進行設置,一直對BCDEDIT都是一知半解。現在查相關資料進行知識學習。
Win7的引導系統中,微軟引入了一種全新的boot loader架構叫 windows boot manager (bootmgr.exe). 之前的 xp 的 ntldr 架構不同。
Ntldr 初始化硬件設備、建立內存空間映射圖、將系統的軟硬環境設置成合適的狀態,爲最終調用操作系統內核準備好正確的環境。
win7的新架構可以實現: 完整的硬件獨立,讓win7的啓動引導更迅速安全。將之前boot.ini管理內容交給新的BCD(boot configuration data ),相應的編輯工具爲BCDEdit(BCDEdit.exe),來管理啓動設置。
在基於EFI的計算機中,更沒有boot.ini,在基於EFI的系統中,啓動選項被存儲在主板的存儲器中。此時要修改啓動選項,就要使用BCDEdit,甚至修改boot.ini的方式也不能使用原來的文件編輯器。
另一方面, win7中提供了WMI調用BCD類,通過它可以用編程的方式修改BCD數據。
注意:EFI我也只是聽說過而已,工資做底層的那些老提這個話題; 以前也接觸過WMI在vista上,例如將驅動中磁盤的使用量,通過WMI顯示在托盤中。
BCDEdit是一個命令行工具,運行文件bcdedit.exe位於"\Windows\System32"目錄下。如果要執行BCDEdit,首先進入命令行窗口,並將操作用戶的權限提升爲管理權限。在命令行輸入 "bcdedit"即可。
在BCD中,每個對象均有唯一的GUID(Globally Unique Identifier),入系統的每塊硬盤,每個分區的GUID均不同。
在BCD中,硬盤或者分區的GUID可分爲如下幾類:
{legacy} :存在上一代windows系統如:windows xp的硬盤或者分區。 // legacy遺留。
{defaultl}:默認操作系統所在硬盤或分區。
{c34b751a-ff09-11d9-9e6e-003048237}:類似於這個格式指安裝了操作系統的硬盤或者分區。
bcdedit /? 顯示命令幫助
使用BCDEdit修改啓動菜單選項
作爲一種良好的操作習慣,對vista和win7的啓動選項進行任何操作的時候,首先要對BCD的啓動選項進行備份,bcdedit /export "D:\BCD Backup\Bcd Backup " 恢復 bcdedit /import "D:\BCD Backup\Bcd Bckup".
BCDEdit修改啓動項的常用命令:
bcdedit /set {legacy} Description "Windows xp professional sp2" :修改上一代操作系統在啓動菜單中的顯示內容。
bcdedit /default {current} 將當前啓動硬盤設置爲默認啓動系統;
bcdedit /timeout 15 將默認的啓動菜單顯示時間更改爲15秒。
bcdedit /copy {current} /d DebugEntry
解釋: 使用/bcdedit /copy 命令複製引導入口;/copy 複製存儲中的項。 /d命令指定新的入口的名稱,必須用雙引號括起來。
個人的理解: 拷貝當前的引導入口,作爲新的入口,並修改入口名。
在boot.ini中可以複製粘貼某個入口,然後將新的入口友好名,該爲易識別的名稱。如:
multi(0)disk(0)rdisk(0)partition(3)\WINDOWS="Microsoft XP" /fastdetect
multi(0)disk(0)rdisk(0)partition(3)\WINDOWS="XP - new" /fastdetect 加上相應的參數等,入/baudrate = 115200 , /debug /debugport = com1
bcdedit /debug DebugEntry的guid on
解釋:/debug 啓用或者禁止操作系統項的內核調試,on 表示啓用 根據guid進行啓用。
bcdedit /dbgsettings serial baudrate:115200 debugport:1 設置全局調試程序的參數;
bcdedit /displayorder {current} {GUID} 給啓動菜單排序。