WMI技术介绍和应用——WMI概述
今天,我要开始一系列关于微软WMI技术的介绍。通过之后若干节的介绍,我想WMI技术将为在windows平台上从事开发的朋友开启另外一扇窗。(转载请指明出于breaksoftware的csdn博客)
第一次接触WMI技术是在一年前,当时我接到一个研究型的需求,无意中发现WMI技术是最可靠的解决方案。当时,WMI这种“特别”的使用方式让我这个VC程序员产生了浓厚的兴趣——像写SQL般去写程序。研究WMI技术的火种一直在我内心燃烧,最近正好有时间,我准备把WMI技术做一次比较系统性的梳理。由于WMI技术涉及的方面非常的广泛,我准备主要从应用的角度去讲解一些主要的使用场景,这样才会让该技术比较生动。同时WMI技术一个非常大的优势就是可以访问远程计算机,对于远程计算机的访问,我将安排在最末节去介绍。
本节主要讲解WMI的一些概述,如果不想了解WMI一些背景,本节可以过掉。
WMI的全称是Windows Management Instrumentation,即Windows管理工具。它是Windows操作系统中管理数据和操作的基础模块。我们可以通过WMI脚本或者应用程序去管理本地或者远程计算机上的资源。对于VC和汇编程序员,想获取诸如CPU序列号和硬盘序列号等信息是非常容易的。但是对于VB以及其他一些脚本语言,想尝试获取系统中一些硬件信息可能就没那么容易了。微软为了能达到一种通用性目的(遵守某些行业标准),设计了WMI。它提供了一个通过操作系统、网络和企业环境去管理本地或远程计算机的统一接口集。应用程序和脚本语言使用这套接口集去完成任务,而不是直接通过Windows API。可能有人要问,为什么不让设计的脚本直接在底层使用Windows API,而非要弄个新的技术呢?原因是在目前Windows API中,有些是不支持远程调用或者脚本调用的。这样通过统一模型的WMI,像VB和脚本语言就可以去访问部分系统信息了。但是并不是所有脚本语言都可以使用WMI技术:它要支持ActiveX技术。
那么WMI遵守的是哪个行业标准呢?是WBEM。WMI是对WBEM模型的一种实现。WBEM即Web-Based Enterprise Management,它是一个行业倡议:开发一款在企业环境下访问管理信息的标准技术。这个倡议规范了企业网络中受管资源的描述和使用。它对WMI技术影响最大是其组件CIM和MOF。CIM是Common Information Modal,即公共信息模型。MOF是Managed Object Format,即托管对象格式。WMI使用了这两个标准实现相关功能,我们将在之后的应用章节介绍它们。WBEM倡议目前已经得到微软、甲骨文、惠普等大公司的支持。
虽然这种标准已被广泛支持,但是WMI技术可能还是鲜为人知。其实它的历史并不短暂。在Win2K之前的操作系统中,就已经支持了WMI技术,只是当时需要下载并安装一个开发包。从Win2K系统开始,系统就自带了WMI,并且WMI成为系统的一个重要组件。随着Xp、2003、Vista、Win7等的发布,WMI所能提供的功能也在不断的增强和完善中。因为增强和完善,我们将发现,在不同的系统中,调用相同的操作将会获得不同的信息(得到的子集不同),这也是影响WMI使用的一个因素。但是从技术角度说,这个不是问题。
使用WMI技术主要分为两个大的方面:1 获取信息;2 提供数据。其中“获取信息”需要WMI Classes(以后称为WMI类)。“提供数据”需要WMI Provider(以后称为WMI提供者)。在之后的应用例子中,我将先介绍相对简单点的“获取信息”,然后再讲解稍微复杂点的“提供数据”。为什么说“获取信息”相对简单?我们就先看下WMI的构架图,下图来源为MSDN
总体看来,可以将WMI分成3层结构。我们由上而下介绍这3层结构。
WMI Consumers(WMI使用者)
它位于WMI构架的最顶层,是WMI技术使用的载体。如果我们是C++程序员,我们可以通过COM技术直接与下层通信。而脚本语言则要支持WMI Scripting API,间接与下层通信。对于.net平台语言,则要使用System.Management域相关功能与下层通信。这些WMI的使用者,可以查询、枚举数据,也可以运行Provider的方法,还可以向WMI订阅消息。当然这些数据操作都是要有相应的Provider来提供。
WMI Infrastructure(WMI基础结构)
WMI基础结构是Windows系统的系统组件。它包含两个模块:包含WMI Core(WMI核心)的WMI Service(WMI服务)(Winmgmt)和WMI Repository(WMI存储库)。
WMI存储库是通过WMI Namespace(WMI命名空间)组织起来的。在系统启动时,WMI服务会创建诸如root\default、root\cimv2和root\subscription等WMI命名空间,同时会预安装一部分WMI类的定义信息到这些命名空间中。其他命名空间是在操作系统或者产品调用有关WMI提供者(WMI Provider)时才被创建出来的。简而言之,WMI存储库是用于存储WMI静态数据的存储空间。之后,我们将优先介绍访问WMI存储库来获取有用的信息。
WMI服务扮演着WMi提供者、管理应用和WMI存储库之间的协调者角色。一般来说,它是通过一个共享的服务进程SVCHOST来实施工作的。当第一个管理应用向WMI命名空间发起连接时,WMI服务将会启动。当管理应用不再调用WMI时,WMI服务将会关闭或者进入低内存状态。如我们上图所示,WMI服务和上层应用之间是通过COM接口来实现的。当一个应用通过接口向WMI发起请求时,WMI将判断该请求是请求静态数据还是动态数据。如果请求的是一个静态数据,WMI将从WMI存储库中查找数据并返回;如果请求的是一个动态数据,比如一个托管对象的当前内存情况,WMI服务将请求传递给已经在WMI服务中注册的相应的WMI提供者。WMI提供者将数据返回给WMI服务,WMI服务再将结果返回给请求的应用。
Managed object and WMI providers(托管对象和WMI提供者)
WMI提供者是一个监控一个或者多个托管对象的COM接口。一个托管对象是一个逻辑或者物理组件,比如硬盘驱动器、网络适配器、数据库系统、操作系统、进程或者服务。和驱动相似,WMI提供者通过托管对象提供的数据向WMI服务提供数据,同时将WMI服务的请求传递给托管对象。
从文件的角度来说,WMI提供者是由一个实现逻辑的DLL和承载着描述数据和操作的类的托管对象格式(Managed Object Format)文件组成。这个两个文件都保存在%Windir%\System32\Wbem目录下。
通过以上对WMI的介绍,我想大家应该对WMI有了个初步的认识。下面我将讲解在VC中使用WMI的一些步骤,之后我会再从应用的角度讲解怎么使用WMI技术。
工程链接:http://pan.baidu.com/s/1i4pTM3V 密码:9tj1
相关文章:

综合技术 --@Autowired和@Resource
2019独角兽企业重金招聘Python工程师标准>>> 1.Autowired和Resource 的作用一样,都是自动注入 2.Autowired是按照byType自动注入,而Resource默认是按照byName自动注入。 3.Resource有两个属性比较重要,分别是name和type࿰…

CowNew开源团队新书《自己动手写开发工具》隆重上市
《自己动手写开发工具--基于Eclipse的工具开发》本书系统地介绍了SWT、Draw2D、GEF、JET等与Eclipse插件开发相关的基础知识,并且以实际的开发案例来演示这些知识的实战性应用,通过对这些实际开发案例的学习,读者可以非常轻松地掌握Eclipse插…
4000个“不会数学”的程序员出现大反转!居然能学AI,玩算法,搞逻辑!背后原因首次曝光...
不懂数学的程序员,尤其是在工作之后的一些瞬间,有多少次让你感受到数学的重要性?我们来看2个例子:写一行代码会用数学的程序员:我能分析除代码算法的时间复杂度与空间复杂度,不用写就知道这个算法的优缺点。…

WMI技术介绍和应用——VC开发WMI应用的基本步骤
在《WMI技术介绍和应用——WMI概述》中介绍了我们可以使用C、.net或者支持ActiveX技术的脚本语言来使用WMI。但是各种语言对WMI的控制能力是不同的,比如脚本语言只能用来从WMI获取数据或者接收事件通知。而C还可以编写WMI提供者和发送消息。和脚本语言相比ÿ…

WMI技术介绍和应用——使用VC编写一个半同步查询WMI服务的类
在《WMI技术介绍和应用——VC开发WMI应用的基本步骤》文中,我们介绍了VC使用WMI技术的基本框架。本节我将讲解封装和实现一个用于半同步查询WMI的类。(转载请指明出于breaksoftware的csdn博客) 我曾思考过如何编写一个比较有用的类࿰…

