Функция 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_VIRTUALIZATION_INFORMATION