Registro do Windows

O Registro do Windows é um banco de dados hierárquico que armazenas configurações de baixo nível para o sistema operacional Microsoft Windows e aplicações que optam por usar o registro, o que facilita sua administração. O núcleo, controladores de dispositivo, serviços, Administrador de Contas de Segurança e a interface do usuário podem usar o registro. O registro também permite o acesso a contadores para o desempenho do sistema de criação de perfis.

Em termos simples, o registro (ou Registro do Windows) contem informações, configurações, opções e outros valores para programas e hardware instalados em todas as versões dos sistemas operacionais Microsoft Windows. Por exemplo, quando um programa é instalado, uma nova sub-chave contendo configurações, como a localização de um programa, sua versão e como iniciar o programa, é adicionada ao Registro do Windows. Da mesma forma, todas as configurações alteráveis no Painel de Controle, associações das extensões de arquivos e configuração de hardware são armazenadas nesse banco de dados.[1]

Quando introduzido com o Windows 3.1, o Registro do Windows armazenava principalmente informações de configuração para componentes baseados no COM. O Windows 95 e o Windows NT estenderam seu uso para racionalizar e centralizar as informações na profusão de arquivos INI, que mantinham as configurações para programas individuais e eram armazenados em vários locais, dificultando a administração.[2][3][1] Não é necessário que os aplicativos do Windows usem o registro. Por exemplo, os aplicativos do Framework .NET usam arquivos XML para configuração, enquanto os aplicativos portáteis geralmente mantêm seus arquivos de configuração com seus executáveis.

Base lógica

editar

Antes do Registro do Windows, os arquivos .INI armazenavam as configurações de cada programa como um arquivo de texto, geralmente localizado em um local compartilhado que não fornecia configurações específicas do usuário em um cenário de vários usuários. Por outro lado, o Registro do Windows armazena todas as configurações de aplicativos em um repositório lógico (mas em vários arquivos distintos) e em um formulário padronizado. Segundo a Microsoft, isso oferece várias vantagens sobre os arquivos .INI.[1][4] Como a análise de arquivos é feita de maneira muito mais eficiente com um formato binário, ela pode ser lida ou gravada com mais rapidez do que um arquivo INI. Além disso, os dados fortemente tipados podem ser armazenados no registro, ao contrário das informações de texto armazenadas nos arquivos .INI. Este é um benefício ao editar as chaves manualmente usando o RegEdit.exe, o Editor de Registro do Windows integrado. Como as configurações de registro com base no usuário são carregadas de um caminho específico do usuário em vez de um local do sistema somente leitura, o registro permite que vários usuários compartilhem a mesma máquina e também permite que os programas funcionem para usuários com menos privilégios. O backup e a restauração também são simplificados, pois o registro pode ser acessado por uma conexão de rede para gerenciamento/suporte remoto, inclusive a partir scripts, usando o conjunto padrão de APIs, desde que o serviço de Registro Remoto esteja em execução e as regras de firewall permitam isso.

Como o registro é um banco de dados, ele oferece integridade de sistema aprimorada com recursos como atualizações atômicas. Se dois processos tentarem atualizar o mesmo valor do registro ao mesmo tempo, a alteração de um processo precederá a da outra e a consistência geral dos dados será mantida. Quando são feitas alterações nos arquivos .INI, tais condições de corrida podem resultar em dados inconsistentes que não correspondem à tentativa de atualização. O Windows Vista e sistemas operacionais posteriores fornecem atualizações transacionais para o Registro por meio do Kernel Transaction Manager, estendendo as garantias de atomicidade através de múltiplas alterações de chave e/ou valor, com a tradicional semântica de anulação de confirmação. (Observe, no entanto, que o NTFS também oferece suporte para o sistema de arquivos, portanto, as mesmas garantias poderiam, em teoria, ser obtidas com arquivos de configuração tradicionais.)

Estrutura

editar

Chaves e valores

editar

O registro contém dois elementos básicos: chaves e valores. Chaves de registro são objetos de contêiner semelhantes a pastas. Os valores de registro são objetos não-contêiner semelhantes aos arquivos. Chaves podem conter valores e sub-chaves. As chaves são referenciadas com uma sintaxe semelhante aos nomes de caminho do Windows, usando barras invertidas para indicar níveis de hierarquia. As chaves devem ter um nome não sensível a caixa sem barras invertidas.

A hierarquia de chaves do Registro só pode ser acessada a partir de um identificador de chave raiz conhecido (que é anônimo, mas cujo valor efetivo é um identificador numérico constante) que é mapeado para o conteúdo de uma chave de registro pré-carregada pelo núcleo a partir de uma "seção" armazenada ou para o conteúdo de uma sub-chave dentro de outra chave raiz, ou mapeada para um serviço registrado ou DLL que fornece acesso a suas sub-chaves e valores contidos.

Por exemplo, HKEY_LOCAL_MACHINE\Software\Microsoft\Windows refere-se à sub-chave "Windows" da sub-chave "Microsoft" da sub-chave "Software" da chave de raiz HKEY_LOCAL_MACHINE.

Há sete chaves raiz predefinidas, tradicionalmente nomeadas de acordo com suas constantes definidas na API do Win32, ou por abreviações sinônimas (dependendo dos aplicativos):

  • HKEY_LOCAL_MACHINE ou HKLM
  • HKEY_CURRENT_CONFIG ou HKCC
  • HKEY_CLASSES_ROOT ou HKCR
  • HKEY_CURRENT_USER ou HKCU
  • HKEY_USERS ou HKU
  • HKEY_PERFORMANCE_DATA (somente no Windows NT, mas invisível no Editor do Registro do Windows)
  • HKEY_DYN_DATA (somente no Windows 9x e visível no Editor do Registro do Windows)

Como outros arquivos e serviços do Windows, todas as chaves do Registro podem ser restringidas por listas de controle de acesso (ACLs), dependendo dos privilégios do usuário, dos tokens de segurança adquiridos pelos aplicativos ou das políticas de segurança do sistema (essas restrições podem ser predefinidas pelo próprio sistema e configuradas por administradores de sistema locais ou por administradores de domínio). Usuários, programas, serviços ou sistemas remotos diferentes podem ver apenas algumas partes da hierarquia ou hierarquias distintas das mesmas chaves raiz.

Os valores de registro são pares de nome/dados armazenados nas chaves. Os valores do registro são referenciados separadamente das chaves do Registro. Cada valor de registro armazenado em uma chave do Registro possui um nome exclusivo cuja caixa das letras não é significativa. As funções da API do Windows, que consultam e manipulam valores do registro, obtêm nomes de valor separadamente do caminho da chave e/ou identificador que identifica a chave pai. Os valores do Registro podem conter barras invertidas em seus nomes, mas isso dificulta a diferenciação de seus caminhos de chave ao usar algumas funções legadas da API do Registro do Windows (cujo uso está obsoleto na Win32).

A terminologia é um pouco enganosa, já que cada chave de registro é semelhante a uma matriz associativa, em que a terminologia padrão se refere à parte do nome de cada valor do registro como uma "chave". Os termos são uma reserva do registro de 16 bits no Windows 3, em que as chaves de registro não podiam conter pares de nome/dados arbitrários, mas continham apenas um valor sem nome (que tinha que ser uma cadeia de caracteres). Nesse sentido, o registro do Windows 3 era como uma única matriz associativa, na qual as chaves (no sentido de 'chave de registro' e 'chave de matriz associativa') formavam uma hierarquia, e os valores do registro eram todas as cadeias de caracteres. Quando o registro de 32 bits foi criado, o mesmo aconteceu com a capacidade adicional de criar vários valores nomeados para cada chave, e os significados dos nomes foram um pouco distorcidos.[5] Para compatibilidade com o comportamento anterior, cada chave do Registro pode ter um valor "padrão", cujo nome é a seqüência vazia.

Cada valor pode armazenar dados arbitrários com comprimento e codificação variável, mas que está associado a um tipo simbólico (definido como uma constante numérica) que define como analisar esses dados. Os tipos padrão são:

Lista de tipos de valores do registro
ID do tipo Nome simbólico do tipo Significado e codificação dos dados armazenados no valor do registro
0 REG_NONE Sem tipo (o valor armazenado, se houver)
1 REG_SZ Um valor de cadeia de caracteres, normalmente armazenado e exposto em UTF-16LE (quando usa o Unicode na versão das funções da API Win32), normalmente terminado por um caractere NULO
2 REG_EXPAND_SZ Um valor de cadeia de caracteres "expansível" que pode conter variáveis de ambiente, normalmente armazenadas e expostas em UTF-16LE, geralmente terminadas por um caractere NULO
3 REG_BINARY Dados binários (quaisquer dados arbirtrários)
4 REG_DWORD / REG_DWORD_LITTLE_ENDIAN Um valor DWORD, inteiro de 32 bits sem sinal (números entre 0 e 4.294.967.295 [232 – 1]) (pequena terminação)
5 REG_DWORD_BIG_ENDIAN Um valor DWORD, inteiro de 32 bits sem sinal (números entre 0 e 4.294.967.295 [232 – 1]) (grande terminação)
6 REG_LINK Uma ligação simbólica (UNICODE) para outra chave do Registro, especificando uma chave raiz e o caminho para a chave de destino
7 REG_MULTI_SZ Um valor de várias cadeias de caractere, que é uma lista ordenada de cadeias de caractere não vazias, normalmente armazenada e exposta em UTF-16LE, cada uma terminada por um caractere NULO, sendo a lista normalmente terminada por um segundo caractere NULO.
8 REG_RESOURCE_LIST Uma lista de recursos (usada pela enumeração e configuração de hardware Plug-and-Play)
9 REG_FULL_RESOURCE_DESCRIPTOR Um descritor de recursos (usado pela enumeração e configuração de hardware Plug-and-Play)
10 REG_RESOURCE_REQUIREMENTS_LIST Uma lista de requisitos de recursos (usada pela enumeração e configuração de hardware Plug-n-Play)
11 REG_QWORD / REG_QWORD_LITTLE_ENDIAN Um valor QWORD, um inteiro de 64 bits (de terminação grande ou pequena ou não especificada) (introduzido no Windows XP)

Chaves raiz

editar

As chaves no nível raiz do banco de dados hierárquico são geralmente nomeadas por suas definições de API do Windows, que começam com "HKEY".[2] Eles são frequentemente abreviados para um nome curto de três ou quatro letras começando com "HK" (por exemplo, HKCU e HKLM). Tecnicamente, são nomes predefinidas (com valores constantes conhecidos) para chaves específicas que são mantidas na memória ou armazenadas em arquivos de seção armazenados no sistema de arquivos local e carregados pelo kernel do sistema no momento da inicialização e compartilhados (com vários direitos de acesso) entre todos os processos em execução no sistema local ou carregados e mapeados em todos os processos iniciados em uma sessão do usuário quando o usuário faz logon no sistema.

