在x86和x64体系结构中获取Windows序列号(MachineGuid)

门德斯

我目前正在使用以下C ++代码MachineGuid从Windows注册表中获取代码,并将该信息用于我的许可算法:

std::wstring key = L"SOFTWARE\\Microsoft\\Cryptography";
std::wstring name = L"MachineGuid";

HKEY hKey;

if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, key.c_str(), 0, KEY_READ, &hKey) != ERROR_SUCCESS)
    throw std::runtime_error("Could not open registry key");

DWORD type;
DWORD cbData;

if (RegQueryValueEx(hKey, name.c_str(), NULL, &type, NULL, &cbData) != ERROR_SUCCESS)
{
    RegCloseKey(hKey);
    throw std::runtime_error("Could not read registry value");
}

if (type != REG_SZ)
{
    RegCloseKey(hKey);
    throw "Incorrect registry value type";
}

std::wstring value(cbData/sizeof(wchar_t), L'\0');
if (RegQueryValueEx(hKey, name.c_str(), NULL, NULL, reinterpret_cast<LPBYTE>(&value[0]), &cbData) != ERROR_SUCCESS)
{
    RegCloseKey(hKey);
    throw "Could not read registry value";
}

RegCloseKey(hKey);

这在x86系统(32位)上运行良好。现在,我已将整个代码迁移到x64(64位)Windows,并且该RegQueryValueEx调用返回错误。

在其他一些帖子中,此链接非常清楚地说明了为什么它在64位计算机上不起作用,并使用的ManagementObject为32位和64位提供了替代方法System.Management.dll问题在于此解决方案适用于C#,而不适用于C ++。我找不到与ManagementObject该类等效的C ++

因此,该问题的正确解决方案是什么:MachineGuid使用C ++在x86和x64机器上获取窗口序列号()。

感谢您的帮助。

很快

KEY_WOW64_64KEY在您的RegOpenKeyEx参数中添加位。像这样:

RegOpenKeyEx( HKEY_LOCAL_MACHINE, key.c_str(), 0, KEY_READ | KEY_WOW64_64KEY, &hKey )

该文档说它在32位操作系统上被忽略,因此您甚至不需要检测WOW64。

PS我不推荐WMI,它太慢了。我目前拥有i5-4460 CPU,16GB RAM,相对较快的SSD,但是WMI只需1-2秒即可初始化和运行甚至是一个简单的查询。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在x86和x64体系结构中获取Windows序列号(MachineGuid)

来自分类Dev

x86和x64体系结构的汇编语言之间有什么区别?

来自分类Dev

用于x86 / x64体系结构的SQLite dll

来自分类Dev

x86 / x64体系结构可以抵抗不安全的发布吗?

来自分类Dev

x86体系结构中的指令解码

来自分类Dev

为Android x86和x86_64体系结构编译ijkplayer x264,错误:未知类型名称'v4si'

来自分类Dev

x32和x64体系结构在数字运算方面的差异

来自分类Dev

Windows是否支持x86以外的任何硬件体系结构?

来自分类Dev

如何在x64 Windows体系结构的php 5.4上安装pthread?

来自分类Dev

缺少必需的体系结构x86_64

来自分类Dev

如何修复x86_64体系结构错误?

来自分类Dev

如何使用C ++,CMake和Tensorflow修复“ ld:在体系结构x86_64中找不到的符号”?

来自分类Dev

C ++使用指针时获取体系结构x86_64的未定义符号

来自分类Dev

Xcode 5.1和体系结构x86_64的编译错误

来自分类Dev

osx-体系结构x86_64的boost和python未定义符号

来自分类Dev

在文件opencv中缺少必需的体系结构x86_64

来自分类Dev

文件libCorePlot-CocoaTouch.a中缺少必需的体系结构x86_64

来自分类Dev

如何在C中修复“体系结构x86_64的未定义符号”?

来自分类Dev

SDL 2(macOS)中的“体系结构x86_64的未定义符号”

来自分类Dev

GCC:正在获取ld:在OS X 10.11.5上找不到体系结构x86_64错误的符号

来自分类Dev

在我的情况下,ARM和x86是否需要处理硬件体系结构兼容性?

来自分类Dev

在gem5中构建X86体系结构时,发生“未定义引用”错误

来自分类Dev

所有二进制文件都可以在x86体系结构中执行吗?

来自分类Dev

多个文件使用的头文件中的结构声明导致体系结构x86_64的重复符号

来自分类Dev

如何使用Ansible为Java安装x86体系结构

来自分类Dev

处理器体系结构问题(x86与任何CPU)

来自分类Dev

如何在x86体系结构上从C调用汇编函数?

来自分类Dev

X86体系结构-将向量大小设置为unsigned long long

来自分类Dev

在X86机器上生成MIPS体系结构汇编代码

Related 相关文章

  1. 1

    在x86和x64体系结构中获取Windows序列号(MachineGuid)

  2. 2

    x86和x64体系结构的汇编语言之间有什么区别?

  3. 3

    用于x86 / x64体系结构的SQLite dll

  4. 4

    x86 / x64体系结构可以抵抗不安全的发布吗?

  5. 5

    x86体系结构中的指令解码

  6. 6

    为Android x86和x86_64体系结构编译ijkplayer x264,错误:未知类型名称'v4si'

  7. 7

    x32和x64体系结构在数字运算方面的差异

  8. 8

    Windows是否支持x86以外的任何硬件体系结构?

  9. 9

    如何在x64 Windows体系结构的php 5.4上安装pthread?

  10. 10

    缺少必需的体系结构x86_64

  11. 11

    如何修复x86_64体系结构错误?

  12. 12

    如何使用C ++,CMake和Tensorflow修复“ ld:在体系结构x86_64中找不到的符号”?

  13. 13

    C ++使用指针时获取体系结构x86_64的未定义符号

  14. 14

    Xcode 5.1和体系结构x86_64的编译错误

  15. 15

    osx-体系结构x86_64的boost和python未定义符号

  16. 16

    在文件opencv中缺少必需的体系结构x86_64

  17. 17

    文件libCorePlot-CocoaTouch.a中缺少必需的体系结构x86_64

  18. 18

    如何在C中修复“体系结构x86_64的未定义符号”?

  19. 19

    SDL 2(macOS)中的“体系结构x86_64的未定义符号”

  20. 20

    GCC:正在获取ld:在OS X 10.11.5上找不到体系结构x86_64错误的符号

  21. 21

    在我的情况下,ARM和x86是否需要处理硬件体系结构兼容性?

  22. 22

    在gem5中构建X86体系结构时,发生“未定义引用”错误

  23. 23

    所有二进制文件都可以在x86体系结构中执行吗?

  24. 24

    多个文件使用的头文件中的结构声明导致体系结构x86_64的重复符号

  25. 25

    如何使用Ansible为Java安装x86体系结构

  26. 26

    处理器体系结构问题(x86与任何CPU)

  27. 27

    如何在x86体系结构上从C调用汇编函数?

  28. 28

    X86体系结构-将向量大小设置为unsigned long long

  29. 29

    在X86机器上生成MIPS体系结构汇编代码

热门标签

归档