电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

wmi程序详解

14页
  • 卖家[上传人]:第***
  • 文档编号:34213731
  • 上传时间:2018-02-22
  • 文档格式:DOC
  • 文档大小:92.50KB
  • / 14 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、前段时间由于项目需要,要求做一个服务器的实时性能监控(CPU、内存、网络利用率等)和读取服务器的硬件配置参数的接口供项目组使用,就是一个类似于鲁大师之类的东东吧.当然第一想法肯定是利用 Windows 提供的系统标准 API 函数来完成所需的功能,当然这也应该是当前最理想最有效率的选择了。但是如果你对 API 编程不是很熟练的话. 那就相当蛋疼了!你知道用 API 可以做到但是不知道用哪个 API,好啊,可以查 MSDN。问题是你连 API 名字都不知道 .当然,如果你们公司允许你们上国内局域网的话那就好办多了,因为有无数强大的网友会帮你找到答案。使用 API 编程的另一个问题是如果你仍旧对 API不熟悉的话调用起来相当困难、很不顺手。还有一种方案就是-“强大”的 WMI,.net 平台的程序员可能对这个比较熟悉, WMI 即windows 管理规范。通过它可以访问、配置、管理和监视几乎所有的 Windows 资源。当然对于程序员而言在 WMI 体系结构中我们最需要关心的就是 WMI 提供的程序和接口。WMI 提供程序在 WMI 和托管资源之间扮演着中间方的角色。提供程序代表使用者应用

      2、程序和脚本从 WMI 托管资源请求信息,并发送指令到 WMI 托管资源。下面是我们利用 WMI 编程经常要用到的 WMI 内置提供程序清单,以供编程参考。1.Active Directory 提供程序 链接库文件:dsprov.dll 命名空间:rootdirectoryldap 作用:将 Active Directory 对象映射到 WMI。 2.事件日志提供程序 链接库文件:ntevt.dll 命名空间:rootcimv2 作用:管理 Windows 事件日志,例如,读取、备份、清除、复制、删除、监视、重命名、压缩、解压缩和更改事件日志设置。 3.注册表提供程序 链接库文件:stdprov.dll 命名空间:rootdefault 作用:读取、写入、枚举、监视、创建、删除注册表项和值。 4.Win32 提供程序 链接库文件:cimwin32.dll 命名空间:rootcimv2 作用:提供关于计算机、磁盘、外围设备、文件、文件夹、文件系统、网络组件、操作系统、打印机、进程、安全性、服务、共享、SAM 用户及组,以及更多资源的信息。 5.Windows 安装程序提供程序 链接库文件:

      3、msiprov.dll 命名空间:rootcimv2 作用:提供对已安装软件信息的访问。 以上可以看出 WMI 中的类被分组到不同的命名空间中,所以我们在调用相应的程序库时要注意引入对应的命名空间我们今天用到的库就是 cimwin32.dll 库(第 4 个)。二、通过 WMI(windows 管理规范)接口编程来实现系统硬件信息的获取这个相较于上面 API 方式就方便多了 使用起来是相当的方面但是.但是.这个他妈的实在是太慢了比上面的 API 方式要慢很多倍 我没有试过 WMI 在.net 平台下的效果,但至少在 MFC 工程里面是相当的慢,看代码1、WMIInfo.h 文件1.#pragma once 2.#include 3.#include 4.#include 5.#pragma comment(lib,WbemUuid.lib) 6. 7.class CWmiInfo 8. 9.public: 10. CWmiInfo(void); 11. CWmiInfo(void); 12. 13. public: 14. HRESULT InitWmi(); /初始化 WMI 15.

      4、 HRESULT ReleaseWmi(); /释放 16. 17. 18. BOOL GetSingleItemInfo(CString,CString,CString BOOL GetGroupItemInfo(CString,CString,int,CString 19. 20. private: 21. void VariantToString(const LPVARIANT,CString /将 Variant 类型的变量转换为 CString 22. private: 23. IEnumWbemClassObject* m_pEnumClsObj; 24. IWbemClassObject* m_pWbemClsObj; 25. IWbemServices* m_pWbemSvc; 26. IWbemLocator* m_pWbemLoc; 27. ; 2.WMIInfo.CPP 文件1.#include StdAfx.h 2.#include WmiInfo.h 3. 4.CWmiInfo:CWmiInfo(void) 5. 6. m_pWbemSvc=NULL; 7.

      5、m_pWbemLoc=NULL; 8. m_pEnumClsObj = NULL; 9. 10. 11. CWmiInfo:CWmiInfo(void) 12. 13. m_pWbemSvc=NULL; 14. m_pWbemLoc=NULL; 15. m_pEnumClsObj = NULL; 16. 17. 18. HRESULT CWmiInfo:InitWmi() 19. 20. HRESULT hr; 21. 22. /一、初始化 COM 组件 23. /初始化 COM 24. hr=:CoInitializeEx(0,COINIT_MULTITHREADED); 25. if (SUCCEEDED(hr) | RPC_E_CHANGED_MODE = hr) 26. 27. /设置进程的安全级别,(调用 COM 组件时在初始化 COM 之后要调用CoInitializeSecurity 设置进程安全级别,否则会被系统识别为病毒) 28. hr=CoInitializeSecurity(NULL, 29. -1, 30. NULL, 31. NULL, 32. RPC_C_A

      6、UTHN_LEVEL_PKT, 33. RPC_C_IMP_LEVEL_IMPERSONATE, 34. NULL, 35. EOAC_NONE, 36. NULL); 37. /VERIFY(SUCCEEDED(hr); 38. 39. /二、创建一个 WMI 命名空间连接 40. /创建一个 CLSID_WbemLocator 对象 41. hr=CoCreateInstance(CLSID_WbemLocator, 42. 0, 43. CLSCTX_INPROC_SERVER, 44. IID_IWbemLocator, 45. (LPVOID*) 46. VERIFY(SUCCEEDED(hr); 47. 48. /使用 m_pWbemLoc 连接到rootcimv2并设置 m_pWbemSvc 的指针 49. hr=m_pWbemLoc-ConnectServer(CComBSTR(LROOTCIMV2), 50. NULL, 51. NULL, 52. 0, 53. NULL, 54. 0, 55. 0, 56. 57. VERIFY(SUCCEEDED(hr); 58.

      7、 59. /三、设置 WMI 连接的安全性 60. hr=CoSetProxyBlanket(m_pWbemSvc, 61. RPC_C_AUTHN_WINNT, 62. RPC_C_AUTHZ_NONE, 63. NULL, 64. RPC_C_AUTHN_LEVEL_CALL, 65. RPC_C_IMP_LEVEL_IMPERSONATE, 66. NULL, 67. EOAC_NONE); 68. VERIFY(SUCCEEDED(hr); 69. 70. 71. return(hr); 72. 73. 74. HRESULT CWmiInfo:ReleaseWmi() 75. 76. HRESULT hr; 77. 78. if (NULL != m_pWbemSvc) 79. 80. hr=m_pWbemSvc-Release(); 81. 82. if (NULL != m_pWbemLoc) 83. 84. hr=m_pWbemLoc-Release(); 85. 86. if (NULL != m_pEnumClsObj) 87. 88. hr=m_pEnumClsObj-Release(); 89. 90. 91. :CoUninitialize(); 92. 93. return(hr); 94. 95. 96. BOOL CWmiInfo:GetSingleItemInfo(CString ClassName,CString ClassMember,CString &chRetValue) 97. 98. USES_CONVERSION; 99. 100. CComBSTR query(SELECT * FROM ); 101. VARIANT vtProp; 102. ULONG uReturn; 103. HRESULT hr; 104. BOOL bRet = FALSE; 105. 106. if (NULL != m_pWbemSvc) 107. 108. /查询类 ClassName 中的所有字段, 保存到 m_pEnumClsObj 中 109. query+=CComBSTR(ClassName); 110. hr=m_pWbemSvc-ExecQuery(CComBSTR(WQL)

      《wmi程序详解》由会员第***分享,可在线阅读,更多相关《wmi程序详解》请在金锄头文库上搜索。

      点击阅读更多内容
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.