Os nós HKEY_LOCAL_MACHINE (dados de configuração específicos da máquina local) e HKEY_CURRENT_USER (dados de configuração específicos do usuário) têm uma estrutura semelhante entre si, os aplicativos de usuário normalmente procuram suas configurações primeiro verificando-as em "HKEY_CURRENT_USER\Software\Nome do fornecedor\Nome do aplicativo\Versão\Nome da configuração" e, se a configuração não for encontrada, procure no mesmo local sob a chave HKEY_LOCAL_MACHINE. No entanto, o inverso pode se aplicar a configurações de diretiva impostas pelo administrador, nas quais o HKLM pode ter precedência sobre o HKCU. O Windows Logo Program possui requisitos específicos para onde diferentes tipos de dados do usuário podem ser armazenados e que o conceito de privilégio mínimo seja seguido para que o acesso de nível de administrador não seja necessário para usar um aplicativo.[a][6]

HKEY_LOCAL_MACHINE (HKLM)

editar

HKEY_LOCAL_MACHINE, ou abreviadamente HKLM, armazena configurações específicas do computador local.[7]

A chave localizada pelo HKLM na verdade não é armazenada no disco, mas mantida na memória pelo núcleo do sistema para mapear todas as outras sub-chaves. Os aplicativos não podem criar sub-chaves adicionais. No Windows NT, essa chave contém quatro sub-chaves, "SAM", "SECURITY", "SYSTEM" e "SOFTWARE", que são carregados no momento da inicialização em seus respectivos arquivos localizados na pasta %SystemRoot%\System32\config. Uma quinta sub-chave, "HARDWARE", é volátil e é criada dinamicamente e, como tal, não é armazenada em um arquivo (expõe uma exibição de todos os dispositivos Plug-and-Play atualmente detectados). No Windows Vista e posteriores, uma sexta e sétima sub-chaves, "COMPONENTS" e "BCD", são mapeadas na memória pelo núcleo sob demanda e carregadas de %SystemRoot%\system32\config\COMPONENTS ou a partir de dados de configuração de inicialização, \boot\BCD na partição do sistema.

  • A chave "HKLM\SAM" geralmente aparece como vazia para a maioria dos usuários (a menos que seja concedido acesso por administradores do sistema local ou administradores de domínios que gerenciam o sistema local). Ela é usada para fazer referência a todos os bancos de dados do "Administrador de Contas de Segurança" (Security Account Manager - SAM) para todos os domínios nos quais o sistema local foi administrativamente autorizado ou configurado (incluindo o domínio local do sistema em execução, cujo banco de dados SAM está armazenado em uma sub-chave também denominada "SAM": outras sub-chaves serão criadas conforme necessário, uma para cada domínio suplementar). Cada banco de dados SAM contém todas as contas internas (principalmente aliases de grupos) e contas configuradas (usuários, grupos e seus aliases, incluindo contas de convidados e contas de administrador) criadas e configuradas no respectivo domínio, para cada conta nesse domínio, contém, notavelmente, o nome de usuário que pode ser usado para fazer logon nesse domínio, o identificador de usuário exclusivo interno no domínio, um hash criptográfico de cada senha de usuário para cada protocolo de autenticação habilitado, o local de armazenamento de sua seção de registro do usuário, vários sinalizadores de estado (por exemplo, se a conta pode ser enumerada e ficar visível na tela do prompt de logon) e a lista de domínios (incluindo o domínio local) em que a conta foi configurada.
  • A chave "HKLM\SECURITY" geralmente aparece vazia para a maioria dos usuários (a menos que seja concedido acesso por usuários com privilégios administrativos) e está vinculada ao banco de dados de segurança do domínio no qual o usuário atual está conectado (se o usuário estiver conectado no domínio do sistema local, essa chave será vinculada à seção de registro armazenada pela máquina local e gerenciada pelos administradores do sistema local ou pela conta interna "Sistema" e por instaladores do Windows). O kernel irá acessá-lo para ler e aplicar a política de segurança aplicável ao usuário atual e a todos os aplicativos ou operações executados por esse usuário. Ele também contém uma sub-chave "SAM" que é dinamicamente vinculada ao banco de dados SAM do domínio no qual o usuário atual está logado.
  • A chave "HKLM\SYSTEM" normalmente só pode ser gravada por usuários com privilégios administrativos no sistema local. Ele contém informações sobre a configuração do sistema Windows, dados do gerador de número aleatório (random number generator - RNG) seguro, a lista de dispositivos montados atualmente contendo um sistema de arquivos, vários "HKLM\SYSTEM\Control Sets" numerados contendo configurações alternativas para drivers de hardware do sistema e serviços em execução no sistema local (incluindo o usado atualmente e um backup), uma sub-chave "HKLM\SYSTEM\Select" contendo o estado desses Conjuntos de Controle (Control Sets) e um "HKLM\SYSTEM\CurrentControlSet" que é dinamicamente vinculado no momento da inicialização ao Conjunto de Controle atualmente usado no sistema local. Cada Conjunto de Controles configurado contém:
    • uma sub-chave "Enum" enumerando todos os dispositivos Plug-and-Play conhecidos e associando-os a drivers de sistema instalados (e armazenando as configurações específicas de dispositivo desses drivers),
    • uma sub-chave "Services" listando todos os drivers de sistema instalados (com configuração não específica do dispositivo e a enumeração de dispositivos para os quais são instanciados) e todos os programas em execução como serviços (como e quando podem ser iniciados automaticamente),
    • uma sub-chave "Control" que organiza os vários drivers de hardware e programas em execução como serviços e toda a configuração de todo o sistema,
    • uma sub-chave "Hardware Profiles" que enumera os vários perfis que foram ajustados (cada um com as configurações "System" ou "Software" usadas para modificar o perfil padrão, nos drivers e serviços do sistema ou nos aplicativos), bem como a sub-chave "Hardware Profiles\Current" que é dinamicamente vinculada a um desses perfis.
  • A sub-chave "HKLM\SOFTWARE" contém o software e as configurações do Windows (no perfil de hardware padrão). Ela é modificada principalmente por instaladores de aplicativos e sistemas. Ela é organizada pelo fornecedor do software (com uma sub-chave para cada um), mas também contém uma sub-chave "Windows" para algumas configurações da interface do usuário do Windows, uma sub-chave "Classes" contendo todas as associações registradas de extensões de arquivo, tipos MIME, IDs de Classes de Objetos e ID de interfaces (para OLE, COM / DCOM e ActiveX), para os aplicativos instalados ou DLLs que podem estar manipulando esses tipos na máquina local (no entanto, essas associações são configuráveis para cada usuário, veja abaixo) e uma sub-chave "Policies" (também organizada pelo fornecedor) para impor políticas de uso geral em aplicativos e serviços do sistema (incluindo o armazenamento central de certificados usado para autenticar, autorizar ou desaprovar sistemas remotos ou serviços em execução fora do domínio de rede local).
  • A chave "HKLM\SOFTWARE\Wow6432Node" é usada por aplicativos de 32 bits em um sistema operacional Windows de 64 bits e é equivalente, mas separada, a "HKLM\SOFTWARE". O caminho da chave é apresentado de forma transparente aos aplicativos de 32 bits pelo WoW64 como HKLM\SOFTWARE[8] (de maneira semelhante que os aplicativos de 32 bits enxergam a %SystemRoot%\Syswow64 como %SystemRoot%\System32).

