专栏首页方亮WMI技术介绍和应用——WMI概述

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • WMI技术介绍和应用——事件通知

            在《WMI技术介绍和应用——WMI概述》中,我们使用了下图介绍WMI构架(转载请指明出于breaksoftware的csdn博客)

    方亮
  • WMI技术介绍和应用——查询系统服务

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csd...

    方亮
  • WMI技术介绍和应用——查询本地用户和组

            本文使用了《WMI技术介绍和应用——使用VC编写一个半同步查询WMI服务的类》中代码做为基础。本节只是列出了...

    方亮
  • WMI ——重写版

    本文是以WMI的重写版,本来这份笔记会更长,原版的笔记以Black Hat 2015的Abusing Windows Management Instrument...

    徐焱
  • 如何检测并移除WMI持久化后门?

    Windows Management Instrumentation(WMI)事件订阅,是一种常被攻击者利用来在端点上建立持久性的技术。因此,我决定花一些时间研...

    FB客服
  • C#通过获取快捷方式指向目标的小示例触碰WMI

    .Net本身没有封装对快捷方式的操作类,所以要在C#中操作快捷方式,需要借助“外力”。市面上常见的方法是通过Windows Script Host Object...

    AhDung
  • 互联网家装是二道贩子?那可不一定!

    孟永辉
  • 如何实现VR视频版权保护?VR视频加密方案

    VR视频制作越来越精细,内容越来越丰富,观影体验越来越好,VR视频版权保护问题也越来越受重视,如何能更好的保护VR视频版权,并且不影响视频的观看体验呢?

    点量小崔
  • Pytext上手——Intent-Slot 模型实战

    槽位填充可以理解为一个序列标注的问题,我们训练范例{(x((n)),y((n)) ):n=1,……,N},然后我们想要识别学到一个函数f∶x→y,这个函数能够匹...

    致Great
  • CIF调查:英国云计算应用率持续走高

    据Cloud Industry Forum (CIF)最新公布的研究报告显示,云计算已经正式成为英国的主流。 今年6月进行的该项研究发现,超过四分之三(78%)...

    静一

扫码关注云+社区

领取腾讯云代金券