我有一段代码可以查找注册表项。在目前的形式下,它在Vista和7上运行正常,但它在XP上返回错误代码2或87。
当前代码(工作大于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.
我已阅读其他线程的负载,但没有确定的答案。我有点急于完成任务,所以任何人都能给我的任何指针都会受到极大的欢迎。
答案 0 :(得分:0)
我发现变量已经转义为反斜杠。这些字符串是从文本文件中读取的。我替换了单反的双反斜杠,它的工作原理。即便如此,任何人都可以向我解释为什么这是因为我想更好地理解。我非常想了解Vista和7是如何工作的,而XP则不然。