HKEY_CURRENT_CONFIG (HKCC)

editar

HKEY_CURRENT_CONFIG, ou abreviadamente HKCC, contém informações reunidas no tempo de execução. As informações armazenadas nessa chave não são armazenadas permanentemente no disco, mas sim geradas novamente no momento da inicialização. É um identificador para a chave "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Hardware Profiles\Current", que é inicialmente vazia, mas preenchida no momento da inicialização, carregando uma das outras sub-chaves armazenadas em "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Hardware Profiles".

HKEY_CLASSES_ROOT (HKCR)

editar

HKEY_CLASSES_ROOT, ou abreviadamente HKCR, contém informações sobre aplicativos registrados, como associações de arquivo e IDs de Classe de Objeto OLE, vinculando-os aos aplicativos usados para manipular esses itens. No Windows 2000 e superior, o HKCR é uma compilação de HKCU\Software\Classes e HKLM\Software\Classes baseados em máquina. Se um determinado valor existir em ambas as sub-chaves acima, o em HKCU\Software\Classes terá precedência.[9] O design permite o registro específico de máquina ou usuário de objetos COM.

HKEY_USERS (HKU)

editar

HKEY_USERS, ou abreviadamente HKU, contém sub-chaves correspondentes às chaves HKEY_CURRENT_USER para cada perfil de usuário carregado ativamente na máquina, embora as seções de usuário geralmente sejam carregadas apenas para usuários conectados no momento.

HKEY_CURRENT_USER (HKCU)

editar

HKEY_CURRENT_USER, ou abreviadamente HKCU, armazena configurações específicas do usuário atualmente logado.[10] A chave HKEY_CURRENT_USER é uma ligação para a sub-chave de HKEY_USERS que corresponde ao usuário. A mesma informação é acessível em ambos os locais. A sub-chave específica referenciada é "(HKU)\(SID)\..." onde (SID) corresponde ao Windows SID. Se a chave "(HKCU)" tiver o seguinte sufixo "(HKCU)\Software\Classes\...", então ela corresponderá a "(HKU)\(SID)_CLASSES\...", ou seja, o sufixo que possui a cadeia de caracteres "_CLASSES " é anexada ao (SID).

Nos sistemas Windows NT, as configurações de cada usuário são armazenadas em seus próprios arquivos chamados NTUSER.DAT e USRCLASS.DAT dentro de sua própria subpasta Documents and Settings (ou sua própria subpasta Users no Windows Vista e superiores). As configurações nesta seção seguem usuários com um perfil móvel de máquina para máquina.

HKEY_PERFORMANCE_DATA

editar

Essa chave fornece informações de tempo de execução nos dados de desempenho fornecidos pelo próprio kernel do NT, ou em drives do sistema em execução, programas e serviços do sistema que fornecem dados de desempenho. Essa chave não é armazenada em nenhuma seção e não é exibida no Editor do Registro, mas é visível através das funções de registro na API do Windows ou em uma exibição simplificada por meio da guia Desempenho do Gerenciador de Tarefas (apenas para alguns dados de desempenho no sistema local) ou através de painéis de controle mais avançados (como o Performances Monitor ou o Performances Analyzer, que permite coletar e registrar esses dados, inclusive de sistemas remotos).

HKEY_DYN_DATA

editar

Essa chave é usada apenas no Windows 95, Windows 98 e Windows ME.[11] Ele contém informações sobre dispositivos de hardware, incluindo estatísticas de desempenho Plug and Play e de rede. As informações nesta seção também não são armazenadas no disco rígido. A informação Plug and Play é reunida e configurada na inicialização e é armazenada na memória.[12]

Seções

editar

Mesmo que o registro se apresente como um banco de dados hierárquico integrado, as ramificações do registro são, na verdade, armazenadas em vários arquivos de disco chamados de seções (hives).[13] (A palavra hive (colmeia) constitui uma piada interna).[14]

Algumas seções são voláteis e não são armazenadas no disco. Um exemplo disso é o ramo de ramificação que começa em HKLM\HARDWARE. Essa seção registra informações sobre o hardware do sistema e é criada sempre que o sistema inicializa e executa a detecção de hardware.

