我有一个别人编码的程序。它有一个函数 RegGetValue 用作:
uFuncReturnValue = RegOpenKeyExA( HKEY_LOCAL_MACHINE,
acSubKey,
NULL,
KEY_READ | KEY_WRITE,
&hRegistry
);
//Store signature of the disk in the first 32 bytes of structVal
if( uFuncReturnValue != ERROR_SUCCESS )
{
printf("Unable to open registry with error %u\n", uFuncReturnValue);
exit(EXIT_FAILURE);;
}
uFuncReturnValue = RegGetValueA( hRegistry,
NULL,
"\\DosDevices\\C:",
RRF_RT_REG_BINARY,
NULL,
(LPVOID)&structVal,
&dwSize
);
此代码块在 Windows 7 上完美运行,但在 Windows XP(32 位)上运行时返回错误。由于 32 位 xp 没有 RegGetValue 函数,因此我尝试使用 RegQueryValueEX 但在向该函数传递参数时遇到问题。我认为应该使用类似的东西:
uFuncReturnValue = RegQueryValueExA ( hRegistry,
"\\DosDevices\\J:",
NULL,
NULL,
(LPBYTE) &structVal,
&dwSize
);
但是这里出了点问题,因为代码编译成功,但是当我执行它时,我收到一条消息:
程序'(128) myProgram.exe: Native' 已退出,代码为 1 (0x1)。
有人可以帮我吗?
与 RegQueryValueEx 等较低级别的 API 相比,RegGetValue Win32 API 提供了相对较高级别的接口,用于从 Windows 注册表读取值。 RegGetValue 还提供了一个更安全的接口,例如,保证返回的字符串正确地以 NUL 结尾。尽管如此,RegGetValue 仍然是一个 C 接口低级 API,需要程序员注意许多细节,并且针对它进行编程可能会导致容易出现错误的复杂代码。本文展示了如何构建方便、易于使用且不易误用的现代 C++ 接口来隐藏 RegGetValue API 的复杂性,同时简化对 Windows 注册表的访问。此外,RegEnumValue API 被封装在一个方便的高级 C++ 函数中,用于枚举给定注册表项下的所有值。