致被套基民:老基民的四点教训七点经验(ZT)
四点错误: 一是没有足够的耐心。比如我曾买入一只基金,上半年表现不好,在忍无可忍之下终于赎回,结果它在下半年股市调整时大放异彩,成为收益率的冠军; 二是只看高分红买基金,结果错过了几只净值…
千万用户同时在线,优酷智能档在双11“猫晚”直播如何防卡顿?
作者 | 阿里文娱高级技术专家肖文良出品 | AI科技大本营(ID:rgznai100) 导读:本文为阿里文娱高级技术专家肖文良在【阿里文娱2019双11猫晚技术沙龙】中的演讲,主要内容为如何通过优酷智能档,降低用户卡顿尤其是双11直播…

导航菜单:jQuery粘性滚动导航栏效果
粘性滚动是当导航在滚动过程中会占粘于浏览器上,达到方便网站页面浏览的效果,也是一种用户体验,下面我们看一下是怎么实现的: jQuery的 smint插件,也是一个导航菜单固定插件。当页滚动时,导航菜单会固定在顶…
如何用Python实现超级玛丽的人物行走和碰撞检测?
作者 | marble_xu编辑 | 郭芮出品 | CSDN博客在《如何用 Python 实现超级玛丽的界面和状态机?》这篇文章中我们讲解如何用代码实现界面和状态机,本文详解人物行走和碰撞检测的实现。功能介绍人物行走人物的行走速度这边分成水平方向(X轴&…

WMI技术介绍和应用——查询正在运行的进程信息
在《WMI技术介绍和应用——使用VC编写一个半同步查询WMI服务的类》一文中,我们介绍到了一个半同步查询WMI类的框架。本文将是该技术的一个应用,介绍如何使用WMI技术查询正在运行的进程信息。(转载请指明出于breaksoftware的csdn博客ÿ…

20个经典要诀学好英语
出处:我学网互助论坛第一要诀:收听英语气象报告 有些教学录音带为配合初学者的学习,故意放慢语速,这对英语听力的训练是不够的。如果听语速正常的英语,初学者又会感到力不从心。英语气象报告的速度虽快,…

ArduinoYun教程之通过网络为Arduino Yun编程
ArduinoYun教程之通过网络为Arduino Yun编程 Arduino Yun的软件部分 通过第一章的介绍后读者就明白了Arduino Yun除了是一个类似其他Arduino的单片机之外,它的另一大组成部分就是运行着一个特殊Linux发行版的Atheros AR9331芯片。所以,本章将会介绍Ather…

WMI技术介绍和应用——查询正在运行的线程信息
本文使用了《WMI技术介绍和应用——使用VC编写一个半同步查询WMI服务的类》中代码做为基础。 一般来说,如果试图枚举系统中的线程。需要先枚举系统中的进程,然后再枚举每个进程中的线程。而WMI给我们提供了一种比较简便的枚举线程信息的方法。࿰…
开源生态也难逃“卡脖子”危机?中国AI开发者的警醒和突围
开源不是一个新名词,也不是一个新行动。软件时代,开源推动了全球范围的创新技术成果落地,从而促进全球信息技术发生了全局性、持续性的重大变革,这使它甚至成为一条非常关键且成功的技术路线。随着AI时代的来临,阿里、…

Linux下应用软件的安装
对于刚刚接触Linux的朋友来说,安装一些应用软件是一件头疼的事,因为在Linux下安装应用软件和Windows下截然不同的,下面介绍一下Linux下安装应用软件来解决刚刚接触Linux而不会安装软件朋友的困惑.Linux下软件包有两种比较常见的形式,一种是以 RPM、deb包为代表的智能…

Hibernate 的 session.load()使用方法
2019独角兽企业重金招聘Python工程师标准>>> protected Person getOne(int id){ Session session HibernateSessionFactory.getSession(); Person person new Person(); try{ session.load(person, id); }catch(Exception e){ e.printStackTrace(); }final…

WMI技术介绍和应用——查询桌面信息
本文使用了《WMI技术介绍和应用——使用VC编写一个半同步查询WMI服务的类》中代码做为基础。 在Windows操作系统中,存在很多Windows Station。而每一个Windows Station又存在一个或者多个Windows Desktop。我们一般所说的桌面只是这些众多桌面中的一个。以下内容将介…
联泰集群发布水晶系列工作站,用于深度学习场景
北京时间2019年12月26日,联泰集群在北京正式发布了水晶系列工作站产品 W722、W7224和W5232。 联泰集群硬件产品技术中心总监刘振锋、软件产品技术中心总监孙建军、硬件产品技术中心工程师肖学文分别从应用方向、水晶工作站一体化软件平台及水晶系列产品硬件方面对本…

航空黑客私人YY
坐飞机从从云南飞回老家广州~~~当然绝对支持深圳航空啦!嘎嘎!为啥?当然是服务好 MM太PL了!呵呵!而且在看杂志的同时还看到了一则新闻 内容如下 近日,深圳航空公司与瑞士OnAir公司在香港签约,合作推动在飞机上实现万米高空的自由通信。2008年奥运会前&am…

Redis安装整理(window平台) +php扩展redis
window平台Redis安装 redis windows安装文件下载地址:http://code.google.com/p/servicestack/wiki/RedisWindowsDownload#Download_32bit_Cygwin_builds_for_Windows我选择的redis为最新版的安装文件,见下图: Redis安装文件解压后,有以下…

WMI技术介绍和应用——查询环境变量
本文使用了《WMI技术介绍和应用——使用VC编写一个半同步查询WMI服务的类》中代码做为基础。 我们可以通过系统属性查看当前系统和当前用户的环境变量。(转载请指明出于breaksoftware的csdn博客) 如何使用WMI枚举所有环境变量的信息? CSynQue…
想学新的编程语言?考虑下Go吧
作者 | Lewis Fairweather译者 | 弯月,责编 | Elle来源 | CSDN(ID:CSDNnews)【导读】快速的运行时、高效的并发、简单易学的语法,这些都是Go语言最吸引人的特性。以下为译文:Go语言的入门门槛之低令我感到惊…

oracle学习总结三(bulk collect用法)
通过bulk collect减少loop处理的开销发表人:logzgh | 发表时间: 2006年五月19日, 10:56采用bulk collect可以将查询结果一次性地加载到collections中。而不是通过cursor一条一条地处理。可以在select into,fetch into,returning into语句使用bulk collect。注意在使用bulk coll…

MQTT的学习研究(五) MQTT moquette 的 Blocking API 发布消息服务端使用
参看官方文档: http://publib.boulder.ibm.com/infocenter/wmqv7/v7r0/index.jsp?topic/com.ibm.mq.amqtat.doc/tt00000_.htm * Java 为 MQ Telemetry Transport 创建异步发布程序 *在此任务中,您将遵循教程来修改第一个发布程序。通过修改,…

WMI技术介绍和应用——查询驱动信息
本文使用了《WMI技术介绍和应用——使用VC编写一个半同步查询WMI服务的类》中代码做为基础。 如何使用WMI查询所有驱动信息?(转载请指明出于breaksoftware的csdn博客) CSynQueryData recvnotify(L"root\\CIMV2",L"SELECT * FR…

NumericUpDown
NumericUpDown控件主要功能是为一个TextBox控件添加上下按钮,当单击按钮时实现数字的加减,同时也可以提供静态数据,实现这些数据的上下选择。 属性列表: TargetControlID:该控件的目标作用控件。 Width&…
提高建模效率,改变手工作坊式生产,AutoML的技术研究与应用进展如何了?
整理 | 王银出品 | AI科技大本营(ID:rgznai100)【导读】12 月 5-7 日,由中国计算机学会主办,CCF 大数据专家委员会承办,CSDN、中科天玑协办的中国大数据技术大会(BDTC 2019)在北京长城饭店隆重举…

.net使用memcached
Windows中memached安装 -------------服务器端配置 1>开始>运行:CMD(确定) 2>cd C:\memcached(回车) 3>memcached -d install(回车 这步执行安装) 4>memcached -d start(回车 这步执行启动memcache服务器,默认分配64M内存&…
22张精炼图笔记,深度学习专项学习必备
作者 | DL&CV_study9编辑 | Elle来源 | CSDN 博客本文为人工智能学习笔记记录。【深度学习基础篇】一、深度学习基本概念监督学习:所有输入数据都有确定的对应输出数据,在各种网络架构中,输入数据和输出数据的节点层都位于网络的两端&…

WMI技术介绍和应用——查询文件夹信息
本文使用了《WMI技术介绍和应用——使用VC编写一个半同步查询WMI服务的类》中代码做为基础。本节只是列出了WQL语句,具体使用参看前面的例子。 本节主要介绍Win32_Directory类。通过该类我们将可以获得部分常用的文件夹信息。在该类中,有属性Name&#x…