Configurações individuais para usuários em um sistema são armazenadas em uma seção (arquivo de disco) por usuário. Durante o login do usuário, o sistema carrega a seção do usuário sob a chave HKEY_USERS e define a referência simbólica HKCU (HKEY_CURRENT_USER) para apontar para o usuário atual. Isso permite que os aplicativos armazenem/recuperem configurações para o usuário atual implicitamente sob a chave HKCU.

Nem todas as seções são carregadas a qualquer momento. No momento da inicialização, apenas um conjunto mínimo de seções é carregado e, depois disso, as seções são carregadas à medida que o sistema operacional é inicializado e os usuários efetuam login ou sempre que uma seção é explicitamente carregada por um aplicativo.

Edição

editar

Editores de registro

editar

O registro contém informações de configuração importantes para o sistema operacional, para aplicativos instalados, bem como configurações individuais para cada usuário e aplicativo. Uma mudança descuidada na configuração do sistema operacional no registro pode causar danos irreversíveis, portanto, geralmente, somente programas instaladores que realizam alterações no banco de dados do registro durante a instalação/configuração e remoção. Se um usuário quiser editar o registro manualmente, a Microsoft recomenda que seja feito um backup do registro antes da alteração.[15] Quando um programa é removido do painel de controle, ele não é completamente removido e o usuário deve verificar manualmente o interior dos diretórios, como arquivos de programa. Depois disso, o usuário precisa remover manualmente qualquer referência ao programa desinstalado no registro. Isso geralmente é feito usando o RegEdit.exe.[16] A edição do registro às vezes é necessária ao trabalhar com problemas específicos do Windows, por exemplo, problemas ao fazer login em um domínio podem ser resolvidos editando o registro.[17]

O Registro do Windows pode ser editado manualmente usando programas como o RegEdit.exe, embora essas ferramentas não exponham alguns dos metadados do Registro, como a data da última modificação.

O editor de registro para a série 3.1/95 de sistemas operacionais é RegEdit.exe e para o Windows NT é RegEdt32.exe. As funcionalidades são mescladas no Windows XP. Ferramentas opcionais e/ou de terceiros, semelhantes ao RegEdit.exe, estão disponíveis para várias versões do Windows CE.

O Editor do Registro permite que os usuários executem as seguintes funções:

  • Criação, manipulação, renomeação[b] e exclusão de chaves do Registro, sub-chaves, valores e dados de valor
  • Importação e exportação de arquivos .REG, exportando dados no formato de seção binária
  • Carregamento, manipulação e descarga de arquivos de formato de seção de registro (somente em sistemas Windows NT)
  • Definição de permissões com base em ACLs (somente em sistemas Windows NT)
  • Marcação de chaves de registro selecionadas pelo usuário como Favoritos
  • Busca de cadeias de caracteres particulares em nomes de chaves, nomes de valor e dados de valor
  • Edição remota do registro em outro computador em rede

Arquivos .REG

editar

Os arquivos .REG (também conhecidos como entradas de registro) são arquivos legíveis baseados em texto para exportação e importação de partes do registro. No Windows 2000 e posteriores, eles contêm a cadeia de carcteres Windows Registry Editor Version 5.00 no início e são baseados em Unicode. Nos sistemas Windows 9x e NT 4.0, eles contêm a string REGEDIT4 e são baseados em ANSI.[18] No formato do Windows 9x. os arquivos .REG são compatíveis com o Windows 2000 e posteriores. O Editor do Registro no Windows nesses sistemas também suporta a exportação de arquivos .REG no formato Windows 9x/NT. Os dados são armazenados em arquivos .REG usando a seguinte sintaxe:[18]

[<Nome da seção>\<Nome da chave>\<Nome da sub-chave>]
"Nome do valor"=<Tipo do valor>:<Dados do valor>

O Valor Padrão de uma chave pode ser editado usando "@" em vez de "Nome do valor":

[<Nome da seção>\<Nome da chave>\<Nome da sub-chave>]
@=<Tipo do valor>:<Dados do valor>

Valores de cadeia de caracteres não requerem um <Tipo de valor> (veja o exemplo), mas barras invertidas ('\') precisam ser escritas como uma barra invertida dupla ('\\') e aspas duplas ('"') como barra invertida e aspas duplas ( '\"').

Por exemplo, para adicionar os valores "Valor A", "Valor B", "Valor C", "Valor D", "Valor E", "Valor F", "Valor G", "Valor H", "Valor I", "Valor J", "Valor K", "Valor L" e "Valor M" para a chave HKLM\SOFTWARE\Foobar:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Foobar]
"Valor A"="<Dado de valor de cadeia de caracteres com caracteres de escape>"
"Valor B"=hex:<Dados binários (como lista de valores hexadecimais delimitadas por vírgula)>
"Valor C"=dword:<Valor inteiro DWORD>
"Valor D"=hex(0):<REG_NONE (como lista delimitada por vírgulas de valores hexadecimais)>
"Valor E"=hex(1):<REG_SZ (como lista de valores hexadecimais delimitada por vírgulas representando uma cadeia de caracteres UTF-16LE terminada em NUL)>
"Valor F"=hex(2):<Dados de valor de string expansíveis (como lista delimitada por vírgula de valores hexadecimais que representam uma cadeia de caracteres UTF-16LE terminada em NUL)>
"Valor G"=hex(3):<Dados binários (como lista delimitada por vírgulas de valores hexadecimais)>; igual a "Valor B"
"Valor H"=hex(4):<Valor DWORD (como lista delimitada por vírgulas de 4 valores hexadecimais, na ordem de bytes de terminação pequena)>
"Valor I"=hex(5):<Valor DWORD (como lista delimitada por vírgulas de 4 valores hexadecimais, em ordem de bytes de terminação grande)>
"Valor J"=hex(7):<Dados de valores com várias cadeias de caractere (como lista delimitada por vírgula de valores hexadecimais que representam cadeias de caractere UTF-16LE terminadas em NUL)>
"Valor K"=hex(8):<REG_RESOURCE_LIST (como lista delimitada por vírgulas de valores hexadecimais)>
"Valor L"=hex(a):<REG_RESOURCE_REQUIREMENTS_LIST (como lista delimitada por vírgulas de valores hexadecimais)>
"Valor M"=hex(b):<Valor QWORD (como lista delimitada por vírgulas de 8 valores hexadecimais, em ordem de byte de terminação pequena)>

