[随笔]不重复发明轮子和Vista_BCD编程

近来写点小东西,需要读取 BCD 启配置文件。
看了 MS 官方的资料,只能通过 WMI 来操作。。
WMI 的依赖性太强了,而且我这个需要在 XP 下也能正常工作(安装了多系统的XP),而 WMI的依赖环境。。。我貌似有点轻度的代码洁癖。
加上一直对.net和WMI不怎么感兴趣,所以还是继续在 XP 下用 VC6来实现吧。

研究了 BCD 的格式。根据 Kingsoft Smallfrogs文章介绍,BCD数据库其实就是标准的注册表数据格式,而且也会在Vista以上系统启动后自动加载到 HKEY_LOCAL_MACHINE\BCD00000000 下。看来可以通过读取注册表的方式获取结果。

这个时候,新问题又出现了。如果是多系统启动中的XP系统的话,BCD数据库并不会自动加载到注册表。难道又是此路不通 ?

最后发现 MS自身的工具 bcdedit.exe 在 XP (当然是BCD存在的情况) 中工作一切正常,而且 只要运行一次 bcdedit,那么,BCD数据库就会被自动加载到注册表

到此,对于读取。一切问题解决掉了。

现在,主要就是写的问题,注册表挂载后的权限默认是只读的,那么改掉权限不可靠也不通用(对于这些键值,难免会有系统保护软件和其他的系统操作把权限调整回来),那么既然"不重复发明轮子"那么写操作全部交给 MS 的小工具 bcdedit.exe 搞定。

虽然,这样一来,自己的程序难免在某些程度上沦成 bcdedit.exe 的一个GUI。但是问题解决了就好:)

随笔。胡乱记录下最近的一些问题和最后解决的思路和结果。
附上抓图(我的系统列表):
os_list.png