当前位置: 首页 > 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;//已成功完成计划.
}
http://www.dtcms.com/a/168483.html

相关文章:

  • 微软发布了最新的开源推理模型套件“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的环境安装
  • w317汽车维修预约服务系统设计与实现
  • ThreadLocal理解
  • SALOME源码分析: 命令系统
  • Android WebView加载h5打开麦克风与摄像头的权限问题
  • 学习记录:DAY22
  • 仙盟创梦IDE-智能编程,编程自动备份+编程审计
  • OnlyOffice Document Server 源码调试指南-ARM和x86双模式安装支持
  • 软连接和硬连接【Linux操作系统】
  • iO(不可区分混淆)是Web3隐私的圣杯?
  • AntSK:基于大模型的一体化AI知识库解决方案深度解析