1

在 Windows Vista+ 上,BCD 引导数据存储在注册表中的HKEY_LOCAL_MACHINE\BCD00000000. BCDEDIT 命令行工具只是以可读的方式呈现该数据。

因此,理论上,任何以管理员身份运行的用户编程应用程序都应该能够以与 BCDEDIT.EXE 相同的方式编辑该存储,对吗?

DWORD result = RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("BCD00000000\\Objects\\..."), 0, KEY_SET_VALUE, &hKey);

然而,当我运行这个(在管理员帐户下)时,结果的值为 0x5(访问被拒绝)。

我在这里遗漏了什么,还是没有办法编写一个可以在不调用 BCDEDIT 的情况下以编程方式编辑 BCD 数据的应用程序?

4

1 回答 1

3

以编程方式编辑 Windows BCD 的仅有两种方法是:

  1. 编写 bcdedit 脚本(不是真正的编程方法)
  2. 使用 WMI BCD 提供程序接口(用于 BCD 访问的特殊 WMI 函数和对象)

BCD 以注册表文件格式存储,“系统”BCD 映射到 HKLM\BCD00000000。

BCD 是对象(加载程序/应用程序、设置、设备对象)的集合。

在不使用上述方法的情况下,一般情况下无法编辑 BCD 对象,因为 BCD 对象的结构可能非常复杂(例如 vhd 加载器)。

以编程方式使用 BCD WMI 提供程序的工具示例是Visual BCD 编辑器- 一个完整的 BCD 编辑器(其他 BCD 工具只能编辑 BCD 的一部分和简单的对象,它们在更复杂的对象上失败)。

探索任何 BCD 表明 BCD 中最复杂的结构是设备元素(任何加载器的一部分)。设备元素是真正的对象,除非知道它们的确切结构或使用明确定义的访问函数(来自 WMI BCD 提供程序),否则无法进行编辑。

于 2013-08-05T21:55:18.077 回答