RegQueryMultipleValuesA 函数 (winreg.h)

检索与打开的注册表项关联的值名称列表的类型和数据。

语法

LSTATUS RegQueryMultipleValuesA(
  [in]                HKEY     hKey,
  [out]               PVALENTA val_list,
  [in]                DWORD    num_vals,
  [out, optional]     LPSTR    lpValueBuf,
  [in, out, optional] LPDWORD  ldwTotsize
);

参数

[in] hKey

打开的注册表项的句柄。 必须已使用KEY_QUERY_VALUE访问权限打开密钥。 有关详细信息,请参阅

注册表项安全和访问权限

此句柄由 RegCreateKeyExRegCreateKeyTransactedRegOpenKeyExRegOpenKeyTransacted 函数返回。 也可以是以下 预定义键之一:

HKEY_CLASSES_ROOT
HKEY_CURRENT_CONFIG
HKEY_CURRENT_USER
HKEY_LOCAL_MACHINE
HKEY_PERFORMANCE_DATA
HKEY_USERS

[out] val_list

指向 数组的指针

描述一个或多个值条目的 VALENT 结构。 输入时,每个结构的 ve_valuename 成员必须包含指向要检索的值名称的指针。 如果指定键中不存在任何指定值,则函数将失败。

如果函数成功,则数组的每个元素都包含指定值的信息。

[in] num_vals

val_list数组中的元素数。

[out, optional] lpValueBuf

指向缓冲区的指针。 如果函数成功,缓冲区将接收每个值的数据。

如果 lpValueBufNULL则 ldwTotsize 参数指向的值必须为零,在这种情况下,函数返回ERROR_MORE_DATA ldwTotsize 接收所需的缓冲区大小(以字节为单位)。

[in, out, optional] ldwTotsize

指向变量的指针,该变量指定 lpValueBuf 参数指向的缓冲区的大小(以字节为单位)。 如果函数成功, ldwTotsize 将接收复制到缓冲区的字节数。 如果函数因缓冲区太小而失败, ldwTotsize 将接收所需的大小(以字节为单位)。

返回值

如果函数成功,则返回值为 ERROR_SUCCESS。

如果函数失败,则返回值为以下错误代码之一。

返回代码 说明
ERROR_CANTREAD

RegQueryMultipleValues 无法实例化或访问动态密钥的提供程序。

ERROR_MORE_DATA
lpValueBuf 指向的缓冲区太小。 在这种情况下, ldwTotsize 接收所需的缓冲区大小。
ERROR_TRANSFER_TOO_LONG
请求的数据的总大小 (val_list 数组 + ldwTotSize) 的大小超过系统限制 1 兆字节。

注解

RegQueryMultipleValues 函数允许应用程序查询静态或动态键的一个或多个值。 如果目标键是静态键,则系统以原子方式提供所有值。 为防止过度序列化,函数返回的聚合数据不能超过 1 MB。

如果目标键是动态键,则其提供程序必须以原子方式提供所有值。 这意味着提供程序应同步填充结果缓冲区,提供缓冲区中所有值的一致视图,同时避免过度序列化。 在对此函数的原子调用期间,提供程序最多可以提供一兆字节的总输出数据。

远程支持 RegQueryMultipleValues ;也就是说,传递给函数的 hKey 参数可以引用远程计算机。

注意

winreg.h 标头将 RegQueryMultipleValues 定义为别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将非特定编码别名的使用与非非特定编码的代码混合使用可能会导致不匹配,从而导致编译或运行时错误。 有关详细信息,请参阅 函数原型的约定

要求

   
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 winreg.h (包括 Windows.h)
Library Advapi32.lib
DLL Advapi32.dll

另请参阅

注册表函数

注册表概述