◎WMI轻松入门之四——解析类定义

原创 2007年09月30日 08:48:00
在上一篇文章中我们说过,WMI中用类对托管资源进行抽象定义和和管理,那么,什么是类?
  类的定义相信在很多面向对象的计算机教材中都能找到,我的理解是:类,是包含了一组独立功能的模块,这个模块由数据和功能组成,其中数据叫做类的属性,完成功能的部分叫做类的方法。我认为类的优点是:类完全可以由张三进行设计,李四可以拿来直接使用,在使用的时候,李四不需要知道类是如何设计、如何实现的,只要知道:这个类可以实现什么样的功能,这个类包含有什么样的方法和属性就可以了。更加重要的是,类还可以进行继承,就像父亲亡故,儿子继承了父亲所有的财产一样,如果我们发现某个类A已经完成了我们需要的大部分功能,我们再去重新设计一个新类来完成我们所有的功能,未免费时费力,根据类可以继承的特性,我们只要声明一个类继承了类A,然后按照需要添加需要的新的数据元素、扩展现有的功能模块,相信工作会简单很多。我看到很多书里都在说代码重用,我不是程序员,不知道所谓的代码重用具体是如何实现的,但是相信类应该在其中起了很重要的作用。
  在微软的教程中,对类从功能和继承关系上进行了详细的说明,我不再赘述,仅仅做一个摘要:
  


  任何资源如果要求WMI进行托管,至少需要两个文件:提供程序和托管对象格式 (MOF) 文件。提供程序是一个中间件,通过调用托管资源的本地 API 来响应 WMI 请求。
  每一个WMI托管的硬件和软件资源均有一个类来定义,反过来说,一个CIM类就是一个WMI托管资源的模板,而且资源的所有实例都使用这个模板。这些模板是由属性、方法和限定符组成的。这些属性、方法和限定符都定义在MOF文件中。方法和属性是我们经常遇到的,那么什么是限定符呢?限定符是关于类、属性或方法类型的附加修饰符,类是静态的、抽象的、还是关联的,属性是只读的还是可写的,方法的返回参数等,都定义在其中,那么我们如何知道某个类有那些限定符呢?如下代码可以帮助我们方便的获得类的属性、方法和限定符的信息。

Code:
strComputer = "."
strNameSpace = "root/cimv2"
strClass=inputbox("请输入你要查询的类")

Set objClass = GetObject("winmgmts://" & strComputer & _
                           "/" & strNameSpace & ":" & strClass)

WScript.Echo strClass & " 的类限定信息如下:"
WScript.Echo "------------------------------"
i = 1
For Each objClassQualifier In objClass.Qualifiers_
      If VarType(objClassQualifier.Value) = (vbVariant + vbArray) Then    '常数 VBVariant 只与 VBArray 一起返回,以表明 VarType 函数的参数是一个 Variant 类型的数组。
          strQualifier = i & ". " & objClassQualifier.Name & " = " & _
                                    Join(objClassQualifier.Value, ",")
      Else
          strQualifier = i & ". " & objClassQualifier.Name & " = " & _
                                    objClassQualifier.Value
      End If
      WScript.Echo strQualifier
      strQualifier = ""
      i = i + 1
Next

WScript.Echo
WScript.Echo strClass & " 类的属性和属性限定信息"
WScript.Echo "-------------------------------------------------"
i = 1 : j = 1
For Each objClassProperty In objClass.Properties_
      WScript.Echo i & ". " & objClassProperty.Name
      For Each objPropertyQualifier In objClassProperty.Qualifiers_
          If VarType(objPropertyQualifier.Value) = (vbVariant + vbArray) Then
              strQualifier = i & "." & j & ". " & _
                             objPropertyQualifier.Name & " = " & _
                             Join(objPropertyQualifier.Value, ",")
          Else
              strQualifier = i & "." & j & ". " & _
                             objPropertyQualifier.Name & " = " & _
                             objPropertyQualifier.Value
          End If
          WScript.Echo strQualifier
          strQualifier = ""
          j = j + 1
      Next
      WScript.Echo
      i = i + 1 : j = 1
