首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >[C++][windows]利用WMI获取机器码

[C++][windows]利用WMI获取机器码

作者头像
云未归来
发布2025-07-19 14:57:46
发布2025-07-19 14:57:46
1000
举报

以下代码为chatgpt自动生成,测试通过,效果碾压网上其他博客获取机器码代码。

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

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

using namespace std;

string GetMachineCode() {     string machineCode = "";

    HRESULT hr = CoInitializeEx(0, COINIT_MULTITHREADED);     if (FAILED(hr))     {         return machineCode;     }

    hr = CoInitializeSecurity(         NULL,         -1,         NULL,         NULL,         RPC_C_AUTHN_LEVEL_DEFAULT,         RPC_C_IMP_LEVEL_IMPERSONATE,         NULL,         EOAC_NONE,         NULL     );

    if (FAILED(hr))     {         CoUninitialize();         return machineCode;     }

    IWbemLocator* pLoc = NULL;     hr = CoCreateInstance(         CLSID_WbemLocator,         0,         CLSCTX_INPROC_SERVER,         IID_IWbemLocator,         reinterpret_cast<LPVOID*>(&pLoc)     );

    if (FAILED(hr))     {         CoUninitialize();         return machineCode;     }

    IWbemServices* pSvc = NULL;     hr = pLoc->ConnectServer(         _bstr_t(L"ROOT\\CIMV2"),         NULL,         NULL,         0,         NULL,         0,         0,         &pSvc     );

    if (FAILED(hr))     {         pLoc->Release();         CoUninitialize();         return machineCode;     }

    hr = CoSetProxyBlanket(         pSvc,         RPC_C_AUTHN_WINNT,         RPC_C_AUTHZ_NONE,         NULL,         RPC_C_AUTHN_LEVEL_CALL,         RPC_C_IMP_LEVEL_IMPERSONATE,         NULL,         EOAC_NONE     );

    if (FAILED(hr))     {         pSvc->Release();         pLoc->Release();         CoUninitialize();         return machineCode;     }

    IEnumWbemClassObject* pEnumerator = NULL;     hr = pSvc->ExecQuery(         _bstr_t(L"WQL"),         _bstr_t(L"SELECT ProcessorId, SerialNumber FROM Win32_Processor"),         WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,         NULL,         &pEnumerator     );

    if (FAILED(hr))     {         pSvc->Release();         pLoc->Release();         CoUninitialize();         return machineCode;     }

    IWbemClassObject* pclsObj = NULL;     ULONG uReturn = 0;

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

        if (uReturn == 0)         {             break;         }

        VARIANT vtProp;

        hr = pclsObj->Get(L"ProcessorId", 0, &vtProp, 0, 0);         wstring processorIdWStr(vtProp.bstrVal, SysStringLen(vtProp.bstrVal));         string processorId(processorIdWStr.begin(), processorIdWStr.end());

        hr = pclsObj->Get(L"SerialNumber", 0, &vtProp, 0, 0);         wstring serialNumberWStr(vtProp.bstrVal, SysStringLen(vtProp.bstrVal));         string serialNumber(serialNumberWStr.begin(), serialNumberWStr.end());

        machineCode = processorId + serialNumber;

        VariantClear(&vtProp);         pclsObj->Release();     }

    pEnumerator->Release();     pSvc->Release();     pLoc->Release();     CoUninitialize();

    return machineCode; }

int main() {     std::cout << GetMachineCode() << std::endl;     getchar(); }

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-04-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档