Função ZwEnumerateKey (wdm.h)

A rotina ZwEnumerateKey retorna informações sobre uma subchave de uma chave do Registro aberta.

Sintaxe

NTSYSAPI NTSTATUS ZwEnumerateKey(
  [in]            HANDLE                KeyHandle,
  [in]            ULONG                 Index,
  [in]            KEY_INFORMATION_CLASS KeyInformationClass,
  [out, optional] PVOID                 KeyInformation,
  [in]            ULONG                 Length,
  [out]           PULONG                ResultLength
);

Parâmetros

[in] KeyHandle

Manipule para a chave do Registro que contém as subchaves a serem enumeradas. O identificador é criado por uma chamada bem-sucedida para ZwCreateKey ou ZwOpenKey.

[in] Index

O índice da subchave para a qual você deseja obter informações. Se a chave tiver n subchaves, as subchaves serão numeradas de 0 a n-1.

[in] KeyInformationClass

Especifica um valor de enumeração KEY_INFORMATION_CLASS que determina o tipo de informação a ser recebida pelo buffer KeyInformation . Defina KeyInformationClass como um dos seguintes valores:

  • KeyBasicInformation

  • KeyFullInformation

  • KeyNodeInformation

Se qualquer valor não estiver nessa lista for especificado, a rotina retornará o código de erro STATUS_INVALID_PARAMETER.

[out, optional] KeyInformation

Ponteiro para um buffer alocado pelo chamador que recebe as informações solicitadas. O parâmetro KeyInformationClass determina o tipo de informação fornecida.

[in] Length

Especifica o tamanho, em bytes, do buffer KeyInformation .

[out] ResultLength

Ponteiro para uma variável que recebe o tamanho, em bytes, das informações de chave do Registro. Se ZwEnumerateKey retornar STATUS_SUCCESS, você poderá usar o valor dessa variável para determinar a quantidade de dados retornados. Se a rotina retornar STATUS_BUFFER_OVERFLOW ou STATUS_BUFFER_TOO_SMALL, você poderá usar o valor dessa variável para determinar o tamanho do buffer necessário para manter as informações de chave.

Retornar valor

ZwEnumerateKey retorna STATUS_SUCCESS com êxito ou o código de erro NTSTATUS apropriado em caso de falha. Os possíveis valores de código de erro incluem:

Código de retorno Descrição
STATUS_BUFFER_OVERFLOW O buffer fornecido é muito pequeno e apenas os dados parciais foram gravados no buffer. *ResultLength é definido como o tamanho mínimo necessário para manter as informações solicitadas.
STATUS_BUFFER_TOO_SMALL O buffer fornecido é muito pequeno e nenhum dado foi gravado no buffer. *ResultLength é definido como o tamanho mínimo necessário para manter as informações solicitadas.
STATUS_INVALID_PARAMETER O parâmetro KeyInformationClass não é um valor KEY_INFORMATION_CLASS válido.
STATUS_NO_MORE_ENTRIES O valor index está fora do intervalo para a chave do Registro especificada por KeyHandle. Por exemplo, se uma chave tiver n subchaves, para qualquer valor maior que n-1, a rotina retornará STATUS_NO_MORE_ENTRIES.

Comentários

O identificador deve ter sido aberto com acesso KEY_ENUMERATE_SUB_KEYS. Isso é feito passando KEY_ENUMERATE_SUB_KEYS, KEY_READ ou KEY_ALL_ACCESS como o parâmetro DesiredAccess para ZwCreateKey ou ZwOpenKey.

O parâmetro Index é simplesmente uma maneira de selecionar entre subchaves da chave referenciada pelo KeyHandle. Não há garantia de que duas chamadas para ZwEnumerateKey com o mesmo Índice retornem o mesmo resultado.

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 "NtEnumerateKey" em vez de "ZwEnumerateKey".

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 HwStorPortProhibitedDDIs(storport), IrqlZwPassive(wdm), PowerIrpDDis(wdm), ZwRegistryCreate(storport), ZwRegistryCreate(storport), ZwRegistryCreate(wdm), ZwRegistryOpen(storport), ZwRegistryOpen(storport), ZwRegistryOpen(wdm)

Confira também

KEY_BASIC_INFORMATION

KEY_FULL_INFORMATION

KEY_INFORMATION_CLASS

KEY_NODE_INFORMATION

RtlCheckRegistryKey

RtlCreateRegistryKey

RtlDeleteRegistryValue

RtlQueryRegistryValues

RtlWriteRegistryValue

ZwCreateKey

ZwEnumerateValueKey

ZwOpenKey