最近一直在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} 给启动菜单排序。