C++ RegQueryValueEx获取不正确的数据
我使用此代码将注册表数据从HKCU复制到HKLM。在1-9之间检索到正确的数字,但在10我得到a,11我得到b,等等。我不知道我做了什么不正确,我将感谢任何帮助C++ RegQueryValueEx获取不正确的数据,c++,C++,我使用此代码将注册表数据从HKCU复制到HKLM。在1-9之间检索到正确的数字,但在10我得到a,11我得到b,等等。我不知道我做了什么不正确,我将感谢任何帮助 extern "C" UINT __stdcall ReadTempRegKey(MSIHANDLE hInstall) { HRESULT hr = S_OK; UINT er = ERROR_SUCCESS; HKEY hKey; char szProductKey[MAX_PATH], lszValue[MAX_PATH]; TC
extern "C" UINT __stdcall ReadTempRegKey(MSIHANDLE hInstall)
{
HRESULT hr = S_OK;
UINT er = ERROR_SUCCESS;
HKEY hKey;
char szProductKey[MAX_PATH], lszValue[MAX_PATH];
TCHAR achKey[MAX_KEY_LENGTH], achClass[MAX_PATH] = TEXT(""), achValue[MAX_VALUE_NAME];
DWORD cbName, cchClassName = MAX_PATH, cSubKeys=0, cbMaxSubKey, cchMaxClass, cValues, cchMaxValue, cbMaxValueData, cbSecurityDescriptor;
FILETIME ftLastWriteTime;
PHKEY phkResult = NULL;
DWORD i, retCode, cchValue = MAX_VALUE_NAME,dwType=REG_SZ,dwSKeyValueSize,dwSize=255;
hr = WcaInitialize(hInstall, "ReadTempRegKey");
ExitOnFailure(hr, "Failed to initialize");
WcaLog(LOGMSG_STANDARD, "Initialized.");
Orc_Reg_Sub_LM_CU();
sprintf_s(szProductKey, "SOFTWARE\\%s",Orc_Get_Product_Name());
if( RegOpenKeyEx( HKEY_CURRENT_USER,
szProductKey,
0,
KEY_READ,
&hKey) == ERROR_SUCCESS
)
{
//Get the class name and the value count.
retCode = RegQueryInfoKey(
hKey, // key handle
achClass, // buffer for class name
&cchClassName, // size of class string
NULL, // reserved
&cSubKeys, // number of subkeys
&cbMaxSubKey, // longest subkey size
&cchMaxClass, // longest class string
&cValues, // number of values for this key
&cchMaxValue, // longest value name
&cbMaxValueData, // longest value data
&cbSecurityDescriptor, // security descriptor
&ftLastWriteTime); // last write time
// Enumerate the subkeys, until RegEnumKeyEx fails.
if (cSubKeys)
{
for (i=0; i<cSubKeys; i++)
{
cbName = MAX_KEY_LENGTH;
retCode = RegEnumKeyEx(hKey, i,
achKey,
&cbName,
NULL,
NULL,
NULL,
&ftLastWriteTime);
}
}
//Enumerate the key values.
if (cValues)
{
for (i=0, retCode=ERROR_SUCCESS; i<cValues; i++)
{
cchValue = MAX_VALUE_NAME;
achValue[0] = '\0';
retCode = RegEnumValue(hKey, i,
achValue,
&cchValue,
NULL,
NULL,
NULL,
NULL);
if (retCode == ERROR_SUCCESS )
{
DWORD dwSize = sizeof(lszValue);
retCode = RegQueryValueEx(hKey, achValue, NULL, &dwType,(LPBYTE)&lszValue, &dwSize);
extern“C”UINT\uu stdcall ReadTempRegKey(msichandle hInstall)
{
HRESULT hr=S_正常;
UINT er=错误\成功;
HKEY HKEY;
char szProductKey[MAX_PATH],lszValue[MAX_PATH];
TCHAR achKey[MAX_KEY_LENGTH],achClass[MAX_PATH]=文本(“”),achValue[MAX_VALUE_NAME];
DWORD cbName、cchClassName=MAX_PATH、CSubkey=0、cbMaxSubKey、cchMaxClass、cValues、cchMaxValue、CBMAXSvalueData、cbSecurityDescriptor;
FILETIME ftLastWriteTime;
PHKEY phkResult=NULL;
DWORD i,retCode,cchValue=MAX_VALUE_NAME,dwType=REG_SZ,dwSKeyValueSize,dwSize=255;
hr=wcainInitialize(hInstall,“ReadTempRegKey”);
ExitOnFailure(hr,“初始化失败”);
WcaLog(LOGMSG_标准,“初始化”);
Orc_Reg_Sub_LM_CU();
sprintf_s(szProductKey,“软件\\%s”,Orc_Get_Product_Name());
如果(RegOpenKeyEx)(HKEY_当前用户,
szProductKey,
0,
钥匙读到了,
&hKey)=错误\成功
)
{
//获取类名和值计数。
retCode=RegQueryInfoKey(
hKey,//键句柄
achClass,//类名称的缓冲区
&cchClassName,//类字符串的大小
NULL,//保留
&cSubKeys,//子键数
&cbMaxSubKey,//最长子键大小
&cchMaxClass,//最长的类字符串
&cValues,//此键的值数
&cchMaxValue,//最长值名称
&cbMaxValueData,//最长值数据
&cbSecurityDescriptor,//安全描述符
&ftLastWriteTime);//上次写入时间
//枚举子键,直到RegEnumKeyEx失败。
if(csubkey)
{
对于(i=0;i我将使用我的水晶球来尝试回答这个问题
复制执行得非常好,但是您将数据视为十六进制而不是十进制。十进制值10
是十六进制的a
,十进制11
是b
,依此类推。我将用水晶球尝试回答这个问题
复制执行得非常好,但您将数据视为十六进制而不是十进制。十进制值10
是a
的十六进制,十进制11
是b
等等。很棒,闭上眼睛:-)我对C++很新,很抱歉这个愚蠢的问题,我以为我在代码中做了一些错误。谢谢。这能回答你的问题吗?很棒,闭着眼睛:-我是C++新手,很抱歉这个愚蠢的问题,我以为我在代码中做了一些错误。谢谢。这能回答你的问题吗?