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