Next

WScript.Echo
WScript.Echo strClass & " 类的方法和方法限定信息"
WScript.Echo "-------------------------------------------------"
i = 1 : j = 1
For Each objClassMethod In objClass.Methods_
      WScript.Echo i & ". " & objClassMethod.Name
      For Each objMethodQualifier In objClassMethod.Qualifiers_
          If VarType(objMethodQualifier.Value) = (vbVariant + vbArray) Then
              strQualifier = i & "." & j & ". " & _
                             objMethodQualifier.Name & " = " & _
                             Join(objMethodQualifier.Value, ",")
          Else
              strQualifier = i & "." & j & ". " & _
                             objMethodQualifier.Name & " = " & _
                             objMethodQualifier.Value
          End If
          WScript.Echo strQualifier
          strQualifier = ""
          j = j + 1
      Next
      WScript.Echo
      i = i + 1 : j = 1
Next
如果我们执行上述代码来查找win32_service类的限定符,一般情况下可以得到如下信息:
win32_service 的类限定信息如下:
------------------------------
1. dynamic = True
2. Locale = 1033
3. provider = CIMWin32
4. SupportsUpdate = True
5. UUID = {8502C4D9-5FBB-11D2-AAC1-006008C78BC7}

win32_service 类的属性和属性限定信息
------------------------------------------------------
1. AcceptPause
1.1. CIMTYPE = boolean
1.3. read = True
……
win32_service 类的方法和方法限定信息
-------------------------------------------------
1. StartService
1.1. MappingStrings = Win32API|Service Functions|StartService
1.2. Override = StartService
1.3. ValueMap = 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,..
……
  返回的信息很多,我省略了其中的绝大部分,只保留了一部分典型的来说明我们应该如何读懂类的限定信息。
  返回信息的第一部分表明了对于此类的限定信息:
  1. dynamic = True    Abstract——抽象类,Dynamic——动态类,Association——关联类,表明win32_service类是动态类。
  2. Locale = 1033      代表着区域设置或者叫本地化编码,是一组与用户的语言、国家/地区以及文化传统有关的用户首选信息,确定诸如:键盘布局、字母的排序顺序,以及日期、时间、数字、货币等的格式,一般不用管它。
  3. provider = CIMWin32    Provider代表的是类的提供程序,说明win32_service类是由CimWin32.dll提供的。
  4. SupportsUpdate = True    指出类是否支持实例的修改。
  5. UUID = {8502C4D9-5FBB-11D2-AAC1-006008C78BC7}    代表本地计算机上的全球通用唯一的标识符,我不知道有什么用处。
  
  返回信息的第二部分代表了类的属性限定符
  1. AcceptPause
  这第一行表明检索到的类的属性名是:AcceptPause
  1.1. CIMTYPE = boolean    CIMType代表属性的数据类型,说明这个属性是布尔型。
  1.3. read = True     read代表属性可读,而Write则代表属性的值是否可以修改,如果属性没有定义Write限定符,代表什么意思呢?它代表从该类获得的实例的那个属性是不可以改写的,也就是说不能给这个属性赋值。这其实解决了一个困惑我很久的一个问题,为什么我在对很多类的属性进行了赋值后,用Put_方法对修改进行了提交,可是事实上却什么也没有改变。此外还有Key限定符指出该属性是类的键,用于识别在相同资源集合中的托管资源的唯一实例。
  
  返回信息的第三部分代表了类的方法及方法的限定符。现在我们能用到的还不多,就不介绍了,有兴趣的朋友可以参照:http://msdn2.microsoft.com/en-us/library/aa393650.aspx
  需要说明的是,不是在每一个类定义或者属性、方法定义中,这所有的限定符都要出现的,可能只出现了其中的一部分。
  当然,我们也可以从system32/wbem/cimwin32.mof以及system32/wbem/cimwin32.mfl两个文件中读取整个托管资源的类定义和类描述,以及对每个类的属性、方法和限定符的描述,其中包含的信息很多,也包含了更多的类限定符,阅读起来有一定的难度。将上面的例子的代码和vbsedit中包含的Object Browser联合起来,可以得到我们需要的绝大部分的信息。

 

