Por que não consigo editar o armazenamento BCD do sistema via regedit?

5

Portanto, como você provavelmente sabe, a seção HKEY_LOCAL_MACHINE\BCD00000000 do hive do registro é, na verdade, o armazenamento BCD do sistema; são as mesmas informações que você vê quando executa o comando BCDEDIT (como administrador).

No entanto, se eu tentar executar o regedit como Administrador e editar manualmente qualquer um dos valores lá, você receberá o erro Cannot edit <value_name>: Error writing the value's new contents . Da mesma forma, se a função da API do Windows RegSetValueEx tenta alterar valores nessa subchave, mesmo quando em um aplicativo que está sendo executado como um Administrador, ele também falhará.

No entanto, o comando BCDEDIT pode inserir, atualizar e excluir itens desta loja sem problemas e as alterações também serão exibidas no registro.

Qual é a diferença entre o que o BCDEDIT faz e a edição manual do registro?

    
por Govind Parmar 06.10.2013 / 05:39

4 respostas

5

Em uma palavra: permissões.

Para elaborar…

Localização

O BCD é armazenado na unidade de inicialização (geralmente um volume NTFS de ~ 100MB). Ele está oculto por padrão, mas você pode atribuir uma letra de unidade a ele com o snap-in do MMC de Gerenciamento de Disco ( diskmgmt.msc ). Em seguida, você pode procurar no diretório Boot e ver o arquivo BCD , que é um arquivo de formato de registro-seção regular que contém os dados de configuração de inicialização.

Fundamentação

Obviamente, os dados de inicialização são muito sensíveis e são a primeira linha de falha. Arquivos de sistema bagunçados podem ser corrigidos com relativa facilidade, mas isso requer que algo seja executado para fazer os reparos. Se os arquivos de inicialização estiverem confusos, nada será executado e as luzes serão apagadas. (Bem, isso ainda é solucionável, mas não automaticamente; exigirá intervenção manual e proposital, como usar um disco de inicialização ou instalação).

Como os dados de inicialização são críticos, o Windows não facilita a confusão. Usar o editor de registro para editar diretamente os dados de inicialização tornaria possível definir valores inválidos ou conflitantes, adicionar entradas inválidas ou ilegais, remover entradas obrigatórias, etc. Limitar a modificação do BCD a bcdedit permite restringir as alterações a informações válidas. valores que ajudam a limitar o dano que pode ser feito (não elimina completamente os problemas; você ainda pode matar um sistema, mas pelo menos elimina uma grande quantidade de possíveis problemas).

Método

Se você examinar as permissões da ramificação BCD00000000 , verá que ela tem Full Control definido para a conta SYSTEM, mas o grupo administradores tem Special permissões que são apenas Read-Only plus WriteDac que concede a capacidade de definir permissões. (Pode ser necessário clicar no botão [Advanced] porque a caixa de diálogo básica indica que SYSTEM possui Special access também, mas a caixa de diálogo Configurações avançadas de segurança mostra a configuração correta para Full Control .)

Quando você executa o Regedit (que requer privilégios elevados), ele é executado no contexto da sua conta de usuário e obtém as permissões do grupo de administradores, portanto, não é possível gravar nele. Quando você usa o comando bcdedit , ele é executado no contexto da conta SYSTEM, que possui permissões de gravação. Se você ativar a coluna Nome de usuário no Gerenciador de tarefas, verá que o Regedit é executado pela sua conta de usuário e bcdedit é executado pelo SYSTEM.

Soluções alternativas

Não é aconselhável editar diretamente o BCD com o Regedit e raramente é necessário, mas se você realmente precisar, uma maneira é conceder acesso de gravação à filial BCD00000000 . Claro que isso não é recomendado porque você precisa se lembrar de revogar a permissão mais tarde. Uma maneira mais fácil é simplesmente executar o Regedit no contexto SYSTEM .

    
por 06.10.2013 / 07:58
2

O @Synetech sugeriu que a solução é boa. Especialmente, um com sistema runas. Mas quero sugerir uma maneira simples de editar.

  1. Descarregar BCD00000000 hive. Você pode fazer isso, porque só é necessário durante a inicialização. (Selecione-o - > Arquivo - > Unload Hive ...)
  2. Carregue o arquivo BCD do disco como uma seção do Registro. (Se você não conseguir encontrar esse arquivo, atribua a letra da unidade para o volume. )
  3. Edite-o com simplicidade.

Você nem precisa carregá-lo novamente. No entanto, é recomendável fazer cópia de backup do arquivo BCD e reinicializar após as edições.

    
por 25.07.2014 / 08:25
1

Use o Regedit para ver as permissões. Observe que, por padrão, os administradores não ter acesso de gravação a essa chave ou subchaves. Parece que os administradores têm permissão para modificar o DAC, ou seja, permissões, então você pode tentar isso.

    
por 06.10.2013 / 07:13
1

A edição direta da ramificação BCD00000000 com um editor de registro não é aconselhável.

Neste ramo, você tem uma cópia do "System BCD", que é um arquivo de sistema protegido.

O sistema mantém o arquivo "System BCD" e o ramo de registro BCD00000000 em sincronia.

O BCD tem alguma estrutura - uma coleção de objetos, onde cada objeto tem novamente sua estrutura (lista de elementos).

A maioria dos elementos são strings simples ou números (inteiros, hexadecimais). Mas alguns inteiros são enumerações e dependem do contexto (!).

Alguns elementos podem ser novamente objetos com estrutura complexa, como elementos de dispositivo para um dispositivo VHD, por exemplo.

Para editar todos os elementos ou objetos do BCD, use a ferramenta de linha de comando "bcdedit" ou você pode usar o "Visual BCD Editor" - um completo editor de BCD GUI.

O Visual BCD Editor usa a BCD WMI Provider Interface para acesso ao BCD (uma API para acesso ao BCD).

Em sistemas UEFI, as coisas são ainda mais complexas - o BCD espelha parte da NVRAM também - então temos uma sincronização de três "lugares":

  1. NVRAM (parte dela)

  2. BCD na partição do sistema EFI

  3. HKLM \ BCD00000000 ramificação do registro

A documentação da Microsoft diz que são apenas duas formas "legais" de editar o BCD:

  1. usando o bcdedit (por meio de comandos únicos ou scripts)

  2. usando a interface do provedor BCD WMI (modo programático de edição)

por 10.10.2013 / 23:10