啓動配置數據(BCD)存儲(2)

啓動配置數據(Boot Configuration Data – BCD
啓動配置數據爲控制啓動環境數據提供了一個獨立於固件的機制。Windows Vista及之後版本的Windows都使用BCD加載操做系統或運行啓動環境應用程序(如memtest.exe – 內存診斷)。BCD影響系統啓動的全部方面。
BCD 的數據存儲是一個註冊表配置單元格式的二進制文件,但不能使用註冊表API訪問。
BCD 體系結構
BCD 的體系結構是一個由三個基本組件構成的層次結構:存儲、對象、元素。
BCD 存儲是層次結構中的頂層組件,BCD存儲是BCD對象和元素的命名空間容器(namespace container)。
BCD 對象是BCD元素的容器。常見BCD對象的類型描述啓動環境應用程序,如Windows啓動加載器(boot loader)的一個實例
BCD 元素是一個數據項,如一個調試程序設置、一個啓動環境應用程序名稱或一個操做系統設置。
BCD 存儲
BCD 存儲是保存加載Windows或運行其餘啓動環境應用程序所需信息的BCD對象和元素的命名空間容器(namespace container)。計算機有一個描述全部安裝的Windows操做系統和安裝的Windows啓動環境應用程序的系統BCD存儲,除了系統BCD存儲以外,還能夠有多個非系統BCD存儲
l  系統BCD存儲文件夾名爲bcd,位於活動分區的\boot文件夾
l  Windows 啓動管理器(Windows Boot Manager – bootmgr)使用系統BCD存儲來控制啓動過程。在多重啓動環境中,Windows啓動管理器使用來自系統BCD存儲的信息顯示啓動選擇菜單
l  BCD 有兩個接口:BCD WMI提供程序和BCDEdit.exe
l  管理員、技術支持人員可以使用BCDEdit.exeBCD WMI建立額外的BCD存儲,額外的BCD存儲對於恢復、修復、捕獲映像頗有幫助,並且能夠將非系統BCD存儲導入爲系統BCD存儲
下圖顯示了一個典型BCD存儲中BCD的層次
系統BCD存儲中至少包含兩個BCD對象:
1 Windows boot manager對象:Windows boot manager對象包含與Windows啓動管理器相關的BCD元素,這些BCD元素包括顯示在操做系統選擇菜單、啓動工具選擇菜單中的啓動項、選擇菜單顯示時間……。在使用BCDEdit修改一個BCD存儲時,可使用別名{bootmgr}
2 Windows boot loader對象:對於安裝到計算機上的每一個版本或配置的Windows,在BCD存儲中都有一個Windows boot loader對象的實例。Windows boot loader對象包含加載WindowsWindows初始化時使用的BCD元素,這些BCD元素包括no-executeNX)頁面保護策略、物理地址擴展(Physical Address Extension – PAE)策略、內核調試程序設置……。當計算機啓動到Windows時,新聯的Windows boot loader對象實例由別名{current}標識。當使用BCDEdit修改BCD存儲時,默認的Windows boot loader對象由別名{default}標識
系統BCD存儲中也可能包含下列BCD對象:
l  Windows NTLDR 對象:NTLDR對象描述之前版本Windows啓動加載器(Ntldr.exe)的位置,Ntldr.exe用於啓動之前版本的基於NT內核的Windows。只有計算機中安裝了之前版本的Windows時才須要NTLDR對象。NTLDR對象的別名爲{ntldr}
l  啓動環境應用程序:BCD存儲可以包含執行其餘與啓動相關操做的BCD對象,如Windows Memory Tester(進行內存診斷)
BCD 對象
有三類BCD對象:application對象、inheritable對象、device對象。最多見的對象類型是application對象,application對象描述啓動環境應用程序,如Windows啓動管理器、Windows啓動加載器。每一個BCD對象由一個128位的全局惟一標識符(GUID)標識。
Application 對象
一個application對象表明一個啓動環境應用程序。標準application對象包括:
l  Windows boot manager 對象 – {bootmgr}
l  Windows boot loader 對象 – {current} {default}
l  Windows NTLDR 對象 – {ntldr}
l  Windows resume loader 對象
l  Windows Memory Tester 對象 – {memdiag}
Inheritable 對象
一些BCD元素可以應用於多個application元素,有些BCD元素對BCD存儲是全局性的。雖然可以將這些元素分別與使用它們的每一個對象實例分別關聯,但更有效的方法是建立一個inheritable對象,做爲在多個BCD對象實例之間共享的元素的容器。其餘對象在使用這些BCD元素時,只須要引用inheritable對象,而不是每一個元素,即inheritable對象包含可以應用於多個對象的元素。
Inheritable 對象只能包含應用於全部啓動環境應用程序的BCD元素。
下面是一些經常使用的inheritable對象:
l  全局RAM錯誤列表,可以被全部啓動環境應用程序繼承 – {badmemory}
l  啓動加載器全局設置,應當被全部Windows boot loader應用程序繼承 – {bootloadersettings}
l  全局調試程序設置,可以被全部啓動環境應用程序繼承 – {dgbsettings}
l  全局緊急管理服務(Emergency Management Services – EMS)設置,可以被全部啓動環境應用程序繼承 – {emssettings}
l  全局設置,應當被全部啓動環境應用程序繼承 – {globalsettings}
l  恢復加載器全局設置,應當被全部恢復應用程序繼承 – {resumeloadersettings}
Device 對象
Device 對象描述沒有存儲在一個application對象中的設備特定的屬性。
大多數設備,如硬盤分區,可以由一個BCD元素描述,但複雜的設備須要多個BCD元素來描述。
例如,當從一個Windows映像(WIM)文件建立的RAM磁盤啓動時,就須要device對象,此device對象包含WIM文件的位置,若是是從網絡啓動的,此device對象還包含網絡端口信息。RAM磁盤對象的別名爲{ramdiskoptions}
能夠建立自定義的device對象。
BCD 元素
BCD 元素是啓動環境應用程序或Windows啓動過程當中的配置數據。
一些BCD元素只能與特定BCD對象關聯,有些BCD元素可以應用於全部類型的啓動環境應用程序。
總結
BCD 存儲由一系列對象組件,每一個對象是一個啓動環境應用程序,每一個對象對應一個啓動項。每一個對象由一系列元素組成,每一個元素有一個屬性。
簡單地說,能夠將BCD元素理解成BCD對象的屬性。
管理BCD的工具
l  BCDEdit.exe
l  BCD WMI API
l  控制面板  - 系統,容許用戶指定兩個全局BCD元素的值:默認操做系統和配置、啓動管理器超時設置
l  Msconfig.exe
BCDEdit.exe
BCDEdit.exe (位於%systemroot%\system32文件夾)是一個命令行工具,用於管理BCD存儲。BCDEdit.exe可以新建、修改BCD存儲、添加啓動菜單選項……
使用BCDEdit.exe修改BCD存儲須要管理員權限。
BCDEdit.exe 命令劃分爲8類:
1 、對BCD存儲進行操做的命令
/createstore :新建空BCD存儲
/export :將系統BCD存儲的內容導出到文件
/import: 使用由/export導出的文件還原系統BCD存儲的狀態
2 、對存儲中的啓動項進行操做的命令
/copy :複製BCD存儲中的啓動項
/create :在BCD存儲中新建啓動項
/delete :刪除BCD存儲中的啓動項
3 、對元素進行操做的命令
/deletevalue :刪除啓動項的元素
/set :建立或修改一個啓動項的元素(這是我要詳細說明的命令,由於使用Windows PE時,這是一個最主要的命令)
4 、控制輸出的命令
/enum :列出一個BCD存儲中的啓動項
/v :完整顯示啓動項的GUID,而不是well-known標識符
5 、控制啓動管理器的命令
/bootsequence :指定一次性啓動順序,例如在使用控制面板中的內存診斷工具(mdsched.exe)時,就是經過指定一次性啓動順序在計算機重啓時,運行memtest.exe命令來進行內存診斷的
/default :指定默認啓動項
/displayorder :指定啓動管理器顯示啓動菜單時啓動項的順序
/timeout :指定啓動管理器超時值
/tooldisplayorder :指定啓動管理器顯示工具菜單時啓動項的順序
6 、控制緊急管理服務(EMS)的命令
/bootems :爲一個特定啓動應用程序啓用或禁用EMS
/ems :爲一個操做系統啓動項啓用或禁用EMS
/emssettings :設置全局EMS參數
7 、控制調試的命令
/bootdebug :爲一個啓動應用程序啓用或禁用調試
/dgbsettings :設置調試程序的全局參數
/debug :爲一個操做系統啓動項啓用或禁用內核調試
8 、修改其餘命令的命令
/store :指定命令做用到的BCD存儲。若是不指定,默認是做用於系統BCD存儲。
實例
注意:對系統BCD存儲進行修改可能會影響系統的正常啓動,因此儘可能在虛擬機上進行實驗,或在修改系統BCD存儲以前先備份系統BCD存儲,這樣在系統不能正常啓動時,可使用備份的系統BCD存儲進行恢復。
1、BCD存儲內容
查看指定BCD存儲內容的命令
Bcdedit [/store 文件名 ] /enum [ 類型 | id] [/v]
/store 文件名 :可選。指定BCD存儲。若是不指定,默認系統BCD存儲
類型 :可選。指定要查看的啓動項的類型。
l  active – 啓動管理器啓動菜單中的全部啓動項
l  all – 全部啓動項
l  bootapp – 全部啓動環境應用程序
l  inherit – 全部inheritable對象
l  osloader – 全部Windows boot loader啓動項
l  resume – 全部休眠恢復啓動項
Id :可選。要查看的啓動項的標識符,可使用GUIDwell-knonw標識符
/v :可選。在輸出時顯示GUID,而不是well-known標識符
由於系統BCD存儲、/enumactive是默認選項,因此若是隻輸入bcdedit,實際上對系統BCD存儲運行bcdedit /enum active
從前面的輸出能夠看出:
啓動環境被劃分爲兩個類型:Windows啓動管理器(Windows Boot Manager)和在啓動環境中運行的其餘啓動應用程序,統稱爲啓動項。Windows Boot Manager基本上是一個mini操做系統,控制啓動,並容許選擇要運行的啓動環境應用程序。有許多啓動環境應用程序(例如Windows啓動加載器 – Windows boot loader……),每一個啓動環境應用程序的做用不一樣。
詳細解釋一下bcdedit /enum active的輸出
Windows 啓動管理器
標識符
{bootmgr}
Windows boot manager 對象的標識符
device
partition=c:
Windows 啓動管理器程序(bootmgr)位於c:
description
Windows Boot Manager
Windows 啓動管理器對象的描述
locale
zh-CN
Windows 啓動管理程序的區域設置
inherit
{globalsettings}
Windows 啓動管理器對象應當繼承{globalsettings}對象的設置
default
{current}
Windows 啓動管理器的默認啓動項的標識符,即當前啓動操做系統的Windows boot loader
displayorder
{current}
Windows 啓動管理器顯示啓動菜單時啓動項的順序
tooldisplayorder
{current}
Windows 啓動管理器顯示工具菜單時啓動項的順序
Timeout
30
Windows 啓動管理器等待時間,若是超時,Windows啓動管理器運行default指定的啓動項
Windows 啓動加載器
標識符
{current}
Windows boot manager 對象的標識符,{current}表示當前啓動的操做系統的Windows boot loader
device
partition=c:
device 元素和path元素結合說明Windows boot managerC:\windows\system32\winload.exe
path
\windows\system32\winload.exe
description
Microsoft Windows Server 2008
Windows boot manager 對象的描述
locale
zh-CN
Windows boot manager 的區域設置
inherit
{bootloadersettings}
Windows boot manager 要繼承{bootloadersettings}對象的設置
osdevice
partition=c:
osdevice 元素和systemroot元素結合說明操做系統文件位置
%systemroot%
變量
systemroot
\windows
resumeobject
{fa919a7d-d75e-11de-849e-f7f1d2ee7243}
恢復應用程序的標識符
nx
Optout
對操做系統和全部進程啓用DEP(數據執行保護),包括操做系統內核和驅動程序
osdevice systemroot元素我以爲有些很差理解,思考了挺長時間,按我本身的理解解釋一下,你們討論
1 、一臺計算機上只有一個啓動管理器,即BCD存儲中只能有一個Windows boot manager對象,此對象包含全局信息:哪一個啓動項是默認啓動項(默認啓動哪一個啓動環境應用程序)、啓動菜單顯示時間、啓動項在啓動菜單中的顯示順序。
2 、一臺計算機上可能有多個啓動加載器,對於計算機上安裝的每一個Windows,都有一個啓動加載器。例如,若是計算機上安裝了兩個不一樣版本的Windows Vista,計算機上就有兩個Windows啓動加載器。因此BCD存儲中可能有多個Windows boot loader對象
舉例以下:
一臺計算機上安裝了Windows Vista Home Basic(操做系統文件安裝在C:\windows)和Windows Vista Enterprise(操做系統文件安裝在D:\windows
計算機中就有了兩個Windows boot loaderwinloade.exe),一個位於c:\windows\system32,用於啓動Windows Vista Home Basci;一個位於d:\windows\system32,用於啓動Windows Vista Enterprise
這樣在BCD存儲中就有了兩個Windows boot loader對象,並且當在啓動菜單中選擇時,這兩個boot loader要使用osdevicesystemroot元素找到本身對應的操做系統文件進行啓動。
Osdevice systemroot元素也是在自定義Windows PE時常常要遇到的兩個元素。
下一篇重點介紹bcdedit /set命令
相關文章
相關標籤/搜索