RegOverridePredefKey 函数 (winreg.h)
将预定义的注册表项映射到指定的注册表项。
语法
LSTATUS RegOverridePredefKey(
[in] HKEY hKey,
[in, optional] HKEY hNewHKey
);
参数
[in] hKey
以下 预定义键之一的句柄:
- HKEY_CLASSES_ROOT
- HKEY_CURRENT_CONFIG
- HKEY_CURRENT_USER
- HKEY_LOCAL_MACHINE
- HKEY_PERFORMANCE_DATA
- HKEY_USERS
[in, optional] hNewHKey
打开的注册表项的句柄。 此句柄由 RegCreateKeyEx 或 RegOpenKeyEx 函数返回。 它不能是预定义键之一。 函数映射 hKey 以引用 hNewHKey 键。 这仅影响调用进程。
如果 hNewHKey 为 NULL,则该函数将还原预定义密钥的默认映射。
返回值
如果函数成功,则返回值为 ERROR_SUCCESS。
如果函数失败,则返回值为 Winerror.h 中定义的非零错误代码。 可以将 FormatMessage 函数与 FORMAT_MESSAGE_FROM_SYSTEM 标志一起使用,以获取错误的泛型说明。
注解
RegOverridePredefKey 函数适用于软件安装程序。 它允许他们重新映射预定义的密钥,加载将安装在系统上的 DLL 组件,调用 DLL 中的入口点,并检查组件尝试对注册表所做的更改。 然后,安装程序可以将这些更改写入 DLL 所需的位置,或在写入数据之前对数据进行更改。
例如,请考虑在应用程序安装过程中安装 ActiveX 控件的安装程序。 安装程序需要调用控件的 DllRegisterServer 入口点,使控件能够注册自身。 在此调用之前,安装程序可以调用 RegOverridePredefKey 以 将HKEY_CLASSES_ROOT 重新映射到临时密钥,例如 HKEY_CURRENT_USER\TemporaryInstall\DllRegistration。 然后,它会调用 DllRegisterServer,这会导致 ActiveX 控件将其注册表项写入临时键。 然后,安装程序再次调用 RegOverridePredefKey 以还原 HKEY_CLASSES_ROOT的原始映射。 如有必要,安装程序可以修改写入临时密钥的密钥,然后再将其复制到原始 HKEY_CLASSES_ROOT。
调用 RegOverridePredefKey 后,可以安全地调用 RegCloseKey 以关闭 hNewHKey 句柄。 系统保留自己对 hNewHKey 的引用。
要求
最低受支持的客户端 | Windows 2000 Professional [仅限桌面应用] |
最低受支持的服务器 | Windows 2000 Server [仅限桌面应用] |
目标平台 | Windows |
标头 | winreg.h (包括 Windows.h) |
Library | Advapi32.lib |
DLL | Advapi32.dll |