gpt4 book ai didi

c++ - RegOpenKeyEx 仅在 Windows XP 上失败

转载 作者:太空宇宙 更新时间:2023-11-04 14:12:28 26 4
gpt4 key购买 nike

我有一段代码可以查找注册表项。在下面的当前形式中,它在 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,并且打开了我正在搜索的 key ,那么它不会失败。此外,我要么因错误 2 或 87 而失败。

我已经阅读了大量关于此的其他主题,但没有明确的答案。我有点急于完成这项工作,所以任何人都可以给我的任何指示都会受到极大的欢迎。

最佳答案

我发现变量已经转义了反斜杠。这些字符串是从文本文件中读入的。我将双反斜杠替换为单个反斜杠并且它有效。即便如此,谁能向我解释为什么这是因为我想更好地理解。我很想了解 Vista 和 7 是如何工作的,而 XP 却没有。

关于c++ - RegOpenKeyEx 仅在 Windows XP 上失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13530968/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com