6

Итак, как вы, наверное, знаете, куст реестра HKEY_LOCAL_MACHINE\BCD00000000 на самом деле является системным хранилищем BCD; это та же информация, которую вы видите, когда запускаете команду BCDEDIT (от имени администратора).

Однако, если я попытаюсь запустить regedit от имени администратора и вручную отредактировать любое из значений в нем, вы получите ошибку Cannot edit <value_name>: Error writing the value's new contents . Точно так же, если функция Windows API RegSetValueEx пытается изменить значения в этом подразделе, даже если она работает в приложении с правами администратора, это также приведет к сбою.

Тем не менее, команда BCDEDIT может вставлять, обновлять и удалять элементы из этого хранилища без проблем, и изменения также будут отображаться в реестре.

В чем разница между тем, что делает BCDEDIT , и редактированием реестра вручную?

4 ответа4

6

Одним словом: разрешения.

Разрабатывать ...

Место нахождения

BCD хранится на загрузочном диске (обычно том NTFS ~ 100 МБ). По умолчанию он скрыт, но вы можете назначить ему букву диска с помощью оснастки MMC «Управление дисками» (diskmgmt.msc). Затем вы можете заглянуть в каталог Boot и увидеть файл BCD который является обычным файлом формата реестра-куста, который содержит данные конфигурации загрузки.

обоснование

Очевидно, что загрузочные данные очень чувствительны и являются первой линией сбоя. Неправильное исправление системных файлов может быть исправлено относительно легко, но для этого нужно что-то запустить. Если загрузочные файлы испорчены, то ничего не запустится, и он погаснет. (Ну, это все еще можно исправить, но не автоматически; для этого потребуется целенаправленное ручное вмешательство, например использование загрузочного или установочного диска.)

Так как загрузочные данные очень важны, Windows не позволяет легко возиться там. Использование редактора реестра для непосредственного редактирования загрузочных данных позволит установить недопустимые или конфликтующие значения, добавить недопустимые или недопустимые записи, удалить обязательные записи и т.д. Ограничение изменения BCD для bcdedit позволяет ограничивать изменения действительными значениями, которые помогает ограничить ущерб, который может быть нанесен (он не полностью устраняет проблемы; вы все равно можете убить систему, но, по крайней мере, он устраняет большую часть возможных проблем).

метод

Если вы изучите разрешения для ветви BCD00000000 , то увидите, что для учетной записи SYSTEM для нее установлен Full Control доступ, но у группы администраторов есть Special права доступа, доступные только для Read-Only и WriteDac которые предоставляют возможность устанавливать разрешения. (Возможно, вам придется нажать кнопку [Advanced] , потому что в основном диалоговом окне указано, что SYSTEM также имеет Special доступ, но в диалоговом окне « Дополнительные параметры безопасности » для него правильно установлено значение « Full Control доступ».)

Когда вы запускаете Regedit (который требует повышенных привилегий), он запускается в контексте вашей учетной записи пользователя и получает разрешения группы администраторов, поэтому вы не можете писать в него. Когда вы используете команду bcdedit , она запускается в контексте учетной записи SYSTEM, которая имеет права на запись. Если вы включите столбец « Имя пользователя» в диспетчере задач, то увидите, что Regedit запускается вашей учетной записью, а bcdedit - SYSTEM.

Обходные

Прямое редактирование BCD с помощью Regedit нежелательно и редко, но если это действительно необходимо, то один из способов - предоставить себе доступ на запись к ветви BCD00000000 . Конечно, это не рекомендуется, потому что вы должны помнить, чтобы отозвать разрешение позже. Более простой способ - просто запустить Regedit в контексте SYSTEM .

2

@Synetech предложил обойтись хорошо. Особенно с системой runas. Но я хочу предложить один простой способ редактирования.

  1. Разгрузите улей BCD00000000 . Вы можете сделать это, потому что это нужно только во время загрузки. (Выберите его -> Файл -> Выгрузить куст ...)
  2. Загрузите файл BCD с диска в качестве куста реестра. (Если вы не можете найти этот файл, назначьте букву диска для тома.)
  3. Отредактируйте это просто.

Вам даже не нужно загружать его снова. Тем не менее, рекомендуется сделать резервную копию файла BCD и перезагрузиться после редактирования.

1

Прямое редактирование ветки BCD00000000 с помощью редактора реестра не рекомендуется.

Под этой веткой у вас есть копия "System BCD", которая является защищенным системным файлом.

Система поддерживает синхронизацию файла "System BCD" и ветви реестра BCD00000000.

BCD имеет некоторую структуру - набор объектов, где каждый объект снова имеет свою структуру (список элементов).

Большинство элементов - это простые строки или числа (целые числа, шестнадцатеричные числа). Но некоторые целые числа являются перечислениями и зависят от контекста (!).

Некоторые элементы могут снова быть объектами со сложной структурой, например, такими как элементы устройства для устройства VHD.

Для редактирования каждого элемента или объекта BCD вы используете либо инструмент командной строки "bcdedit", либо вы можете использовать "Visual BCD Editor" - полный редактор BCD GUI.

Visual BCD Editor использует интерфейс поставщика BCD WMI для доступа к BCD (API для доступа к BCD).

В системах UEFI все еще сложнее - BCD также отражает часть NVRAM - поэтому у нас есть синхронизация трех "мест":

  1. NVRAM (часть этого)

  2. BCD на системном разделе EFI

  3. HKLM\BCD00000000 ветка реестра

Документация Microsoft гласит, что это только два "легальных" способа редактирования BCD:

  1. используя bcdedit (с помощью отдельных команд или сценариев)

  2. использование интерфейса BCD WMI Provider (программный способ редактирования)

1

Используйте Regedit, чтобы посмотреть разрешения. Обратите внимание, что по умолчанию администраторы не имеют доступа на запись к этому ключу или подразделам. Может показаться, что администраторы действительно имеют разрешение на изменение DAC, то есть разрешения, так что вы можете попробовать это.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .