Поделиться через


Функция ZwQueryKey (wdm.h)

Подпрограмма ZwQueryKey предоставляет сведения о классе раздела реестра, а также о количестве и размерах его подразделов.

Синтаксис

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

Параметры

[in] KeyHandle

Выполните обработку раздела реестра для получения сведений. Этот дескриптор создается путем успешного вызова ZwCreateKey или ZwOpenKey.

[in] KeyInformationClass

Задает значение KEY_INFORMATION_CLASS , определяющее тип сведений, возвращаемых в буфере KeyInformation .

[out, optional] KeyInformation

Указатель на буфер, выделенный вызывающим объектом, который получает запрошенные сведения.

[in] Length

Задает размер (в байтах) буфера KeyInformation .

[out] ResultLength

Указатель на переменную, которая получает размер запрошенных сведений о ключе (в байтах). Если ZwQueryKey возвращает STATUS_SUCCESS, переменная содержит объем возвращаемых данных. Если ZwQueryKey возвращает STATUS_BUFFER_OVERFLOW или STATUS_BUFFER_TOO_SMALL, можно использовать значение переменной для определения требуемого размера буфера.

Возвращаемое значение

ZwQueryKey возвращает STATUS_SUCCESS при успешном выполнении или соответствующий код ошибки при сбое. Возможные значения кода ошибки:

Код возврата Описание
STATUS_BUFFER_OVERFLOW Предоставленный буфер слишком мал, и в него записаны только частичные данные. *Для параметра ResultLength задан минимальный размер, необходимый для хранения запрошенных сведений.
STATUS_BUFFER_TOO_SMALL Предоставленный буфер слишком мал, и никакие данные не были записаны в буфер. *Для параметра ResultLength задан минимальный размер, необходимый для хранения запрошенных сведений.
STATUS_INVALID_PARAMETER Параметр KeyInformationClass не является допустимым KEY_INFORMATION_CLASS значением.

Комментарии

Ключ KeyHandle, переданный в ZwQueryKey, должен быть открыт с KEY_QUERY_VALUE доступом. Это достигается путем передачи KEY_QUERY_VALUE, KEY_READ или KEY_ALL_ACCESS в качестве параметра DesiredAccessв ZwCreateKey или ZwOpenKey.

Если keyInformationClass имеет значение KeyNameInformation или KeyHandleTagsInformation, требование KEY_QUERY_VALUE не применяется.

ZwQueryKey можно использовать для получения сведений, которые можно использовать для выделения буферов для хранения данных реестра, таких как максимальный размер записей значений ключа или имен подразделов или количество подразделов. Например, можно вызвать ZwQueryKey, использовать возвращенные сведения для выделения буфера для подраздела, вызвать ZwEnumerateKey, чтобы получить имя подраздела, и передать это имя подпрограмме реестра RtlXxx.

Дополнительные сведения о работе с разделами реестра см. в статье Использование реестра в драйвере.

Если вызов этой функции выполняется в пользовательском режиме, следует использовать имя NtQueryKey вместо ZwQueryKey.

Для вызовов из драйверов режима ядра версии NtXxx и ZwXxx подпрограммы Собственные системные службы Windows могут вести себя по-разному, так как они обрабатывают и интерпретируют входные параметры. Дополнительные сведения о связи между версиями подпрограмм NtXxx и ZwXxx см. в разделе Использование версий NT и Zw подпрограмм собственных системных служб.

Требования

Требование Значение
Целевая платформа Универсальное
Верхняя часть wdm.h (включая Wdm.h, Ntddk.h, Ntifs.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
Правила соответствия DDI HwStorPortProhibitedDIs(storport), IrqlZwPassive(wdm), PowerIrpDDis(wdm), ZwRegistryCreate(storport), ZwRegistryCreate(storport), ZwRegistryCreate(wdm), ZwRegistryOpen(storport), ZwRegistryOpen(storport), ZwRegistryOpen(wdm)

См. также раздел

KEY_BASIC_INFORMATION

KEY_CACHED_INFORMATION

KEY_FULL_INFORMATION

KEY_INFORMATION_CLASS

KEY_NAME_INFORMATION

KEY_NODE_INFORMATION

KEY_VIRTUALIZATION_INFORMATION

Использование версий nt и Zw собственных системных служб

ZwClose

ZwEnumerateKey

ZwOpenKey