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

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.xdnf.cn/news/3656.html

相关文章:

  • MySQL:联合查询
  • Linux-07-Shell
  • 大模型在终末期肾脏病风险预测与临床方案制定中的应用研究
  • 如何封装一个线程安全、可复用的 HBase 查询模板
  • Encoder-free无编码器多模态大模型EVEv2模型架构、训练方法浅尝
  • Windows 使用set和setx设置环境变量(skywalk3)
  • 2.LED灯的控制和按键检测
  • 【MySQL】事务管理
  • 区块链+IoT:创新场景落地背后的技术攻坚战
  • Python镜像源配置:
  • 数据结构-线性结构(链表、栈、队列)实现
  • MATLAB图像加密案例
  • 状压 DP 详解
  • 揭开并发编程的面纱:从零开始构建 Java 阻塞队列
  • 【AI提示词】系统分析员
  • Redis怎么避免热点数据问题
  • 软件第三方测试:关键部分、意义、流程及方法全解析?
  • 轻量级在线Excel预览工具
  • PyTorch、Flash-Attn、Transformers与Triton技术全景解析+环境包
  • 第 13 届蓝桥杯 C++ 青少组省赛中 / 高级组 2022 年真题
  • Python全流程开发实战:基于IMAP协议安全下载个人Gmail邮箱内所有PDF附件
  • SQL语句练习 自学SQL网 在查询中使用表达式 统计
  • 组件通信-mitt
  • 数据结构之哈夫曼树
  • 【Hive入门】Hive性能调优之Join优化:深入解析MapJoin与Sort-Merge Join策略
  • 安装深度环境anaconda+cuda+cudnn+pycharm+qt+MVS
  • python 桌面程序开发简述及示例
  • 玩转Docker(一):基本概念
  • 觅知解析计费系统重构版在线支付卡密充值多解析接口免授权无后门源码扶风二开
  • Git 完整教程:初学者分步指南