wmi入门

什么是 WMI? WMI最初于 1998 年作为一个附加组件与 Windows NT 4.0 Service Pack 4 一起发行,是内置在 Windows 2000、Windows XP 和 W...
  • qq_16072507
  • qq_16072507
  • 2017年02月10日 15:20
  • 454

WMI 的攻击,防御与取证分析技术之攻击篇 原文出自【比特网】,转载请保留原文链接:http://sec.chinabyte.com/353/13607853.shtml

WMI 的攻击,防御与取证分析技术之攻击篇 原文出自【比特网】,转载请保留原文链接:http://sec.chinabyte.com/353/13607853.shtml 0x00 WMI 简...
  • thanklife
  • thanklife
  • 2017年06月28日 17:55
  • 378

WMI 的攻击,防御与取证分析技术之攻击篇

译者注:本文之前在 乌云 Drops 发表过,鉴于后续有不少同行找我讨论过 WMI 相关的一些安全问题,所以借 threathunter 的宝地(也算是对 iswin 大哥的一点支持 :D ),再发一...
  • qq_27446553
  • qq_27446553
  • 2017年06月24日 19:01
  • 453

WMI Backdoor

WMI Backdoor 三好学生 · 2015/09/01 10:47 0x00 前言 上篇介绍了如何通过powershell来实现WMI attacks,这次接着介绍一些进阶WM...
  • citelao
  • citelao
  • 2016年03月21日 22:30
  • 257

用WMI实现Windows系统自动管理

  与以前的操作系统相比,Windows 2K/XP的优点之一是具有更好的可管理性。例如它支持Windows 2000服务器终端服务下的远程管理模式,支持Microsoft管理控制台(MMC),再有一...
  • xxxluozhen
  • xxxluozhen
  • 2009年11月09日 21:17
  • 1515

JavaWeb开发之四:servlet技术

一、Servlet简介   Servlet是sun公司提供的一门用于开发动态web资源的技术。   Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Ja...
  • mhx5201314
  • mhx5201314
  • 2016年03月19日 19:27
  • 134

◎WMI轻松入门之二

解析类定义在上一篇文章中我们说过,WMI中用类对托管资源进行抽象定义和和管理,那么,什么是类?类的定义相信在很多面向对象的计算机教材中都能找到,我的理解是:类,是包含了一组独立功能的模块,这个模块由数...
  • jinghaianlange
  • jinghaianlange
  • 2007年07月21日 22:29
  • 1179

漫谈ELK在大数据运维中的应用

圈子里关于大数据、云计算相关文章和讨论是越来越多,愈演愈烈。行业内企业也争前恐后,群雄逐鹿。而在大数据时代的运维挑站问题也就日渐突出,任重而道远了。本文旨在针对复杂的大数据运维系统推荐一把利器,达到抛...
  • lively1982
  • lively1982
  • 2016年02月17日 10:14
  • 17302

主流编程语言的特点以及优缺点(二)

C#(C sharp) 设计目标 C#旨在设计成为一种“简单、现代、通用”,以及面向对象的程序设计语言,此种语言的实现,应提供对于以下软件工程要素的支持:强类型检查、数组维度检查、未初始化的变量引...
  • zhangsj2016
  • zhangsj2016
  • 2016年12月03日 13:35
  • 1352

◎WMI轻松入门之一

一、基本概念其实我给文章起这样的名字,绝对没有轻视WMI的意思,事实上就连微软也有“WMI非常难于学习而且更难于使用”的说法,在近日的学习过程中更感觉到了WMI检索功能的强大,之所以起个“轻松入门”的...
  • jinghaianlange
  • jinghaianlange
  • 2007年07月17日 10:10
  • 2087
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:◎WMI轻松入门之四——解析类定义
举报原因:
原因补充:

(最多只允许输入30个字)