返回首页

{A}
{S0}简介
本文将引导您如何编程就像编辑Boot.ini文件,我们与我们的老朋友XP或Windows 2000的编辑Windows Vista的启动配置。1。什么是Windows Vista的BCD码
旧的Windows使用的boot.ini配置引导序列,这个Boot.ini文件将被载入由ntldr.exe
旧的boot.ini这样看起来(很熟悉,是吧?)

BCD是Windows Vista的新引导环境。
的BCD =引导配置数据 2。 BCD码层次
BCD存储:名字空间的BCD对象和其他元素构成一个存储的内容的容器。BCD对象:集装箱的BCD元素。最常见的类型的BCD对象的描述引导环境。BCD元素:一个数据项,即启动应用程序的名称,OS设备?? 3。 BCD系统存储
{S3}
所以,在图的外观。
如果你想操纵一些引导信息,你要访问Windows启动管理器的BCD对象。
要显示的老朋友boot.ini文件?访问旧的引导装载程序。很简单,是吧?4。我们如何访问。NET中的BCD
。NET中,有所谓System.Management命名空间,它提供了有关系统的管理信息和事件,设备,和应用程序的工具的Windows Management Instrumentation(WMI)基础设施类。
我们可以手动使用System.Management的类来操纵BCD数据,通过使用ManagementClass,的ManagementObject??类??????/ EM>但它不是一个好主意。
这里我们将使用一些技巧。我们将创建的所有类,代表BCDStore,BCDObject,BCDElement??(所有这些类使ManagementClass使用的ManagementObject??当然),但我们将使用的一种工具,它会自动创建。生成类,通过使用mgmtclassgen.exe
有一个名为bcd.mof一个文件路径中的SYSTEM32 \ WBEM。这个文件包含了所有我们需要的信息生成BCD类。
,我们将使用mgmtclassgen.exe的工具来生成这些类(这一工具与Visual Studio。NET)。
确定,足够的交谈。让我们与新的Windows Vista的BCD一番情趣。一步步骤演示
我们将创建一个应用程序,允许用户改变操作系统的负载屏幕显示的名称,并设置超时值(这些任务很容易与旧朋友的boot.ini)一,启动Visual Studio 2005,并创建一个新的Windows应用程序。设计GUI。
的二。创建的BCD类
转到Visual Studio 2005命令提示,执行命令:mgmtclassgen BcdStore / N根\ WMI / L,CS产生BcdStore CSHARP语言类,命名空间的根\ WMI(BcdStore类驻留在这个命名空间)
BcdObject类似,BcdElement??/ P>
{五}
这一步后,你将有你。CS文件所需要的所有类。三。参考System.Management.dll并添加所有。CS您在步骤二中创建您的项目文件。
添加一个引用到COM组件命名为微软的BCD常数库,让所有的预先定义的BCD(您不需要手动定义)的常数。
{中六}四。示例代码
加载所有OS ListBox中的示例代码:

//USE IMPERSONATE LEVEL

ConnectionOptions connectionOptions = new ConnectionOptions();

connectionOptions.Impersonation = ImpersonationLevel.Impersonate;

connectionOptions.EnablePrivileges = true;



ManagementScope managementScope = new ManagementScope(@"root\WMI", 

                            connectionOptions);



// SYSTEM STORE GUID = {9dea862c-5cdd-4e70-acc1-f32b344d4795}

BcdObject systemObject = new BcdObject(managementScope, 

            "{9dea862c-5cdd-4e70-acc1-f32b344d4795}", "");



// GET LIST OF OS

ManagementBaseObject mboOut;

bool success = systemObject.GetElement((uint)

    BCDConstants.BcdBootMgrElementTypes.BcdBootMgrObjectList_DisplayOrder,

     out mboOut);



if (success)

{

    string[] osIdList = (string[])mboOut.GetPropertyValue("Ids");

         // LOOP FOR ALL OS Ids (GUID)

         foreach (string osGuid in osIdList)

         {

              BcdObject osObj = new BcdObject(managementScope, osGuid, "");

              // GET DESCRIPTION STRING

              success = osObj.GetElement((uint)

         BCDConstants.BcdLibraryElementTypes.BcdLibraryString_Description, 

         out mboOut);



              if (success)

              {

                  // USE A CLASS TO KEEP OS OBJECT AND NAME FOR LATER USE

                  OS myOS = new OS();

                  myOS.Name = mboOut.GetPropertyValue("String").ToString();

                  myOS.GUID = osGuid;

                  lstOS.Items.Add(myOS);

              }

          }

}    
示例代码为操作系统的一个新的描述:{C}
简单,是吧?参考文献
下面的链接将非常有助于您理解本文:历史第一个版本,没有更新!

回答

评论会员:starbase231 时间:2011/12/14
我想编辑从XP BCDstore。因为我有一个多重引导系统,我不仅需要设置的boot.ini,但也从一个操作系统向另一个BCDstore。我做了所有在文章中写的,除了VB和不C.所有在Vista上工作得非常好,但是,当我移动到XP我得到一个错误,无效的类。我调试的代码和产生的错误是由以下行BcdObject /功能SetIntegerElement:
inParams = PrivateLateBoundObject.GetMethodParameters("SetIntegerElement")
我不知道如何修正这个问题。

任何帮助,将appriciated
评论会员:。Acgiuna 时间:2011/12/14
??仲才垫吴kinhkhủngkhiếp{七}
评论会员:xero9200 时间:2011/12/14
嘿所有,我有几个问题,关于这个项目的代码。

1.On第3部分,它说:"参考System.Management.dll并添加所有。CS您在步骤二中创建您的项目文件。"它从来没有真正解释这,我只需要添加一个参考System.Management?我创建了有关所有这些,cs文件。哪里产生的呢?我如何将它们添加到项目吗?究竟是什么呢?

2.I没有参考文献中列出的BCD常数。我在Vista下使用VS2008的。任何想法如何解决这个问题
评论会员:陈庭合 时间:2011/12/14
。HI

1。我只是作为参考--- GT添加System.Management;是
我创建了有关所有这些,cs文件。创建---- GT;在第2步
我如何将它们添加到项目----- GT;右键单击项目,选择添加项目,然后选择您在步骤2中创建的所有cs文件
。4。他们究竟是什么----- GT; C#类代表在第1步
中描述的对象我没有在参考---- GT上市的BCD常数,确保你选择"COM"选项卡(不净的参考。)

一分耕耘,一分收获
评论会员:paragcoder 时间:2011/12/14
您好,

我想读BOOT \ BCD Vista的副本从Windows XP。
你知道的任何方法来执行此。
评论会员:Bob1000 时间:2011/12/14
好文章,很高兴我没有图, - 恰恰证明过度(严重)设计Vista的

哦对操作系统高科技/用户友好

鲍勃
P.S.不愿看到一个由微软设计的鼠标陷阱,虽然不认为它会担心太多小鼠.....{ BR}