IRegistryKey::QueryValueKey 方法 (portcls.h)

方法 QueryValueKey 检索有关注册表项的值条目的信息,包括其名称、类型、数据大小和值。

语法

NTSTATUS QueryValueKey(
  [in]  PUNICODE_STRING             ValueName,
  [in]  KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass,
  [out] PVOID                       KeyValueInformation,
  [in]  ULONG                       Length,
  [out] PULONG                      ResultLength
);

参数

[in] ValueName

指向制造商提供的值项名称的指针。 名称字符串由 UNICODE_STRING 类型的结构指定。

[in] KeyValueInformationClass

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

  • KeyValueBasicInformation
  • KeyValueFullInformation
  • KeyValuePartialInformation

[out] KeyValueInformation

指向调用方分配的缓冲区的指针,方法在其中写入请求的数据。 缓冲区包含 KEY_VALUE_BASIC_INFORMATIONKEY_VALUE_FULL_INFORMATIONKEY_VALUE_PARTIAL_INFORMATION 类型的结构,具体取决于 KeyValueInformationClass 的值。 结构后跟其他数据,其大小取决于键值的数据类型。

[in] Length

KeyValueInformation 缓冲区的大小(以字节为单位),调用方必须根据给定的 KeyValueInformationClass 设置该大小。 若要接收所有请求的数据,缓冲区的大小必须至少与请求的数据大小一样大。

[out] ResultLength

结果数据的长度的输出指针。 此参数指向调用方分配的 ULONG 变量,该方法在该变量中写入计数,指定实际写入 KeyValueInformation 缓冲区的字节数。 但是,如果指定的缓冲区长度太小而无法包含信息,则 该方法将改为输出所需的缓冲区大小,并返回STATUS_BUFFER_OVERFLOW或STATUS_BUFFER_TOO_SMALL。 有关更多信息,请参见下面的“备注”部分。

返回值

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

返回代码 说明
STATUS_INVALID_PARAMETER
指示传递给方法的参数之一无效。
STATUS_OBJECT_NAME_NOT_FOUND
指示未找到具有指定名称的值条目。

注解

如果 KeyValueInformation 缓冲区太小而无法保存请求的信息,该方法会将所需大小写入 *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_VALUE_BASIC_INFORMATION

KEY_VALUE_FULL_INFORMATION

KEY_VALUE_PARTIAL_INFORMATION

UNICODE_STRING

ZwQueryValueKey