RegLoadAppKeyA 函数 (winreg.h)
将指定的注册表配置单元作为应用程序配置单元加载。
语法
LSTATUS RegLoadAppKeyA(
[in] LPCSTR lpFile,
[out] PHKEY phkResult,
[in] REGSAM samDesired,
[in] DWORD dwOptions,
DWORD Reserved
);
参数
[in] lpFile
Hive 文件的名称。 此配置单元必须是使用 RegSaveKey 或 RegSaveKeyEx 函数创建的。 如果该文件不存在,则会使用指定的名称创建一个空 Hive 文件。
[out] phkResult
指向已加载配置单元的根键的句柄的指针。
访问配置单元中的密钥的唯一方法是通过此句柄。 注册表将阻止应用程序使用密钥的绝对路径访问此配置单元中的项。 因此,无法通过注册表的命名空间导航到此配置单元。
[in] samDesired
一个掩码,指定为返回的根密钥请求的访问权限。 有关详细信息,请参阅 注册表项安全和访问权限。
[in] dwOptions
如果此参数REG_PROCESS_APPKEY,则调用方加载配置单元时无法再次加载该配置单元。 这会阻止其他调用方访问此注册表配置单元。
Reserved
此参数为保留参数。
返回值
如果函数成功,则返回值为 ERROR_SUCCESS。
如果函数失败,则返回值为 Winerror.h 中定义的非零错误代码。 可以将 FormatMessage 函数与 FORMAT_MESSAGE_FROM_SYSTEM 标志结合使用来获取错误的常规说明。
注解
与 RegLoadKey 不同, RegLoadAppKey 不会在 HKEY_LOCAL_MACHINE 或 HKEY_USERS 下加载配置单元。 相反,配置单元将加载到无法枚举的特殊根下。 因此,无法枚举 RegLoadAppKey 当前加载的配置单元。 必须相对于 phkResult 中返回的句柄,对 RegLoadAppKey 加载的配置单元执行所有操作。
如果需要两个进程才能在同一配置单元上执行操作,则每个进程都必须调用 RegLoadAppKey 来检索句柄。 在 RegLoadAppKey 操作期间,注册表将验证文件是否已加载。 如果已加载,注册表将返回以前加载的配置单元的句柄,而不是重新加载配置单元。
配置单元中的所有密钥必须具有相同的安全描述符,否则函数将失败。 此安全描述符必须向调用方授予 samDesired 参数指定的访问权限,否则函数将失败。 不能对配置单元中的任何键使用 RegSetKeySecurity 函数。
在 Windows 8 及更高版本中,每个进程都可以调用 RegLoadAppKey 来加载多个配置单元。 在 Windows 7 及更早版本中,每个进程一次只能使用 RegLoadAppKey 加载一个配置单元。
使用 RegCloseKey 关闭配置单元内键的所有句柄时,将自动卸载使用 RegLoadAppKey 加载的任何配置单元。
若要编译使用此函数的应用程序,请将_WIN32_WINNT定义为 0x0600 或更高版本。 有关详细信息,请参阅 使用 Windows 标头。
注意
winreg.h 标头将 RegLoadAppKey 定义为别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将非特定编码别名与非非特定编码的代码混合使用可能会导致不匹配,从而导致编译或运行时错误。 有关详细信息,请参阅 函数原型的约定。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows Vista [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2008 [仅限桌面应用] |
目标平台 | Windows |
标头 | winreg.h (包括 Windows.h) |
Library | Advapi32.lib |
DLL | Advapi32.dll |