Visual c++ VC++;:CRegKey.QueryBinaryValue()方法不适用于Windows 7
我正在用VC++开发一个工具,用于获取Windows 7的系统信息:Visual c++ VC++;:CRegKey.QueryBinaryValue()方法不适用于Windows 7,visual-c++,registry,Visual C++,Registry,我正在用VC++开发一个工具,用于获取Windows 7的系统信息: 以下是示例代码段: CRegKey key; if(ERROR_SUCCESS == key.Open(hKey, pPath, KEY_READ)) { // read the value, length will contain the size after the call if (ERROR_SUCCESS != key.QueryBinaryValue(pValueName, pData, &
以下是示例代码段:
CRegKey key;
if(ERROR_SUCCESS == key.Open(hKey, pPath, KEY_READ))
{
// read the value, length will contain the size after the call
if (ERROR_SUCCESS != key.QueryBinaryValue(pValueName, pData, &length))
{
// error occurred
length = 0;
}
key.Close();
}
else
{
length = 0;
}
返回的长度为0
QueryBinaryValue()
方法尝试从注册表读取REG\u BINARY
项,该方法在Windows 7下工作不正常,错误代码为2(找不到项)。同样的代码适用于XP、Vista。您是否已通过其他路径(例如RegEdit)检查Windows 7注册表中的键和值是否存在
可能会显示出潜在的问题。具体来说,就是失败的地方
在不知道您试图访问的项/值的情况下,很难更具体地说明。您是否已通过其他路径(例如RegEdit)检查了Windows 7注册表中的项和值
可能会显示出潜在的问题。具体来说,就是失败的地方
在不知道您试图访问的键/值的情况下,很难更加具体。有两件事需要研究:
是否可能是权限不足导致您无法在7上打开密钥?IIRC、Process Monitor(由Richard建议)将向您显示失败的原因,包括访问是否被拒绝
64位版本的Windows包含用于32位可执行文件的子系统。这些可执行文件可以看到系统文件夹的不同视图(SysWOW64,而不是System32)和注册表的不同视图。如果7为64位,而您的应用程序为32位,则您和您的应用程序可能没有查看相同的注册表配置单元-当您运行regedit时,您正在查看主64位注册表。然而,一个32位的可执行文件将关注WOW蜂巢。如果是这种情况,可以使用SysWOW64下的regedit。作为一个32位可执行文件,它将准确地显示应用程序所看到的内容
有两件事需要研究:
是否可能是权限不足导致您无法在7上打开密钥?IIRC、Process Monitor(由Richard建议)将向您显示失败的原因,包括访问是否被拒绝
64位版本的Windows包含用于32位可执行文件的子系统。这些可执行文件可以看到系统文件夹的不同视图(SysWOW64,而不是System32)和注册表的不同视图。如果7为64位,而您的应用程序为32位,则您和您的应用程序可能没有查看相同的注册表配置单元-当您运行regedit时,您正在查看主64位注册表。然而,一个32位的可执行文件将关注WOW蜂巢。如果是这种情况,可以使用SysWOW64下的regedit。作为一个32位可执行文件,它将准确地显示应用程序所看到的内容