为什么我不能通过regedit编辑系统BCD存储?

Gov*_*mar 6 windows windows-registry windows-7 bcdedit

因此,您可能知道,注册表配置单元HKEY_LOCAL_MACHINE\BCD00000000实际上是系统 BCD 存储;这与您在运行BCDEDIT命令时看到的信息相同(以管理员身份)。

但是,如果我尝试以管理员身份运行 regedit 并手动编辑其中的任何值,则会出现错误Cannot edit <value_name>: Error writing the value's new contents。同样,如果 Windows API 函数RegSetValueEx尝试更改此子项中的值,即使在以管理员身份运行的应用程序中,它也会失败。

然而,该BCDEDIT命令可以毫无问题地从该存储中插入、更新和删除项目,并且更改也会显示在注册表中。

什么BCDEDIT和手动编辑注册表有什么区别?

Syn*_*ech 6

一句话:权限。

详细说明…

地点

BCD 存储在引导驱动器上(通常为 ~100MB NTFS 卷)。默认情况下它是隐藏的,但您可以使用磁盘管理 MMC 管理单元 ( diskmgmt.msc)为其分配驱动器号。然后您可以查看该Boot目录并查看该文件BCD,该文件是包含启动配置数据的常规注册表配置单元格式文件。

基本原理

显然启动数据是非常敏感的,是失败的第一线。搞乱系统文件可以相对容易地修复,但这需要运行一些东西来进行修复。如果启动文件搞砸了,那么什么都不会运行,而且灯会熄灭。(嗯,它仍然可以修复,但不能自动修复;它需要有目的的手动干预,例如使用引导或安装光盘。)

由于启动数据至关重要,因此 Windows 不会轻易在那里乱搞。使用注册表编辑器直接编辑引导数据可以设置无效或冲突的值,添加无效或非法的整体,删除强制条目等。 限制 BCD 的修改以bcdedit允许它限制对有效值的更改,这有助于限制可以造成的损害(它并不能完全消除问题;您仍然可以杀死一个系统,但至少它可以消除大量可能的问题)。

方法

如果您检查BCD00000000分支的权限,您将看到它已Full Control为 SYSTEM 帐户设置,但管理员组具有Special权限,即Read-OnlyplusWriteDac授予设置权限的能力。(您可能需要单击该[Advanced]按钮,因为基本对话框指示 SYSTEM 也具有Special访问权限,但高级安全设置对话框显示它正确设置为Full Control。)

当您运行 Regedit(需要提升权限)时,它会在您的用户帐户的上下文中运行并获得管理员组权限,因此您无法对其进行写入。当您使用该bcdedit命令时,它会在具有写入权限的 SYSTEM 帐户上下文下运行。如果在任务管理器中启用用户名列,您可以看到 Regedit 由您的用户帐户bcdedit运行,并由 SYSTEM 运行。

变通办法

使用 Regedit 直接编辑 BCD 是不可取的,而且很少有必要,但如果你真的必须,那么一种方法是授予自己对该BCD00000000分支的写访问权限。当然不建议这样做,因为您需要记住稍后撤消该权限。一种更简单的方法是在 SYSTEM 上下文下简单地运行 Regedit