ZwEnumerateKey 函数 (wdm.h)

ZwEnumerateKey 例程返回有关打开的注册表项的子项的信息。

语法

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

参数

[in] KeyHandle

包含要枚举的子项的注册表项的句柄。 句柄是通过成功调用 ZwCreateKeyZwOpenKey 创建的。

[in] Index

要为其提供信息的子项的索引。 如果键具有 n 个子项,则子项的编号从 0 到 n-1

[in] KeyInformationClass

指定 一个KEY_INFORMATION_CLASS 枚举值,该值确定 要由 KeyInformation 缓冲区接收的信息的类型。 将 KeyInformationClass 设置为以下值之一:

  • KeyBasicInformation

  • KeyFullInformation

  • KeyNodeInformation

如果指定了未在此列表中的任何值,则例程STATUS_INVALID_PARAMETER返回错误代码。

[out, optional] KeyInformation

指向调用方分配的缓冲区的指针,该缓冲区接收请求的信息。 KeyInformationClass 参数确定提供的信息类型。

[in] Length

指定 KeyInformation 缓冲区的大小(以字节为单位)。

[out] ResultLength

指向一个变量的指针,该变量接收注册表项信息的大小(以字节为单位)。 如果 ZwEnumerateKey 返回STATUS_SUCCESS,则可以使用此变量的值来确定返回的数据量。 如果例程返回STATUS_BUFFER_OVERFLOW或STATUS_BUFFER_TOO_SMALL,则可以使用此变量的值来确定保存密钥信息所需的缓冲区大小。

返回值

ZwEnumerateKey 在成功时返回STATUS_SUCCESS,或在失败时返回相应的 NTSTATUS 错误代码。 可能的错误代码值包括:

返回代码 说明
STATUS_BUFFER_OVERFLOW 提供的缓冲区太小,只将部分数据写入缓冲区。 *ResultLength 设置为保存所请求信息所需的最小大小。
STATUS_BUFFER_TOO_SMALL 提供的缓冲区太小,并且没有数据写入缓冲区。 *ResultLength 设置为保存所请求信息所需的最小大小。
STATUS_INVALID_PARAMETER KeyInformationClass 参数不是有效的KEY_INFORMATION_CLASS值。
STATUS_NO_MORE_ENTRIES Index 值在 KeyHandle 指定的注册表项的范围内。 例如,如果某个键具有 n 个子项,则对于任何大于 n-1 的值,例程将返回STATUS_NO_MORE_ENTRIES。

注解

必须已使用KEY_ENUMERATE_SUB_KEYS访问权限打开句柄。 这是通过将 KEY_ENUMERATE_SUB_KEYS、KEY_READ 或 KEY_ALL_ACCESS 作为 DesiredAccess 参数传递给 ZwCreateKeyZwOpenKey 来实现的。

Index 参数只是一种在 KeyHandle 引用的键的子项之间进行选择的方法。 对具有相同索引ZwEnumerateKey 的两次调用不能保证返回相同的结果。

有关使用注册表项的详细信息,请参阅 在驱动程序中使用注册表

如果在用户模式下调用此函数,则应使用名称“NtEnumerateKey”而不是“ZwEnumerateKey”。

对于来自内核模式驱动程序的调用,Windows 本机系统服务例程的 NtXxxZwXxx 版本在处理和解释输入参数的方式上的行为可能有所不同。 有关例程的 NtXxxZwXxx 版本之间的关系的详细信息,请参阅 使用本机系统服务例程的 Nt 和 Zw 版本

要求

要求
目标平台 通用
标头 wdm.h(包括 Wdm.h、Ntddk.h、Ntifs.h)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
DDI 符合性规则 HwStorPortProhibitedDDI (storport) IrqlZwPassive (wdm) PowerIrpDDis (wdm) ZwRegistryCreate (storport) 、ZwRegistryCreate (storport) , ZwRegistryCreate (wdm) ZwRegistryOpen (storport) 、ZwRegistryOpen (storport) 、 ZwRegistryOpen (wdm)

另请参阅

KEY_BASIC_INFORMATION

KEY_FULL_INFORMATION

KEY_INFORMATION_CLASS

KEY_NODE_INFORMATION

RtlCheckRegistryKey

RtlCreateRegistryKey

RtlDeleteRegistryValue

RtlQueryRegistryValues

RtlWriteRegistryValue

ZwCreateKey

ZwEnumerateValueKey

ZwOpenKey