RegOpenKeyExA 函数 (winreg.h)

打开指定的注册表项。 请注意,键名称不区分大小写。

若要对键执行事务处理注册表操作,请调用 RegOpenKeyTransacted 函数。

语法

LSTATUS RegOpenKeyExA(
  [in]           HKEY   hKey,
  [in, optional] LPCSTR lpSubKey,
  [in]           DWORD  ulOptions,
  [in]           REGSAM samDesired,
  [out]          PHKEY  phkResult
);

参数

[in] hKey

打开的注册表项的句柄。 此句柄由 RegCreateKeyExRegOpenKeyEx 函数返回,也可以是以下 预定义键之一

HKEY_CLASSES_ROOTHKEY_CURRENT_CONFIGHKEY_CURRENT_USERHKEY_LOCAL_MACHINEHKEY_USERS

[in, optional] lpSubKey

要打开的注册表子项的名称。

键名称不区分大小写。

如果 lpSubKey 参数 NULL 或指向空字符串的指针,并且如果 hKey 是预定义键,则系统会刷新预定义键,并且 phkResult 接收传递给函数的相同 hKey 句柄。 否则,phkResult 接收打开的密钥的新句柄。

有关详细信息,请参阅 注册表元素大小限制

[in] ulOptions

指定打开键时要应用的选项。 将此参数设置为零或以下内容:

价值 意义
REG_OPTION_OPEN_LINK
密钥是符号链接。 仅当绝对必要时,才应使用注册表符号链接。

[in] samDesired

一个掩码,指定要打开的密钥的所需访问权限。 如果密钥的安全描述符不允许调用进程的请求访问,该函数将失败。 有关详细信息,请参阅 注册表项安全和访问权限

[out] phkResult

指向接收已打开键句柄的变量的指针。 如果密钥不是预定义的注册表项之一,请使用句柄后调用 RegCloseKey 函数。

返回值

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

如果函数失败,则返回值为 Winerror.h 中定义的非零错误代码。 可以将 FormatMessage 函数与FORMAT_MESSAGE_FROM_SYSTEM标志一起使用,以获取错误的泛型说明。

注意

在旧版 Windows 上,此 API 也由 kernel32.dll公开。

言论

RegCreateKeyEx 函数不同,如果注册表中不存在该键,则 RegOpenKeyEx 函数不会创建指定的键。

某些注册表操作针对密钥的安全描述符执行访问检查,而不是获取密钥句柄时指定的访问掩码。 例如,即使使用 samDesired 打开密钥KEY_READ,它也可以在密钥的安全描述符允许的情况下创建注册表项。 相比之下,RegSetValueEx 函数专门要求使用KEY_SET_VALUE访问权限打开密钥。

如果服务或应用程序模拟不同的用户,请不要将此函数用于 HKEY_CURRENT_USER。 而是调用 RegOpenCurrentUser 函数。

请注意,将重定向访问某些注册表项的操作。 有关详细信息,请参阅注册表中的 注册表虚拟化32 位和 64 位应用程序数据。

例子

lResult = RegOpenKeyEx (hKeyRoot, lpSubKey, 0, KEY_READ, &hKey);

if (lResult != ERROR_SUCCESS) 
{
    if (lResult == ERROR_FILE_NOT_FOUND) {
        printf("Key not found.\n");
        return TRUE;
    } 
    else {
        printf("Error opening key.\n");
        return FALSE;
    }
}

若要查看此示例在上下文中,请参阅 删除包含子项的键

注意

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

要求

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

另请参阅

RegCloseKey

RegCreateKeyEx

RegDeleteKey

RegOpenKeyTransacted

注册表函数

注册表概述