【问题标题】:RegOpenKeyExW with HKEY_LOCAL_MACHINE returns 2 on Windows Embedded 7 64 bit带有 HKEY_LOCAL_MACHINE 的 RegOpenKeyExW 在 Windows Embedded 7 64 位上返回 2
【发布时间】:2015-10-30 09:05:15
【问题描述】:

我需要从我的应用程序中读取 HKEY_LOCAL_MACHINE\SOFTWARE 中的键值。我使用以下 sn-p 来执行此操作,但它总是返回 2。

std::wstring strTmp;
strTmp = L"SOFTWARE\\TEMP";
RegOpenKeyExW(HKEY_LOCAL_MACHINE, strTmp.c_str(), 0, KEY_READ, &hKey))

但是当我使用HKEY_CURRENT_USER 时,我能够成功地从HKEY_CURRENT_USER\SOFTWARE 读取信息。我了解由于访问权限,我的应用程序无法从 HKEY_LOCAL_MACHINE 读取。我确实以管理员权限(使用运行方式)运行了我的应用程序,但这并没有帮助我。

有人可以说明如何使用RegOpenKeyExW 访问HKEY_LOCAL_MACHINE

我确实浏览了链接12,但这并没有帮助我,

【问题讨论】:

  • Windows 错误代码 2 是 ERROR_FILE_NOT_FOUND。您确定您的注册表项存在吗?
  • 您的代码似乎也缺少一个打开标志。使用 KEY_WOW64_64KEY 访问 64 位视图或使用 KEY_WOW64_32KEY 访问 32 位视图(即 Wow6432Node 下的键)。
  • @ Mohamad Elghawi 是的,注册表项存在。但它仍然返回 2。我还使用 Procmon 监视了注册表路径,它在进行此调用时显示正确的路径,但 windows 说找不到文件。另外,正如您所建议的,我曾尝试将标志 KEY_WOW64_64KEY 与 KEY_READ 结合使用,但没有运气。
  • 密钥的完整路径是什么。是 HKEY_LOCAL_MACHINE\SOFTWARE\TEMP 还是 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Temp?

标签: c++ registry windows-7-x64 windows-7-embedded


【解决方案1】:

对于我的误解,我深表歉意。实际上,我必须在RegOpenKeyExW(HKEY_LOCAL_MACHINE, strTmp.c_str(), 0, KEY_READ | KEY_WOW64_32KEY, &hKey)) 中使用KEY_WOW64_32KEY 标志而不是KEY_WOW64_64KEY 才能使我的应用程序正常工作。感谢 Mohamad Elghawi。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-07
    • 1970-01-01
    • 1970-01-01
    • 2011-11-25
    • 2023-03-30
    • 1970-01-01
    相关资源
    最近更新 更多