Visual c++ VC++;:CRegKey.QueryBinaryValue()方法不适用于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, &

我正在用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, &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位可执行文件,它将准确地显示应用程序所看到的内容