日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++调用WMI类查询获取操作系统名(实例)

發(fā)布時(shí)間:2025/3/15 c/c++ 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++调用WMI类查询获取操作系统名(实例) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
#define _WIN32_DCOM #include <iostream> #include <comdef.h> #include <Wbemidl.h>using namespace std;#pragma comment(lib, "wbemuuid.lib")int main(int argc, char **argv) {HRESULT hres;// 第一步:初始化COMhres = CoInitializeEx(0, COINIT_MULTITHREADED);if (FAILED(hres)){cout << "Failed to initialize COM library. Error code = 0x"<< hex << hres << endl;return 1; // Program has failed.}// 第二步:設(shè)置COM安全級(jí)別hres = CoInitializeSecurity(NULL,-1, // COM 認(rèn)證NULL, // 服務(wù)認(rèn)證NULL, // 保留NULLRPC_C_AUTHN_LEVEL_DEFAULT, // 默認(rèn)權(quán)限RPC_C_IMP_LEVEL_IMPERSONATE, // 默認(rèn)模擬NULL, // 認(rèn)證信息EOAC_NONE, // Additional capabilitiesNULL // Reserved);if (FAILED(hres)){cout << "安全級(jí)別初始化失敗,錯(cuò)誤代碼 = 0x" << hex << hres << endl;CoUninitialize();return 1; // Program has failed.}// 第三步:獲取初始化本地WMIIWbemLocator *pLoc = NULL;hres = CoCreateInstance(CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (LPVOID *)&pLoc);if (FAILED(hres)){cout << "創(chuàng)建IWbemLocator對(duì)象失敗,錯(cuò)誤代碼 = 0x" << hex << hres << endl;CoUninitialize();return 1; // Program has failed.}// 第四步:通過 IWbemLocator::ConnectServer 方法連接WMIIWbemServices *pSvc = NULL;// 使用IWbemServices 連接 root\cimv2 命名空間hres = pLoc->ConnectServer(_bstr_t(L"ROOT\\CIMV2"), // 對(duì)象路徑NULL, // 用戶名為空默認(rèn)當(dāng)前用戶NULL, // 用戶密碼為空默認(rèn)當(dāng)前密碼0, // 本地,NULL表示當(dāng)前NULL, // 安全標(biāo)志0, // 授權(quán)人0, // 上下文對(duì)象&pSvc // IWbemServices代理指針);if (FAILED(hres)){cout << "無法連接,錯(cuò)誤代碼 = 0x" << hex << hres << endl;pLoc->Release();CoUninitialize();return 1; // Program has failed.}cout << "已連接到 ROOT\\CIMV2 WMI 命名空間" << endl;// 第五步:設(shè)置代理安全級(jí)別hres = CoSetProxyBlanket(pSvc, // 要設(shè)置的代理指針RPC_C_AUTHN_WINNT, // RPC_C_AUTHN_xxxRPC_C_AUTHZ_NONE, // RPC_C_AUTHZ_xxxNULL, // 委托服務(wù)名RPC_C_AUTHN_LEVEL_CALL, // RPC_C_AUTHN_LEVEL_xxxRPC_C_IMP_LEVEL_IMPERSONATE, // RPC_C_IMP_LEVEL_xxxNULL, // 客戶端身份EOAC_NONE // 代理能力);if (FAILED(hres)){cout << "代理設(shè)置失敗,錯(cuò)誤代碼 = 0x" << hex << hres << endl;pSvc->Release();pLoc->Release();CoUninitialize();return 1; // Program has failed.}// 第六步:使用 IWbemServices 指針獲取系統(tǒng)名IEnumWbemClassObject* pEnumerator = NULL;hres = pSvc->ExecQuery(bstr_t("WQL"), bstr_t("SELECT * FROM Win32_OperatingSystem"), WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, NULL, &pEnumerator);if (FAILED(hres)){cout << "查詢系統(tǒng)名失敗,錯(cuò)誤代碼 = 0x" << hex << hres << endl;pSvc->Release();pLoc->Release();CoUninitialize();return 1; // Program has failed.}// 第七步:獲取查詢數(shù)據(jù)IWbemClassObject *pclsObj = NULL;ULONG uReturn = 0;while (pEnumerator){HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1,&pclsObj, &uReturn);if (0 == uReturn){break;}VARIANT vtProp;// 獲取Name屬性值hr = pclsObj->Get(L"Name", 0, &vtProp, 0, 0);wcout << " 系統(tǒng)名 : " << vtProp.bstrVal << endl;VariantClear(&vtProp);pclsObj->Release();}// 清理工作pSvc->Release();pLoc->Release();pEnumerator->Release();CoUninitialize();system("pause");return 0; // Program successfully completed.}

說明都在源碼注釋里,效果圖:

總結(jié)

以上是生活随笔為你收集整理的C++调用WMI类查询获取操作系统名(实例)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。