以下代码为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(); }