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.
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. 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 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. 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 Chaves e valores 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.Raymond Chen, "Why do registry keys have a default value?" 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 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". 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.
HKEY_LOCAL_MACHINE (HKLM) HKEY_LOCAL_MACHINE, ou abreviadamente HKLM, armazena configurações específicas do computador local.