Rotinas da Biblioteca de Run-Time do Registro
Para manipular entradas do Registro, os drivers podem chamar as rotinas Xxx do Registro RtlXxx, que fornecem uma interface mais simples do que as rotinas de chave do ZwXxx. Ao fazer isso, o driver não é necessário para abrir e fechar alças; Em vez disso, o driver se refere a chaves por nome.
Você passa os parâmetros RelativeTo e Path para cada rotina Xxx do Registro RtlXxx. Se RelativeTo for RTL_REGISTRY_ABSOLUTE, Path especificará o caminho completo da chave, começando com a raiz \Registry . Se RelativeTo for RTL_REGISTRY_HANDLE, Path será, 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 Path seja relativo às configurações do registro do usuário atual. (Esse valor é equivalente 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 Xxx do Registro RtlXxx.
Operação | RtlXxxRegistryXxx rotina para chamar |
---|---|
Criar uma chave do Registro |
|
Verificar se existe uma chave do Registro |
|
Examinar um ou mais valores de chave do Registro |
|
Gravar um valor de chave do Registro |
|
Excluir um valor de chave do Registro |
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 Objeto 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 Xxx do Registro RtlXxx em vez das rotinas de chave do ZwXxx, as últimas são necessárias para executar determinadas operações. Por exemplo, não existe nenhuma rotina RtlXxxRegistry Xxx que corresponda a ZwEnumerateKey.
Se você executar várias operações na mesma chave, as rotinas de chave do ZwXxx serão mais eficientes. Você pode usar o mesmo identificador aberto para cada operação. Por outro lado, as rotinas RtlXxxRegistry Xxx abrem e fecham um novo identificador para cada operação.