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