Os dados dos arquivos .REG podem ser adicionados/mesclados ao registro clicando duas vezes nesses arquivos ou usando a opção /s na linha de comando. Arquivos .REG também podem ser usados para remover dados do registro.

Para remover uma chave (e todas as sub-chaves, valores e dados), o nome da chave deve ser precedido por um sinal de menos ("-").[18]

Por exemplo, para remover a chave HKLM\SOFTWARE\Foobar (e todas as sub-chaves, valores e dados),

[-HKEY_LOCAL_MACHINE\SOFTWARE\Foobar]

Para remover um valor (e seus dados), os valores a serem removidos devem ter um sinal de menos ("-") após o sinal de igual ("=").[18]

Por exemplo, para remover apenas os valores "Valor A" e o "Valor B" (e seus dados) da chave HKLM\SOFTWARE\Foobar:

[HKEY_LOCAL_MACHINE\SOFTWARE\Foobar]
"Valor A"=-
"Valor B"=-

Para remover apenas o valor Padrão da chave HKLM\SOFTWARE\ Foobar (e seus dados):

[HKEY_LOCAL_MACHINE\SOFTWARE\Foobar]
@=-

As linhas que começam com um ponto e vírgula são consideradas comentários:

; Isto é um comentário. Isto pode ser substituído em qualquer parte de um arquivo .reg
[HKEY_LOCAL_MACHINE\SOFTWARE\Foobar]
"Valor"="Cadeia de caracteres de exemplo"

Diretivas de grupo

editar
 Ver artigo principal: Diretiva de grupo

As diretivas de grupo (ou políticas de grupo) do Windows podem alterar as chaves do Registro para várias máquinas ou usuários individuais com base nas diretiva. Quando uma diretiva entra em vigor pela primeira vez para uma máquina ou para um usuário individual de uma máquina, as configurações do registro especificadas como parte da diretiva são aplicadas às configurações da máquina ou do usuário.

O Windows também procurará diretivas atualizadas e as aplicará periodicamente, normalmente a cada 90 minutos.[19] Por meio de seu escopo, uma diretiva define a quais máquinas e/ou usuários a política deve ser aplicada. Se uma máquina ou usuário está dentro do escopo de uma política ou não, é definido por um conjunto de regras que podem filtrar o local da máquina ou conta de usuário no diretório organizacional, usuários específicos ou contas de máquina ou grupos de segurança. Regras mais avançadas podem ser configuradas usando expressões do Windows Management Instrumentation. Essas regras podem filtrar propriedades como nome do fornecedor do computador, arquitetura da CPU, software instalado ou redes conectadas.

Por exemplo, o administrador pode criar uma diretiva com um conjunto de configurações de registro para máquinas no departamento de contabilidade e uma diretiva com outro (bloqueio) conjunto de configurações de registro para terminais de quiosque na área de visitantes. Quando uma máquina é movida de um escopo para outro (por exemplo, alterando seu nome ou movendo-se para outra unidade organizacional), a diretiva correta é aplicada automaticamente. Quando uma diretiva é alterada, ela é automaticamente aplicada novamente a todas as máquinas atualmente em seu escopo.

A diretiva é editada por meio de vários modelos administrativos que fornecem uma interface do usuário para escolher e alterar as configurações. O conjunto de modelos administrativos é extensível e os pacotes de software que suportam essa administração remota podem registrar seus próprios modelos.

Edição em linha de comando

editar

O registro pode ser manipulado de várias maneiras a partir da linha de comando. As ferramentas de utilitário Reg.exe e RegIni.exe estão incluídas no Windows XP e versões posteriores do Windows. Locais alternativos para versões herdadas do Windows incluem os CDs do Resource Kit ou o CD de instalação original do Windows.

Além disso, um arquivo .REG pode ser importado da linha de comando com o seguinte comando:

RegEdit.exe /s arquivo

O /s significa que o arquivo será silenciosamente mesclado ao registro. Se o parâmetro /s for omitido, o usuário será solicitado a confirmar a operação. No Windows 98, Windows 95 e pelo menos algumas configurações do Windows XP, a opção /s também faz com que o RegEdit.exe ignore a configuração no registro que permite que os administradores o desabilitem. Ao usar a opção /s o RegEdit.exe não retorna um código de retorno apropriado se a operação falhar, ao contrário de Reg.exe, que o faz.

RegEdit.exe /e arquivo

exporta o registro inteiro no formato V5 para um arquivo UNICODE .REG, enquanto que

RegEdit.exe /e arquivo HKEY_CLASSES_ROOT[\<chave>]
RegEdit.exe /e arquivo HKEY_CURRENT_CONFIG[\<chave>]
RegEdit.exe /e arquivo HKEY_CURRENT_USER[\<chave>]
RegEdit.exe /e arquivo HKEY_LOCAL_MACHINE[\<chave>]
RegEdit.exe /e arquivo HKEY_USERS[\<chave>]

exporta apenas a (sub)chave especificada (que deve ser colocada entre aspas se contiver espaços).

RegEdit.exe /a arquivo

exporta o registro inteiro no formato V4 para um arquivo ANSI .REG.

