Função ZwCreateKey (wdm.h)

A rotina ZwCreateKey cria uma nova chave do Registro ou abre uma existente.

Sintaxe

NTSYSAPI NTSTATUS ZwCreateKey(
  [out]           PHANDLE            KeyHandle,
  [in]            ACCESS_MASK        DesiredAccess,
  [in]            POBJECT_ATTRIBUTES ObjectAttributes,
                  ULONG              TitleIndex,
  [in, optional]  PUNICODE_STRING    Class,
  [in]            ULONG              CreateOptions,
  [out, optional] PULONG             Disposition
);

Parâmetros

[out] KeyHandle

Ponteiro para uma variável HANDLE que recebe um identificador para a chave.

[in] DesiredAccess

Especifica um valor ACCESS_MASK que determina o acesso solicitado ao objeto . Além dos direitos de acesso definidos para todos os tipos de objetos (consulte ACCESS_MASK), o chamador pode especificar um ou mais dos seguintes direitos de acesso, que são específicos para diretórios de objeto:

Sinalizador DesiredAccess Permite que o chamador faça isso
KEY_QUERY_VALUE Ler valores de chave.
KEY_SET_VALUE Gravar valores de chave.
KEY_CREATE_SUB_KEY Crie subchaves para a chave.
KEY_ENUMERATE_SUB_KEYS Leia as subchaves da chave.
KEY_CREATE_LINK Crie um link simbólico para a chave. Esse sinalizador não é usado por drivers intermediários e de dispositivo.
KEY_NOTIFY Peça para receber notificação quando o nome, o valor ou os atributos da chave forem alterados. Para obter mais informações, consulte ZwNotifyChangeKey.

O chamador também pode especificar uma das seguintes constantes, que combina vários sinalizadores ACCESS_MASK.

Constante Consiste nesses sinalizadores de ACCESS_MASK
KEY_READ STANDARD_RIGHTS_READ, KEY_QUERY_VALUE, KEY_ENUMERATE_SUB_KEYS e KEY_NOTIFY
KEY_WRITE STANDARD_RIGHTS_WRITE, KEY_SET_VALUE e KEY_CREATE_SUB_KEY
KEY_EXECUTE O mesmo que KEY_READ.
KEY_ALL_ACCESS STANDARD_RIGHTS_ALL, KEY_QUERY_VALUE, KEY_SET_VALUE, KEY_CREATE_SUB_KEY, KEY_ENUMERATE_SUB_KEYS, KEY_NOTIFY e KEY_CREATE_LINK

[in] ObjectAttributes

Ponteiro para uma estrutura OBJECT_ATTRIBUTES que especifica o nome do objeto e outros atributos. Use InitializeObjectAttributes para inicializar essa estrutura. Se o chamador não estiver em execução em um contexto de thread do sistema, ele deverá definir o atributo OBJ_KERNEL_HANDLE quando chamar InitializeObjectAttributes.

TitleIndex

Os drivers intermediários e de dispositivo definem esse parâmetro como zero.

[in, optional] Class

Ponteiro para uma cadeia de caracteres Unicode que contém a classe de objeto da chave. Essas informações são usadas pelo gerenciador de configurações.

[in] CreateOptions

Especifica as opções a serem aplicadas ao criar ou abrir uma chave, especificadas como uma combinação compatível dos sinalizadores a seguir.

Sinalizador CreateOptions Descrição
REG_OPTION_VOLATILE A chave não é preservada quando o sistema é reinicializado.
REG_OPTION_NON_VOLATILE A chave é preservada quando o sistema é reinicializado.
REG_OPTION_CREATE_LINK A chave recém-criada é um link simbólico. Esse sinalizador não é usado por drivers intermediários e de dispositivo.
REG_OPTION_BACKUP_RESTORE A chave deve ser criada ou aberta com privilégios especiais que permitem operações de backup e restauração. Esse sinalizador não é usado por drivers intermediários e de dispositivo.

[out, optional] Disposition

Ponteiro para uma variável que recebe um valor que indica se uma nova chave foi criada ou uma existente aberta.

Valor de disposição Descrição
REG_CREATED_NEW_KEY Uma nova chave foi criada.
REG_OPENED_EXISTING_KEY Uma chave existente foi aberta.

Retornar valor

ZwCreateKey retorna STATUS_SUCCESS com êxito ou o código de erro NTSTATUS apropriado em caso de falha.

Comentários

ZwCreateKey fornece um identificador que o chamador pode usar para manipular uma chave do Registro. Para obter mais informações, consulte Usando o Registro em um Driver.

Depois que o identificador apontado por KeyHandle não estiver mais em uso, o driver deverá chamar ZwClose para fechá-lo.

Há duas maneiras alternativas de especificar o nome do arquivo a ser criado ou aberto com ZwCreateKey:

  1. Como um nome de caminho totalmente qualificado, fornecido no membro ObjectName da entrada ObjectAttributes. Os nomes de caminho das chaves do Registro começam com \Registry.

  2. Como pathname relativo a outra chave do Registro, representada pelo identificador no membro RootDirectory do ObjectAttributes de entrada.

Se a chave especificada por ObjectAttributes não existir, a rotina tentará criar a chave. Para que essa tentativa seja bem-sucedida, a nova chave deve ser uma subchave direta da chave que é referenciada por RootDirectory e a chave à qual RootDirectory se refere deve ter sido aberta para acesso KEY_CREATE_SUB_KEY.

Se a chave especificada já existir, ela será aberta e seu valor não será afetado de forma alguma.

Os atributos de segurança especificados por ObjectAttributes quando uma chave é criada determinam se o DesiredAccess especificado é concedido em chamadas subsequentes para ZwCreateKey e ZwOpenKey.

Se o chamador não estiver em execução em um contexto de thread do sistema, ele deverá garantir que todos os identificadores que ele cria sejam identificadores privados. Caso contrário, o identificador pode ser acessado pelo processo em cujo contexto o driver está em execução. Para obter mais informações, consulte Identificadores de objeto.

Para obter mais informações sobre como trabalhar com chaves do Registro, consulte Usando o Registro em um Driver.

Se a chamada para essa função ocorrer no modo de usuário, você deverá usar o nome "NtCreateKey" em vez de "ZwCreateKey".

A rotina NtCreateKey no kernel do Windows não é diretamente acessível para drivers no modo kernel.

Para chamadas de drivers no modo kernel, as versões NtXxx e ZwXxx de uma rotina dos Serviços do Sistema Nativo do Windows podem se comportar de forma diferente na maneira como lidam e interpretam parâmetros de entrada. Para obter mais informações sobre a relação entre as versões NtXxx e ZwXxx de uma rotina, consulte Usando versões Nt e Zw das rotinas dos Serviços de Sistema Nativo.

Requisitos

Requisito Valor
Plataforma de Destino Universal
Cabeçalho wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Biblioteca NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
Regras de conformidade de DDI HwStorPortProhibitedDIs(storport), IrqlZwPassive(wdm), PowerIrpDDis(wdm), ZwRegistryCreate(storport), ZwRegistryCreate(storport), ZwRegistryCreate(wdm), ZwRegistryOpen(wdm)

Confira também

ACCESS_MASK

InitializeObjectAttributes

Usando versões Nt e Zw das rotinas dos Serviços de Sistema Nativo

ZwClose

ZwDeleteKey

ZwEnumerateKey

ZwEnumerateValueKey

ZwFlushKey

ZwNotifyChangeKey

ZwOpenKey

ZwQueryValueKey

ZwSetValueKey