【问题标题】:Programmatically edit the BCD store on Windows 8?在 Windows 8 上以编程方式编辑 BCD 存储?
【发布时间】:2013-06-12 16:25:56
【问题描述】:

在 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 数据的应用程序?

【问题讨论】:

    标签: windows permissions registry bootloader bcdedit


    【解决方案1】:

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

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-27
      • 1970-01-01
      • 2011-08-18
      • 1970-01-01
      • 2020-10-16
      • 2010-09-21
      相关资源
      最近更新 更多