最近在看Windows 7和Windows Server 2008的部署,需要用到BCDEdit.exe创建Windows PE启动环境配置数据(BCD),在网上找了一些资料,大部分都是讲在多重启动环境中使用BCDEdit.exe编辑启动菜单的,但对于大多数应用不需要多重启动环境,所以仔细研究了一下BCD和BCDEdit.exe。下面是学习总结:
Microsoft
从Windows Vista开始完全重新设计了操作系统启动环境,以解决现在硬件和固件日益增长的复杂性和多样性。重新设计 的操作系统启动环境的一个方面是新的独立于固件的数据存储,数据存储包含影响启动过程的配置数据。
要理解什么是启动配置数据(Boot Configuration Data �C BCD),首先需要了解Windows启动过程。
因为配置数据存储出现于Windows Vista,应用于Windows Vista及以后版本的Windows,所以本文中的Windows指的是Windows Vista及以后版本的Windows。另外,本文主要讨论基于BIOS系统计算机的启动配置数据(BCD)存储。
Windows
启动过程
1
、开启计算机电源,计算机加电自检(Power On Self Test �C POST)
2
、BIOS读取主引导记录(Master Boot Record �C MBR),MBR读取引导扇区(boot sector)。引导扇区包含用以启动Windows启动管理器(Windows Boot Manager)程序的代码
3
、Windows启动管理器读取系统启动配置数据(BCD)存储中的信息,系统启动配置数据存储包含存储启动时需要的配置信息。
Windows
启动管理器程序文件名为bootmgr,无扩展名,位于活动分区根目录
3
、此时有两种情况:
(1)如果计算机只安装了一个版本的操作系统,或timeout设置为0,则不显示启动菜单,Windows启动管理器调用Windows启动加载器(Windows Boot Loader)
Windows
启动加载器位于%systemroot%\system32文件夹,文件名为winload.exe
(2)如果计算机安装了多个版本的操作系统,则Windows启动管理器根据系统启动配置数据存储中的信息生成并显示启动菜单,以供用户选择
4
、当用户在启动菜单中选择时:
l
Windows �C Windows
启动管理器运行Windows启动加载器
l
从休眠状态恢复 �C Windows启动管理器运行Windows恢复加载器(Windows Resume Loader)从休眠恢复Windows运行状态
Windows
恢复加载器位于%systemroot%\System32文件夹,文件名为winresume.exe
l
以前版本的Windows �C Windows启动管理器定位所选系统的启动分区,并加载ntldr.exe,生成一个由boot.ini内容决定的启动菜单
5
、Windows启动时,Windows启动加载器(winload.exe)加载ntoskrnl.exe和hal.dll,从注册表读取设置并加载驱动程序。接下来运行Windows会话管理(smss.exe),并且启动Windows启动初始化程序(wininit.exe)、本地安全验证(lsass.exe)与服务(services.exe)进程,完成后,用户就可以登录系统了。
从上述Windows启动过程可以看出,系统启动配置数据主要由Windows启动管理器在启动过程中使用,控制启动方式。
术语
1
、启动环境应用程序
启动环境应用程序由BCD存储中的BCD对象(启动项)表示。启动环境应用程序的例子包括Windows启动管理器、Windows启动加载器、Windows恢复加载器、NTLDR、内存诊断程序……
2
、Windows启动管理器(Windows Boot Manager) - bootmgr
一个启动环境应用程序,初始化启动过程。在一个多重启动环境中,启动管理器显示操作系统选择菜单,使用启动数据配置定位Windows启动加载器(winload.exe),Windows启动加载器加载特定版本的Windows。
3
、Windows启动加载器(Windows Boot Loader) - winload.exe
一个启动环境应用程序,由Windows启动管理器调用,以加载操作系统内核ntoskrnl.exe及启动类(boot-class)设备驱动程序
4
、Windows恢复加载器(Windows Resume Loader) - winresume.exe
一个启动环境应用程序,将Windows从休眠状态恢复到运行状态
5
、内存诊断应用程序(memtest.exe)
一个启动环境应用程序,运行内存诊断测试。通常称为memdiag
位于%systemdrive%\boot文件夹
在%systemroot%\system32文件夹中还有一个mdsched.exe文件,对应控制面板中的内存诊断工具
Mdsched.ee
虽然也能够运行内存诊断,但从文件名就可以看出来mdsched.exe实际上是一个计划任务,用于向BCD存储中添加一个{memdiag}启动项,在计算机下次启动时实际运行的Windows内存诊断程序memtest.exe。
所以实际的内存诊断程序是memtest.exe
6
、NTLDR
以前版本Windows的启动加载器,加载以前版本的Windows
7
、系统启动配置数据(BCD)存储
一个独立于固件的数据库。系统启动配置数据保存在一个数据文件中(本质上是一个注册表配置单元文件),文件名为bcd,位于%systemdrive%\boot文件夹。启动配置数据(BCD)存储描述启动环境应用程序和启动环境应用程序的设置。启动环境应用程序在启动过程中要使用系统BCD存储中的信息。能够创建额外的BCD存储,但系统BCD存储只有一个
8
、启动项
BCD
存储中的BCD对象。BCD存储中包含多种类型的启动项。启动项还可以用于其他目的,如全局内存错误(RAM defect)列表或全局启动加载器(boot loader)设置
9
、数据类型/元素
每个启动项具有的一个或多个数据值。因为每个元素有两个特性:名称和关联的数据类型,所以元素也称为数据类型,例如启动管理器有一个timeout元素(数据类型)
10
、标识符
与每个启动项关联的全局唯一标识符(Global Unique Identifier �C GUID)。
11
、well-known标识符
常用启动项的标识符,作为GUID的别名。例如boot manager的well-known标识符为{bootmgr};还有一些虚拟标识符,虚拟标识符的标识在每次启动时是可变的,例如{current}是当前启动的操作系统的well-knonw标识符。
下一篇详细介绍启动配置数据以及如何使用BCDEdit.exe修改启动配置数据。
本来是一篇,字数超过,所以放成了三篇