ZBLOG

获取 硬件唯一ID

获取硬件唯一ID的方法因操作系统和编程语言而异。以下是一些常见的方式:

Windows

在Windows上,可以使用WMI(Windows Management Instrumentation)来获取硬件唯一标识符。

使用C++:

#include <iostream>
#include <comdef.h>
#include <Wbemidl.h>

#pragma comment(lib, "wbemuuid.lib")

void GetHardwareID() {
    HRESULT hres;

    // 初始化COM库
    hres = CoInitializeEx(0, COINIT_MULTITHREADED);
    if (FAILED(hres)) {
        std::cout << "Failed to initialize COM library. Error code = 0x" 
                  << std::hex << hres << std::endl;
        return;
    }

    // 初始化安全性
    hres = CoInitializeSecurity(
        NULL,
        -1,                          // COM negotiates service
        NULL,                        // Authentication services
        NULL,                        // Reserved
        RPC_C_AUTHN_LEVEL_DEFAULT,  
        RPC_C_IMP_LEVEL_IMPERSONATE,
        NULL,                        // Reserved
        EOAC_NONE,                  // Additional capabilities
        NULL                         // Reserved
    );

    // 创建 WMI 接口的实例
    IWbemLocator *pLoc = NULL;

    hres = CoCreateInstance(
        CLSID_WbemLocator,
        0,
        CLSCTX_INPROC_SERVER,
        IID_IWbemLocator,(LPVOID *)&pLoc);

    IWbemServices *pSvc = NULL;

    hres = pLoc->ConnectServer(
         _bstr_t(L"ROOT\\CIMV2"), // WMI namespace
         NULL,                     // User name 
         NULL,                     // User password 
         0,                        // Locale 
         NULL,                     // Security flags 
         0,                        // Authority (for example, Kerberos)
         0,                        // Context object 
         &pSvc                     // pointer to IWbemServices proxy
     );

     IEnumWbemClassObject* pEnumerator = NULL;
     hres = pSvc->ExecQuery(
       bstr_t("WQL"),
       bstr_t("SELECT * FROM Win32_ComputerSystemProduct"),
       WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
       NULL,
       &pEnumerator);

     IWbemClassObject *pclsObj = NULL;
     ULONG uReturn = 0;

     while (pEnumerator) {
       HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1,&pclsObj,&uReturn);
       if(0 == uReturn) break;

       VARIANT vtProp;
       hr = pclsObj->Get(L"UUID", 0, &vtProp, 0, 0);
       wprintf(L"Hardware ID: %s\n", vtProp.bstrVal);
       
       VariantClear(&vtProp);
       pclsObj->Release();
     }
     
     pSvc->Release();
     pLoc->Release();
     pEnumerator->Release();
     
     CoUninitialize();
}

int main() {
   GetHardwareID();
   return 0;
}

Linux

在Linux上,可以通过读取 /etc/machine-idcat /var/lib/dbus/machine-id 来获取机器唯一ID。

使用Shell命令:

cat /etc/machine-id

Python 示例

如果你使用Python,你可以利用相关库,如 uuid 来获取主机的唯一ID。

import uuid

# 获取机器的UUID(如果支持)
machine_id = str(uuid.uuid1())
print(f'Machine UUID: {machine_id}')

请根据你的具体需求选择适合的方法。如果有特定的环境或需求,请提供更多信息,以便我能更准确地帮助你。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=19856

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?