Compartilhar via


Rotinas da Biblioteca do Registro Run-Time

Para manipular entradas do Registro, os drivers podem chamar as rotinas RtlXxxRegistryXxx, que fornecem uma interface mais simples do que as rotinas ZwXxxKey. Ao fazer isso, o driver não precisa abrir e fechar manipuladores; em vez disso, o driver refere-se a chaves pelo nome.

Você passa os parâmetros RelativeTo e Path para cada rotina RtlXxxRegistryXxx. Se RelativeTo é RTL_REGISTRY_ABSOLUTE, Path especifica o caminho completo da chave, começando com a raiz \Registry. Se RelativeTo for RTL_REGISTRY_HANDLE, Path é, na verdade, um identificador aberto. Valores adicionais RTL_REGISTRY_XXX para RelativeTo especificam os caminhos de raízes comuns para a chave; nesses casos, Path especifica o caminho relativo a essa raiz. Por exemplo, RTL_REGISTRY_USER requer que o Caminho seja relativo às configurações do registro do usuário atual. (Esse valor equivale a especificar HKEY_CURRENT_USER em um aplicativo no modo de usuário.) Para obter uma descrição de todos os valores RTL_REGISTRY_XXX , consulte RtlCheckRegistryKey.

A tabela a seguir lista as operações que os drivers podem executar chamando as rotinas RtlXxxRegistryXxx.

Operação RtlXxxRegistryXxx função a ser chamada

Criar uma chave do Registro

RtlCreateRegistryKey

Verificar se existe uma chave do Registro

RtlCheckRegistryKey

Examinar um ou mais valores de chave do Registro

RtlQueryRegistryValues

Gravar um valor de chave do Registro

RtlWriteRegistryValue

Excluir um valor de chave do Registro

RtlDeleteRegistryValue

O exemplo de código a seguir ilustra como definir ValueName para \Registry\Machine\System\KeyName como um valor ULONG de 0xFF. Compare este exemplo com o correspondente na seção Rotinas de Objetos de Chave do Registro .

NTSTATUS status;
ULONG data = 0xFF;

status = RtlWriteRegistryValue(RTL_REGISTRY_ABSOLUTE,
                               (PWCSTR)L"\\Registry\\Machine\\System\\KeyName",
                               (PWCSTR)L"ValueName",
                               REG_DWORD,
                               &data,
                               sizeof(ULONG));

Embora você escreva menos linhas de código ao usar as rotinas RtlXxxRegistryXxx ao invés das rotinas ZwXxxKey, estas últimas são necessárias para executar certas operações. Por exemplo, não existe nenhuma rotina RtlXxxRegistryXxx que corresponda a ZwEnumerateKey.

Se você executar várias operações na mesma chave, as rotinas de chave ZwXxx serão mais eficientes. Você pode usar o mesmo identificador aberto para cada operação. Por outro lado, as rotinas RtlXxxRegistryXxx abrem e fecham um novo identificador para cada operação.