IRegistryKey::QueryKey 方法(portcls.h)

QueryKey 方法检索有关注册表项的信息,包括密钥名称、密钥类以及子项的数量及其大小。

语法

NTSTATUS QueryKey(
  [in]  KEY_INFORMATION_CLASS KeyInformationClass,
  [out] PVOID                 KeyInformation,
  [in]  ULONG                 Length,
  [out] PULONG                ResultLength
);

参数

[in] KeyInformationClass

指定要在缓冲区中返回的信息的类型。 将此参数设置为以下KEY_INFORMATION_CLASS枚举值之一:

  • KeyBasicInformation
  • KeyFullInformation
  • KeyNodeInformation

[out] KeyInformation

指向调用方分配的缓冲区的指针,该方法将请求的数据写入其中。 缓冲区包含类型为 KEY_BASIC_INFORMATIONKEY_FULL_INFORMATIONKEY_NODE_INFORMATION,具体取决于 KeyInformationClass的值。 结构后跟 Unicode 字符的字符串,其大小取决于所请求的有关密钥的信息的类型以及密钥的名称或类字符串的长度。

[in] Length

KeyInformation 缓冲区的大小(调用方必须根据给定的 KeyInformationClass设置)。 若要接收所有请求的数据,缓冲区的大小必须至少与所请求的数据大小相同。

[out] ResultLength

生成的数据的长度的输出指针。 此参数指向调用方分配的 ULONG 变量,该方法在其中写入计数,指定实际写入 KeyInformation 缓冲区的字节数。 但是,如果指定的缓冲区长度太小,无法包含信息,则该方法会输出所需的缓冲区大小,并返回STATUS_BUFFER_OVERFLOW或STATUS_BUFFER_TOO_SMALL。 有关详细信息,请参阅以下“备注”部分。

返回值

如果调用成功将请求的信息复制到 KeyInformation 缓冲区,则 QueryKey 返回STATUS_SUCCESS。 如果指定的缓冲区大小太小,无法接收所有请求的信息,该方法将返回STATUS_BUFFER_OVERFLOW。 如果指定的缓冲区大小太小,无法接收任何请求的信息,该方法将返回STATUS_BUFFER_TOO_SMALL。 否则,该方法将返回适当的错误状态代码。 下表显示了一些可能的错误代码。

返回代码 描述
STATUS_INVALID_PARAMETER
指示传递给方法的参数之一无效。

言论

如果 KeyInformation 缓冲区太小而无法保存请求的信息,该方法会将所需的大小写入 *ResultLength,并返回STATUS_BUFFER_OVERFLOW或STATUS_BUFFER_TOO_SMALL的状态代码。 如果该方法仅成功将部分请求的信息写入缓冲区,则该方法将返回STATUS_BUFFER_OVERFLOW。 如果该方法无法将任何信息写入缓冲区,则返回STATUS_BUFFER_TOO_SMALL。 写入 *ResultLength 的值指示保存所有请求信息的最小缓冲区大小。

要求

要求 价值
目标平台 普遍
标头 portcls.h (包括 Portcls.h)
IRQL PASSIVE_LEVEL

另请参阅

IRegistryKey

KEY_BASIC_INFORMATION

KEY_FULL_INFORMATION

KEY_NODE_INFORMATION

ZwQueryKey