RegEdit.exe /a arquivo <chave>

exporta apenas a (sub)chave especificada (que deve ser colocada entre aspas se contiver espaços).

Também é possível usar o Reg.exe. Aqui está um exemplo para exibir o conteúdo do valor do registro Version.

Reg.exe QUERY HKLM\Software\Microsoft\ResKit /v Version

Outras opções de linha de comando incluem um VBScript ou JScript junto com CScript, WMI ou WMIC.exe e o Windows PowerShell.

As permissões do registro podem ser manipuladas por meio da linha de comando usando o RegIni.exe e a ferramenta SubInACL.exe. Por exemplo, as permissões na chave HKEY_LOCAL_MACHINE\SOFTWARE podem ser exibidas usando:

SubInACL.exe /keyreg HKEY_LOCAL_MACHINE\SOFTWARE /display

Comandos e scripts do PowerShell

editar
 
Usando o PowerShell para navegar no registro

O Windows PowerShell vem com um provedor de registro que apresenta o registro como um tipo de local semelhante ao sistema de arquivos. Os mesmos comandos usados ​​para manipular arquivos/diretórios no sistema de arquivos podem ser usados ​​para manipular chaves/valores do registro.

Do mesmo modo como o sistema de arquivos, o PowerShell usa o conceito de um local atual que define o contexto no qual os comandos, por padrão, operam. O comando Get-ChildItem (também disponível por meio do alias ls ou dir) recupera as chaves filhas do local atual. Usando o comando Set-Location (ou o alias cd), o usuário pode alterar o local atual para outra chave do registro. Comandos que renomeiam itens, removem itens, criam novos itens ou definem conteúdo de itens ou propriedades podem ser usados ​​para renomear chaves, remover chaves ou sub-árvores inteiras ou alterar valores.

Por meio de arquivos de scripts do PowerShell, um usuário/administrador pode preparar scripts que, quando executados, alteram o registro. Esses scripts podem ser distribuídos para usuários/administradores que podem executá-los em máquinas individuais.

O provedor do Registro do PowerShell oferece suporte a transações, ou seja, várias alterações no registro podem ser agrupadas em uma única transação atômica. Uma transação atômica garante que todas as alterações sejam confirmadas no banco de dados ou, se o script falhar, nenhuma das alterações será confirmada no banco de dados.

Programas ou scripts

editar

O registro pode ser editado por meio das APIs da Advanced Windows 32 Base API Library (advapi32.dll).[20]

Lista de registro de funções da API
RegCloseKey RegOpenKey RegConnectRegistry RegOpenKeyEx
RegCreateKey RegQueryInfoKey RegCreateKeyEx RegQueryMultipleValues
RegDeleteKey RegQueryValue RegDeleteValue RegQueryValueEx
RegEnumKey RegReplaceKey RegEnumKeyEx RegRestoreKey
RegEnumValue RegSaveKey RegFlushKey RegSetKeySecurity
RegGetKeySecurity RegSetValue RegLoadKey RegSetValueEx
RegNotifyChangeKeyValue RegUnLoadKey

