SHRegGetValueW 函数 (shlwapi.h)

[SHRegGetValue 可能会在操作系统或产品的后续版本中更改或不可用。 在其位置使用 RegGetValue。]

检索注册表值。

语法

LSTATUS SHRegGetValueW(
  [in]      HKEY    hkey,
  [in]      LPCWSTR pszSubKey,
  [in]      LPCWSTR pszValue,
  [in]      SRRF    srrfFlags,
  [in, out] DWORD   *pdwType,
  [out]     void    *pvData,
  [in, out] DWORD   *pcbData
);

参数

[in] hkey

类型:HKEY

当前打开的键或任何以下预定义值的句柄。

HKEY_CLASSES_ROOT

HKEY_CURRENT_CONFIG

HKEY_CURRENT_USER

HKEY_LOCAL_MACHINE

HKEY_PERFORMANCE_DATA

HKEY_USERS

[in] pszSubKey

类型:LPCTSTR

指向 null-terminated 字符串的指针,该字符串指定要从 hkey 到子项的相对路径,以从中检索值。 此参数可以 NULL 或空字符串,在这种情况下,从 hkey 位置检索数据。

[in] pszValue

类型:LPCTSTR

指向包含值名称的 null终止字符串的指针。 此参数可以 NULL 或空字符串,在这种情况下,从默认值中检索数据。

[in] srrfFlags

类型:SRRF

一个或多个 SRRF 标志,用于限制要检索的数据。 必须指定至少一个类型限制 (SRRF_RT) 值。

[in, out] pdwType

类型:LPDWORD

指向 DWORD 的指针,用于接收存储在检索值中的数据的类型。 使用默认值时,输入 pdwType 是默认值的类型。 有关可能的值,请参阅 注册表数据类型。 如果未设置SRRF_NOEXPAND标志,REG_EXPAND_SZ类型会自动展开并作为REG_SZ返回。 如果不需要类型信息,则可以将此参数 NULL

[out] pvData

类型:LPVOID

指向接收值数据的缓冲区的指针。 如果不需要数据,则可以 NULL 此参数。 例如,如果只是为了测试某个值的存在,则特定值数据将是多余的。

[in, out] pcbData

类型:LPDWORD

指向 DWORD 的指针,该 条目包含目标数据缓冲区的大小(以字节为单位)pvData。 仅当 pvData为 NULL时,此值才能 NULL。 退出时, 指向其中一个值。

pvData 返回值 维基百老百万
NULL ERROR_SUCCESS 足以容纳注册表数据的大小(以字节为单位)。 请注意,这不能保证是精确的大小,但只有足够的大小。
NULL ERROR_SUCCESS 写入到 pvData的字节的确切数目。
NULL ERROR_MORE_DATA 保存整个数据所需的大小(以字节为单位)。 请注意,这不能保证是精确的大小,但只有足够的大小。

返回值

类型:LSTATUS

如果成功,则返回 ERROR_SUCCESS;否则返回在 Winerror.h 中定义的非零错误代码。 可以使用带有 FORMAT_MESSAGE_FROM_SYSTEM 标志的 FormatMessage 函数来检索错误的泛型说明。

言论

SHRegGetValue 提供数据类型检查、启动模式检查、REG_EXPAND_SZ数据的自动扩展,并保证 null-终止REG_SZ、REG_EXPAND_SZ和REG_MULTI_SZ数据。

hkey 标识的密钥必须已通过 KEY_QUERY_VALUE 安全访问打开。 如果 pszSubKeyNULL 或空字符串,则该键还必须能够在当前调用上下文中使用 KEY_QUERY_VALUE 安全访问打开。

如果数据类型REG_SZ、REG_EXPAND_SZ或REG_MULTI_SZ,则任何返回的数据都包括或考虑字符串的 null-termination。 例如,如果 pvDataNULL,则缓冲区中返回的数据 null-terminated。 如果 NULL,则它指向的缓冲区大小包括保留终止 null 字符所需的字节。

除非设置了SRRF_NOEXPAND标志,否则REG_EXPAND_SZ类型的字符串数据在返回之前会自动展开。 扩展字符串的类型在 pdwType 中报告为REG_SZ, 参数指向为扩展字符串写入的字节数,pvData 指向的缓冲区包含字符串的扩展版本。

性能说明

如果 pszSubKeyNULL 或空字符串,则每次访问此函数时,该键都会打开和关闭。 如果应用程序必须从同一子项中检索一系列值,则通过在调用 SHRegGetValue之前使用 RegOpenKeyEx 打开密钥,你将看到更好的性能。 使用在 RegOpenKeyExphkResult 参数中返回的键作为此函数中的 hkey 参数,pszSubKey 设置为 NULL

当数据类型REG_EXPAND_SZ且尚未设置SRRF_NOEXPAND标志时,可能会对注册表进行额外的调用来读取或重新读取数据。 以下条件导致该附加调用。

  • pvData NULLNULL。 虽然未检索数据,但必须读取注册表才能获取字符串,并且该字符串已展开,以确定数据缓冲区所需的大小。
  • pvData 不是 NULL,而是太小而无法保存数据。 重新读取数据以获取完整字符串、展开字符串以及确定所需的总大小。

注意

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

要求

要求 价值
最低支持的客户端 具有 SP2 的 Windows XP [仅限桌面应用]
支持的最低服务器 Windows Server 2003 [仅限桌面应用]
目标平台 窗户
标头 shlwapi.h
Shlwapi.lib
DLL Shlwapi.dll(版本 6.0 或更高版本)

另请参阅

RegQueryValueEx