RegOpenKeyTransactedA 函数 (winreg.h)
打开指定的注册表项并将其与事务相关联。 请注意,键名称不区分大小写。
语法
LSTATUS RegOpenKeyTransactedA(
[in] HKEY hKey,
[in, optional] LPCSTR lpSubKey,
[in] DWORD ulOptions,
[in] REGSAM samDesired,
[out] PHKEY phkResult,
[in] HANDLE hTransaction,
PVOID pExtendedParemeter
);
参数
[in] hKey
打开的注册表项的句柄。 此句柄由 RegCreateKeyEx、 RegCreateKeyTransacted、 RegOpenKeyEx 或 RegOpenKeyTransacted 函数返回。 也可以是以下 预定义键之一:
HKEY_CLASSES_ROOTHKEY_CURRENT_USERHKEY_LOCAL_MACHINEHKEY_USERS
[in, optional] lpSubKey
要打开的注册表子项的名称。
键名称不区分大小写。
如果 lpSubKey 参数为 NULL 或指向空字符串的指针,并且 hKey 是预定义键,则系统会刷新预定义的键,并且 phkResult 接收传递到函数中的同一 hKey 句柄。 否则, phkResult 将接收打开的密钥的新句柄。
有关详细信息,请参阅 注册表元素大小限制。
[in] ulOptions
此参数是保留的,必须为零。
[in] samDesired
一个掩码,指定对密钥的所需访问权限。 如果密钥的安全描述符不允许对调用进程进行请求的访问,则函数将失败。 有关详细信息,请参阅 注册表项安全和访问权限。
[out] phkResult
一个变量的指针,此变量指向已打开键的句柄。 如果该键不是预定义的注册表项之一,请在使用完句柄后调用 RegCloseKey 函数。
[in] hTransaction
活动事务的句柄。 此句柄由 CreateTransaction 函数返回。
pExtendedParemeter
此参数是保留的,必须为 NULL。
返回值
如果函数成功,则返回值为 ERROR_SUCCESS。
如果函数失败,则返回值为 Winerror.h 中定义的非零错误代码。 可以将 FormatMessage 函数与 FORMAT_MESSAGE_FROM_SYSTEM 标志一起使用,以获取错误的泛型说明。
注解
使用此函数打开密钥时,将处理对密钥的后续操作。 如果在提交事务之前对密钥执行了非事务处理操作,则会回滚该事务。 提交或回滚事务后,必须使用 RegCreateKeyTransacted 或 RegOpenKeyTransacted 函数与活动事务句柄重新打开密钥,以使其他操作交易。 有关事务的详细信息,请参阅 内核事务管理器。
请注意,此密钥的子项的后续操作不会自动交易。 因此, RegDeleteKeyEx 函数不执行事务删除操作。 请改用 RegDeleteKeyTransacted 函数来执行事务删除操作。
与 RegCreateKeyTransacted 函数不同,如果注册表中不存在指定键, RegOpenKeyTransacted 函数不会创建指定的键。
如果服务或应用程序模拟不同的用户,请不要将此函数与 HKEY_CURRENT_USER一起使用。 请改为调用 RegOpenCurrentUser 函数。
如果在 phkResult 中返回的密钥是预定义的注册表项,则它不包括在提供的事务中。
单个注册表项只能打开 65,534 次。 尝试执行第 65,535次 打开操作时,此函数失败并ERROR_NO_SYSTEM_RESOURCES。
注意
winreg.h 标头将 RegOpenKeyTransacted 定义为别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将非特定编码别名的使用与非非特定编码的代码混合使用可能会导致不匹配,从而导致编译或运行时错误。 有关详细信息,请参阅 函数原型的约定。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows Vista [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2008 [仅限桌面应用] |
目标平台 | Windows |
标头 | winreg.h (包括 Windows.h) |
Library | Advapi32.lib |
DLL | Advapi32.dll |