Muitas linguagens de programação oferecem funções de biblioteca de tempo de execução internas ou classes que envolvem as APIs do Windows subjacentes e, portanto, permitem que os programas armazenem configurações no registro (por exemplo, Microsoft.Win32.Registry em VB.NET e C# ou TRegistry em Delphi e Free Pascal). Aplicativos habilitados para COM, como o Visual Basic 6, podem usar o objeto WSH WScript.Shell. Outra maneira é usar o Windows Resource Kit Tool, Reg.exe, executando-o a partir do código,[21] embora isso seja considerado uma prática de programação ruim.

Da mesma forma, linguagens de script como Perl (com Win32::TieRegistry), Python (com winreg), TCL (que vem com o pacote de registro),[22] Windows Powershell e Windows Scripting Host também permitem a edição de registro a partir de scripts.

Edição offline

editar

A offreg.dll,[23] disponível no Windows Driver Kit, oferece um conjunto de APIs para a criação e manipulação de seções do Registro não carregadas atualmente, semelhantes às fornecidas pela advapi32.dll.

Também é possível editar o registro (seções) de um sistema offline no Windows PE ou no Linux (no último caso, usando ferramentas de código aberto).

Auto-registro do COM

editar

Antes da introdução do COM sem registro, os desenvolvedores eram encorajados a adicionar o código de inicialização aos binários em processo e fora do processo para executar a configuração do registro necessária para que o objeto funcionasse. Para binários em processo, como arquivos .DLL e .OCX, os módulos normalmente exportavam uma função chamada DllInstall()[24] que podia ser chamada por programas de instalação ou chamada manualmente com utilitários como Regsvr32.exe.[25] Binários fora de processo normalmente suportam os argumentos de linha de comando /Regserver e /Unregserver que criaram ou excluíram as configurações de registro necessárias.[26] Os aplicativos COM que quebram devido a problemas de Inferno de DLLs geralmente podem ser reparados com o RegSvr32.exe ou com a opção /RegServer sem precisar chamar novamente os programas de instalação.[27]

Funcionalidade avançada

editar

O Windows expõe APIs que permitem que aplicativos de modo de usuário se registrem para receber um evento de notificação se uma determinada chave de registro for alterada.[28] APIs também estão disponíveis para permitir que aplicativos no modo de núcleo filtrem e modifiquem chamadas de registro feitas por outros aplicativos.[29]

O Windows também oferece suporte a acesso remoto ao registro de outro computador por meio da função RegConnectRegistry[30] se o serviço de Registro Remoto estiver em execução, configurado corretamente e o tráfego de rede não estiver protegido por firewall.[31]

Desvantagens

editar

Algumas críticas são feitas ao conceito de registro do sistema no Windows. A primeira delas é que pequenas falhas no registro podem tornar todo o sistema inoperante, situação que pode ser sanada com ações de reparação e/ou recuperação tanto através do utilitário System File Checker quanto ademais ações de recuperação do Regedit recomendados pela Microsoft através dos Bases de Conhecimento (Knowledge Base), artigos de suporte (exemplo o artigo 971187 ou 927525) ou o fórum de discussão disponibilizado pelo https://answers.microsoft.com (como por exemplo o fórum COMO POSSO RECUPERAR O REGEDIT?). Reparos no registro são tarefas difíceis para um usuário-final.

Outra crítica é que aplicativos sem programa de remoção, ou com programas de remoção incompletos podem deixar informações no registro mesmo depois da remoção. Isto faz o volume de dados dentro do registro cresça sem controle e acabe comprometendo o desempenho e até mesmo a estabilidade do sistema.

Equivalentes e alternativas

editar

Há estruturas semelhantes em outros sistemas operacionais. No Linux e outros sistemas da família Unix, existe no sistema de arquivos o diretório /etc/ que concentra boa parte dos arquivos de configuração utilizados pelo sistema operacional e suas ferramentas. As configurações de cada usuário são restritas ao seu próprio subdiretório a partir de /home/, via de regra, em arquivos individuais ou diretórios ocultos pela convenção POSIX de iniciar seus nomes com um ponto. As configurações de sistema e usuários são completamente separadas e complementares. Podem ser copiadas e transferidas sem as dificuldades inerentes ao Registro, o que facilita cópias de back-up incremental.

Ver também

editar

Notas

  1. Quando os aplicativos não são executados porque solicitam mais privilégios do que eles exigem (e são negados esses privilégios), isso é conhecido como um bug de aplicativo de usuário limitado (LUA).
  2. Renomeação de chave é implementada como remoção e adição mantendo sub-chaves/valores, enquanto que APIs subjacentes não suportam a função de renomeação diretamente

Referências

  1. a b c «The System Registry» 
  2. «Windows 95 Architecture Components» 
  3. Esposito, Dino (Novembro de 2000). «Windows 2000 Registry: Latest Features and APIs Provide the Power to Customize and Extend Your Apps». MSDN Magazine. Microsoft. Consultado em 19 de julho de 2007. Cópia arquivada em 15 de abril de 2003 
  4. «Windows 95 Architecture Components». www.microsoft.com (em inglês). Consultado em 29 de abril de 2008. Arquivado do original em 7 de fevereiro de 2008. The following table shows other difficulties or limitations caused by using .INI files that are overcome by using the Registry. 
  5. Raymond Chen, "Why do registry keys have a default value?"
  6. «Designed for Windows XP Application Specification». Microsoft. 20 de agosto de 2002. Consultado em 8 de abril de 2009 
  7. «HKEY_LOCAL_MACHINE». Gautam. 2009. Consultado em 8 de abril de 2009 
  8. «Registry Keys Affected by WOW64 (Windows)». Msdn.microsoft.com. Consultado em 10 de abril de 2014 
  9. «Description of the Microsoft Windows registry». Consultado em 25 de setembro de 2008 
  10. «HKEY_CURRENT_USER». Microsoft. 2009. Consultado em 8 de abril de 2009 
  11. «Description of the HKEY_DYN_DATA Registry Key in Windows 95, Windows 98, and Windows 98 SE». support.microsoft.com 
  12. «A Closer Look at HKEY_DYN_DATA». rinet.ru. Arquivado do original em 9 de maio de 2008 
  13. «Registry hives». Consultado em 19 de julho de 2007 
  14. Chen, Raymond (8 de agosto de 2011). «Why is a registry file called a "hive"?». The Old New Thing. Consultado em 29 de julho de 2011 
  15. «Incorrect Icons Displayed for .ico Files». 15 de novembro de 2009. Consultado em 31 de março de 2012 
  16. «How to Completely Uninstall / Remove a Software Program in Windows without using 3rd Party Software? - AskVG». www.askvg.com 
  17. «You may receive a "STOP 0x00000035 NO_MORE_IRP_STACK_LOCATIONS" error message when you try to log on to a domain». 9 de outubro de 2011. Consultado em 31 de março de 2012  This page tells the user to edit the registry when resolving the issue.
  18. a b c d «Como adicionar, modificar ou excluir subchaves e valores usando um arquivo .reg». support.microsoft.com 
  19. «Applying Group Policy». Microsoft 
  20. «Reading and Writing Registry Values with Visual Basic». Consultado em 19 de julho de 2007. Arquivado do original em 14 de setembro de 2007 
  21. «REG command in Windows XP». Consultado em 19 de julho de 2007 
  22. «registry manual page – Tcl Bundled Packages». www.tcl.tk. Consultado em 14 de dezembro de 2017 
  23. «Offline Registry Library». Consultado em 4 de junho de 2014 
  24. «DllInstall Function». Microsoft. 7 de março de 2012. Consultado em 22 de março de 2012 
  25. «Regsvr32». Microsoft. Consultado em 22 de março de 2012 
  26. «How to: Register Automation Servers». Microsoft. Consultado em 22 de março de 2012 
  27. «How to re-register PowerPoint 2000, PowerPoint 2003, PowerPoint 2007 and PowerPoint 2010». Microsoft. Janeiro de 2012. Consultado em 22 de março de 2012 
  28. «RegNotifyChangeKeyValue function». Microsoft 
  29. «Registering for Notifications». Microsoft 
  30. «RegConnectRegistry function». Microsoft 
  31. «How to Manage Remote Access to the Registry». Microsoft