当前位置: 首页 > news >正文

2505C++,wmi客户端示例

原文

#define _WIN32_DCOM
#include <iostream>
using namespace std;
#include <comdef.h>
#include <Wbemidl.h>
#pragma comment(lib, "wbemuuid.lib")
int main(int argc, char **argv)
{HRESULT hres;//初化`COM`.hres =  CoInitializeEx(0, COINIT_MULTITHREADED);if (FAILED(hres)){cout << "Failed to initialize COM library. "<< "Error code = 0x"<< hex << hres << endl;return 1;//程序失败.}//初化hres =  CoInitializeSecurity(NULL,-1,//`COM`协商服务NULL,//认证服务NULL,//保留RPC_C_AUTHN_LEVEL_DEFAULT,//认证RPC_C_IMP_LEVEL_IMPERSONATE,//模仿NULL,//认证信息EOAC_NONE,//其他`功能`NULL//保留);if (FAILED(hres)){cout << "Failed to initialize security. "<< "Error code = 0x"<< hex << hres << endl;CoUninitialize();return 1;//程序失败.}//取特定主机上`窗口`管理的初始定位器.IWbemLocator *pLoc = 0;hres = CoCreateInstance(CLSID_WbemLocator,0,CLSCTX_INPROC_SERVER,IID_IWbemLocator, (LPVOID *) &pLoc);if (FAILED(hres)){cout << "Failed to create IWbemLocator object. "<< "Error code = 0x"<< hex << hres << endl;CoUninitialize();return 1;//程序失败.}IWbemServices *pSvc = 0;//使用当前用户连接到`root\cimv2``名字空间`,并取`pSvc`指针以调用`IWbemServices`.hres = pLoc->ConnectServer(_bstr_t(L"ROOT\\CIMV2"),//`WMI``名字空间`NULL,//用户名NULL,//用户密码0,//本地NULL,//安全标志0,//柄0,//`环境`对象&pSvc//`IWbemServices`代理);if (FAILED(hres)){cout << "Could not connect. Error code = 0x"<< hex << hres << endl;pLoc->Release();CoUninitialize();return 1;//程序失败.}cout << "Connected to ROOT\\CIMV2 WMI namespace" << endl;//设置`IWbemServices`代理,这样模拟用户(客户).hres = 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(hres)){cout << "Could not set proxy blanket. Error code = 0x"<< hex << hres << endl;pSvc->Release();pLoc->Release();CoUninitialize();return 1;//程序失败.}//使用`IWbemServices`指针发出`WMI`请求.在此处发出请求:如,查询所有运行中的进程IEnumWbemClassObject* pEnumerator = NULL;hres = pSvc->ExecQuery(bstr_t("WQL"),bstr_t("SELECT * FROM Win32_Process"),WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,NULL,&pEnumerator);if (FAILED(hres)){cout << "Query for processes failed. "<< "Error code = 0x"<< hex << hres << endl;pSvc->Release();pLoc->Release();CoUninitialize();return 1;//程序失败.}else{IWbemClassObject *pclsObj;ULONG uReturn = 0;while (pEnumerator){hres = pEnumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn);if(0 == uReturn){break;}VARIANT vtProp;//取`名字`属性的值hres = pclsObj->Get(L"Name", 0, &vtProp, 0, 0);wcout << "Process Name : " << vtProp.bstrVal << endl;VariantClear(&vtProp);pclsObj->Release();pclsObj = NULL;}}//清理`========`pSvc->Release();pLoc->Release();pEnumerator->Release();CoUninitialize();return 0;//已成功完成计划.
}

相关文章:

  • 微软发布了最新的开源推理模型套件“Phi-4-Reasoning
  • C++ 项目中的多语言字符串管理方案(支持自动提示与动态加载)
  • 逻辑回归的多分类实战:以鸢尾花数据集为例
  • 【源码+文档+调试讲解】儿童图书推荐系统81
  • 论文笔记(八十三)STACKGEN: Generating Stable Structures from Silhouettes via Diffusion
  • C++负载均衡远程调用学习之QPS性能测试
  • 个人健康中枢的多元化AI软件革新与精准健康路径探析
  • 同城跑腿小程序帮取帮送接单抢单预约取件智能派单同城配送全开源运营版源码优创
  • 2000-2022年上市公司数字经济专利申请数据
  • 组件通信-mitt
  • 【云备份】配置文件加载模块
  • 中小企业MES系统需求文档
  • 创新老年综合评估实训室建设方案,规范评估流程
  • JSON与字典的区别及示例
  • (六——下)RestAPI 毛子(Http resilience/Refit/游标分页)
  • Linux52 运行百度网盘 解决故障无法访问repo nosandbox 未解决:疑似libstdc++版本低导致无法运行baidu网盘
  • Arduino逻辑控制详细解答,一点自己的想法记录
  • Shell 脚本基础
  • 文献阅读篇#7:5月一区好文阅读,BFA-YOLO,用于建筑信息建模!(下)
  • 【记录】新Ubuntu20配置voxelmap的环境安装
  • 校方就退60件演出服道歉:承诺回收服装承担相关费用,已达成和解
  • 17家A股城商行一季报扫描:青岛银行营收增速领跑,杭州银行净利增速领跑
  • 新势力4月销量出炉:零跑逾4万辆再夺冠,蔚来环比增近六成,小米下滑
  • 武汉大学新闻与传播学院已由“80后”副院长吴世文主持工作
  • 解放日报:硬科企业由此迈出“市场第一步”
  • 制定出台民营经济促进法有何重大意义?全国人大常委会法工委回应