Filtrando operações de registro em hives de aplicativo

Os aplicativos no modo de usuário usam hives de aplicativo no registro para armazenar dados de estado específicos do aplicativo.

Um driver de filtro do Registro recebe chamadas para sua rotina RegistryCallback para operações de registro em hives de aplicativo. Essas chamadas não distinguem entre operações de registro em hives de aplicativo e operações em outros tipos de hives do Registro.

Para carregar um hive de aplicativo, um aplicativo chama RegLoadAppKey.

Os hives de aplicativo são carregados \\REGISTRY\\A em em vez de em \\REGISTRY\\MACHINE ou \\REGISTRY\\USER.

Observe que não há nenhuma maneira de percorrer \\REGISTRY\\A. Uma tentativa de abrir uma chave em \REGISTRY\A falha com o erro status STATUS_ACCESS_DENIED.

Para acessar uma chave em um hive de aplicativo, um aplicativo usa o identificador que recebe quando chama RegLoadAppKey.

O sistema operacional descarrega automaticamente o hive do aplicativo depois que todos os identificadores para o hive são fechados.

Ao contrário de outros tipos de hives do Registro, para os quais cada chave é protegida com seu próprio descritor de segurança, a segurança de um hive de aplicativo é baseada no descritor de segurança do arquivo hive. Isso significa que:

  • Uma tentativa de definir um descritor de segurança em uma chave individual em um hive de aplicativo falha com o erro status STATUS_ACCESS_DENIED.
  • Uma entidade que é bem-sucedida no carregamento do hive pode modificar todo o hive.

Os drivers de filtro do Registro que lidam com operações de chave de criação e chave aberta (que são indicadas pelos valores de notificação RegNtPreOpenKey, RegNtPreOpenKeyEx, RegNtPreCreateKey e RegNtPreCreateKeyEx ) devem ter cuidado para não usar um caminho absoluto (um começando com \\REGISTRY\\A\\) para abrir um hive de aplicativo; somente o gerenciador do Registro pode fazer isso. Se um driver de filtro do Registro tentar abrir um hive de aplicativo dessa maneira (por exemplo, chamando a rotina ZwOpenKey), a operação falhará com o erro status STATUS_ACCESS_DENIED.

A cadeia de caracteres de nome de caminho absoluto aparece no membro CompleteName da estrutura REG_CREATE_KEY_INFORMATION, REG_CREATE_KEY_INFORMATION_V1, REG_OPEN_KEY_INFORMATION ou REG_OPEN_KEY_INFORMATION_V1 .