RegOpenKeyEx仅在Windows XP上失败
问题描述:
我有一段代码查找注册表项。在目前的形式下,它在Vista和7上运行良好,但是它在XP上返回错误代码2或87。RegOpenKeyEx仅在Windows XP上失败
当前代码(在更大的工作比XP):
dwRet = RegOpenKeyEx(hKeyUsed, strRegCheck, 0, KEY_READ, &hKey) ;
if (dwRet == ERROR_SUCCESS)
{
dwRet = RegQueryValueEx(hKey, strRegValue, NULL, NULL, (LPBYTE) PerfData, &cbData);
while (dwRet == ERROR_MORE_DATA)
{
// Get a buffer that is big enough.
BufferSize += BYTEINCREMENT;
PerfData = (PPERF_DATA_BLOCK) realloc(PerfData, BufferSize);
cbData = BufferSize;
dwRet = RegQueryValueEx(hKey, NULL, NULL, NULL, (LPBYTE) PerfData, &cbData);
}
if (dwRet == ERROR_SUCCESS)
{
strSourcePath = PerfData->Signature;
return true;
}
}
这是这似乎是这个问题的第一线,并且这是造成它的第二个参数。下面是它的MSDN文档:http://msdn.microsoft.com/en-gb/library/windows/desktop/ms724897(v=vs.85).aspx
strRegCheck是类型的CString的。如果在Windows XP上,我改变这个为
const LPCWSTR sKey = _T("CLSID\\{2933BF90-7B36-11D2-B20E-00C04F983E60}\\VersionList");
并明显改变'sKey'的第二个参数,然后我们再次工作。
如果我设置SKEY是:
const LPCTSTR sKey = strRegCheck.GetBuffer(strRegCheck.GetLength());
然后我回失败的土地。有趣的是,如果我在同一时间打开RegEdit,并且拥有搜索打开的密钥,那么它不会失败。此外,我要么错误2或这种其它线程的87
我已经阅读负载,但没有明确的答案失败。我有点急于完成这个任务,所以任何人都可以给我的指针会很受欢迎。
答
我发现变量已经逃过了反斜杠。这些字符串是从文本文件读入的。我替换了单个的双反斜杠,它的工作原理。即使如此,有谁能向我解释为什么这是因为我想更好地理解。我很想知道Vista和7的工作方式,但XP不支持。
失败:) –
当您在Windows 7和Windows XP的测试,你的测试相同的二进制的土地?或者,您是在Windows 7上编译并在Windows XP上进行测试和编译并进行测试? – hmjd
系统错误代码'2'是'ERROR_FILE_NOT_FOUND'。可能是您的XP系统中不存在此注册表项? – Lol4t0