




已阅读5页,还剩49页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Windows系统编程实用教程 授课教师 职务 第12章WMI编程 课程描述WMI是Windows的核心组件 通过编写WMI脚本和应用程序可以获取计算机系统 软件和硬件信息 还可以对计算机进行管理 比如关机 重新启动计算机等 本章将介绍WMI编程当前相关技术 本章知识点 12 1WMI技术基础12 2WMI编程方法 12 1WMI技术基础 12 1 1什么是WMI12 1 2WMI体系结构12 1 3WMI测试器12 1 4WMI查询语言 WQL 12 1 1什么是WMI WMI WindowsManagementInstrumentation Windows管理规范 是Windows的一项核心技术 它以CIMOM CommonInformationModelObjectManager 公共信息模型对象管理器 为基础 是一个描述Windows操作系统构成单元的对象数据库 使用WMI技术的方式通常包括以下3种 通过WMI测试器工具对系统进行查询和管理 关于WMI测试器工具的具体使用方法将在12 1 4小节介绍 编写WMI脚本实现自动任务管理 通过C 程序接口 NET类等方法编写应用程序获取和管理Windows操作系统中的对象信息 12 1 2WMI体系结构 1 WMI脚本 WMI脚本是用户使用VBScript Jscript语言编写的 用于访问WMI的程序 2 WMI基础结构 中间层是WMI基础结构 它由4个主要组件构成 即WMI脚本库 公共信息模型对象管理器 CommonInformationModelObjectManager CIMOM 公共信息模型 CommonInformationModel CIM 储存库和WMI提供程序 这些组件的具体情况将在稍后介绍 3 WMI脚本库 WMI脚本库为开发WMI脚本提供了一系列的对象 可以使用它们来访问和管理WMI托管资源 无论托管资源是计算机 事件日志 操作系统 进程 服务或者用户选择的其他资源 WMI脚本库中的对象都以相同的方式工作 WMI脚本库可以完成下面7种基本任务 获取WMI托管资源的实例 读取WMI托管资源的属性 修改WMI托管资源的属性 调用WMI托管资源的方法 在WMI托管资源中创建一个新的实例 在WMI托管资源中删除一个实例 订阅对WMI托管资源进行创建 修改和删除的事件 4 公共信息模型 CIM CommonInformationModel 公共信息模型 是一个与具体实现无关的 用于描述管理信息的概念性模型 它由核心模型 公共模型和扩展模型三层构成 核心模型是一系列类 连接和属性的集合 该对象组提供了所有管理域通用的基本信息模型 公共模型提供特定管理域的通用信息模型 这些特定的管理域包括系统 应用程序 网络和设备等 扩展模型代表通用模型的特定技术扩展 CIM类通常表示动态资源 也就是说 资源的实例并不存储在CIM中 而是通过基于使用者请求的提供程序动态检索 类被分组到命名空间中 命名空间是表示一个特定的管理区域的类逻辑组 命名空间root cimv2包括大部分通常与计算机和操作系统相关联的资源类 例如 Win32 LogicalMemoryConfiguration Win32 Service和Win32 NTLogEvent等类都驻留在命名空间root cimv2中 它们只是在CIM中定义的数百个类中的3个 5 公共信息模型对象管理器 CIMOM CommonInformationModelObjectManager 公共信息模型对象管理器 是一个描述操作系统构成单元的对象数据库 为MMC MicrosoftManagementConsole 微软管理控制台 和脚本程序提供了一个访问操作系统构成单元的公共接口 除此之外 CIMOM还向WMI提供下面的核心服务 提供注册 WMI利用CIMOM提供注册位置和功能信息 此信息存储在CIM储存库中 请求传送 CIMOM使用提供程序注册信息 将使用者请求传送到合适的提供程序 远程访问 使用者通过连接到远程系统上的CIMOM访问启用WMI的远程系统 一旦连接建立 使用者可以执行与在本地可以执行的操作相同的操作 安全性 在本地计算机或是远程计算机上 允许用户在连接到WMI之前验证每个用户的访问标记 CIMOM控制对WMI托管资源的访问 WMI并不覆盖或阻止由操作系统提供的安全性 查询处理 允许使用者使用WMI查询语言 WMIQueryLanguage WQL 发出关于任何WMI托管资源的查询 CIMOM只在提供程序本身不支持查询操作的情况下执行查询计算 事件处理 允许使用者订阅表示对WMI托管资源更改的事件 例如 可以订阅一个事件 表明逻辑磁盘驱动器上的空间何时下降到可接受的阈值 CIMOM按一个指定的间隔轮询托管资源 并在满足订阅条件时生成一个事件通知 6 WMI提供程序 WMI提供程序在WMI和托管资源之间扮演着中间方的角色 提供程序代表用户应用程序和脚本从WMI托管资源请求信息 并发送指令到WMI托管资源 WMI提供程序通常以DLL文件的方式保存在 SystemRoot system32 wbem目录下 Windows2000 WindowsXP和WindowsServer2003等操作系统都提供内置的WMI提供程序 7 托管资源 托管资源是任意逻辑或物理组件 通过使用WMI进行公开和管理 可以使用WMI管理的Windows资源包括计算机系统 磁盘 外围设备 事件日志 文件 文件夹 文件系统 网络组件 操作系统子系统 性能计数器 打印机 进程 注册表设置 安全性 服务 共享 SAM用户和组 ActiveDirectory Windows安装程序 Windows驱动程序模式 WDM 设备驱动程序以及SNMP管理信息基数据 MIB 等 WMI托管资源通过WMI提供程序与WMI服务通讯 12 1 3WMI测试器 WMI测试器是能够与WMI基础结构进行交互的图形化工具 可以使用它来浏览CIM架构并检查托管资源类的定义 在命令窗口中执行wbemtest exe 可以打开WMI测试器工具 如图12 4所示 此时 窗口中大部分按钮都是被禁用的 这说明此时还没有连接到WMI 连接 对话框 单击 连接 按钮 打开 连接 对话框 如图12 3所示 连接后的WMI测试器 查看root cimv2命名空间下的所有CIM类 单击 枚举类别 按钮 打开 超类别信息 对话框 如图12 7所示 在该对话框中可以查看到指定名称空间中的类信息 如果要查看名称空间root cimv2中包含的所有CIM类 则不输入超类别名称 然后选择 递归 单选按钮 单击 确定 按钮 如图12 8所示 CIM类的对象编辑器 双击一个类 可以打开对象编辑器 查看该类的限定符 属性和方法 如图12 9所示 执行下面的WQL语句 在WMI测试器的主窗口中单击 查询 按钮 可以打开 查询 对话框 如图12 10所示 执行下面的WQL语句可以查询类Win32 Process中的数据 SELECT FROMWin32 Process WQL语句的查询结果 12 1 4WMI查询语言 WQL WQL WMIQueryLanguage WMI查询语言 可以使用SQL语句的方式来访问WMI实例 查询指定类的数据 WMI查询语句的格式如下 SELECTFROMWHERE关于WMI中常用类的具体情况将在附录2中结合实例介绍 12 2WMI编程方法 12 2 1COM和接口12 2 2为WMI应用程序初始化COM环境12 2 3获取到WMI的IWbemLocator对象12 2 4连接到指定的计算机12 2 5设置WMI连接的安全属性12 2 6执行查询操作12 2 7执行CIM类的方法 12 2 1COM和接口 1 组件对象和接口2 标识符 GUID 3 接口派生4 创建COM对象5 销毁对象 1 组件对象和接口 组件对象和接口是COM的核心要素 它们都是基于面向对象程序设计思想的 组件对象与C 对象相似 都是由属性和方法组成 是一个实体对象 可以实现接口中定义的操作 接口是一种特殊的C 类 其中只定义了一些虚拟成员函数 没有成员变量 也没有非虚拟的成员函数 所谓虚拟函数是指只定义了函数的原型 但没有具体实现代码的函数 接口不用于实现具体的功能 它可以为一组类定义它们的共性操作 例12 1 以接口IUnknown为例 来说明接口的基本概念 假定COM对象IUnknown的声明代码如下 classIUnknown public virtuallong stdcallQueryInterface constGUID 2 标识符 GUID 在COM中 使用标识符 GUID 来唯一标识一个COM对象 接口或者其他COM元素 在C 中 GUID表现为结构体的形式 代码如下 typedefstruct GUID DWORDData1 WORDData2 WORDData3 BYTEData4 8 GUID 参数说明如下 Data1 指定8位16进制数 Data2 指定第1组4位16进制数 Data3 指定第2组4位16进制数 Data4 8个元素的字节数组 前2个字节包含第3组4位16进制数 其余6个字节包含最后12位16进制数 3 接口派生 每个COM对象都必须从接口IUnknown派生 因此每个COM对象都会继承接口IUnknown的QueryInterface AddRef 和Release 函数 下面是接口IWbemLocator的定义 interfaceIWbemLocator IUnknown HRESULTConnectServer BSTRstrNetworkResource BSTRstrUser BSTRstrPassword BSTRstrLocale longlSecurityFlags BSTRstrAuthority IWbemContext pCtx IWbemServices ppNameSpace 使用IWbemLocator接口可以获取指定计算机上WMI的IWbemServices接口的初始命名空间 因此IWbemLocator对象又被称为定位器对象 可以通过IWbemServices接口访问WMI服务 IWbemLocator接口包含4个函数 即QueryInterface AddRef Release 和ConnectServer 4 创建COM对象 HRESULTCoCreateInstance inREFCLSIDrclsid inLPUNKNOWNpUnkOuter inDWORDdwClsContext inREFIIDriid outLPVOID ppv 例12 3 下面是创建IWbemLocator对象的示例代码 IWbemLocator locator HRESULThr CoCreateInstance CLSID WbemLocator NULL CLSCTX INPROC SERVER IID IWbemLocator PVOID 5 销毁对象 每个COM对象都有一个参考计数 当不再使用COM对象时 应该调用Release 函数减少其参考计数值 当计数值为0时 系统将删除该对象 例12 4 下面是创建和销毁IWbemLocator对象的示例代码 IWbemLocator locator HRESULThr CoCreateInstance CLSID WbemLocator NULL CLSCTX INPROC SERVER IID IWbemLocator PVOID 12 2 2为WMI应用程序初始化COM环境 1 为WMI应用程序初始化COM参数2 初始化COM的安全级别 1 为WMI应用程序初始化COM参数 除了分配内存空间的函数外 应用程序在调用其他COM库函数之前 必须首先要调用CoInitializeEx 函数 CoInitializeEx 函数的原型如下 HRESULTCoInitializeEx LPVOIDpvReserved DWORDdwCoInit 例12 5 下面是使用CoInitializeEx 函数初始化COM库的示例代码 HRESULThr hr CoInitializeEx 0 COINIT MULTITHREADED if FAILED hr cout FailedtoinitializeCOMlibrary Errorcode 0 x hex hr endl returnhr 2 初始化COM的安全级别 如果需要修改默认的安全设置 可以调用CoInitializeSecurity 函数 CoInitializeSecurity 函数的原型如下 HRESULTCoInitializeSecurity PSECURITY DESCRIPTORpVoid LONGcAuthSvc SOLE AUTHENTICATION SERVICE asAuthSvc void pReserved1 DWORDdwAuthnLevel DWORDdwImpLevel SOLE AUTHENTICATION LIST pAuthList DWORDdwCapabilities void pReserved3 例12 6 下面是使用CoInitializeSecurity 函数设置COM安全级别的示例代码 hr CoInitializeSecurity NULL 安全描述符 1 则COM来处理认证服务NULL 认证服务数组NULL 保留RPC C AUTHN LEVEL DEFAULT 代理的默认认证级别RPC C IMP LEVEL IMPERSONATE 代理的默认模拟级别NULL 认证信息EOAC NONE 客户端或者服务器的附加能力NULL 保留if FAILED hr cout Failedtoinitializesecurity Errorcode 0 x hex hr endl CoUninitialize returnhr Programhasfailed 12 2 3获取到WMI的IWbemLocator对象 请求WMI服务的客户端首先需要调用CoCreateInstance 或CoCreateInstanceEx 函数获取IWbemLocator对象 CoCreateInstance 函数的原型如下 STDAPICoCreateInstance REFCLSIDrclsid LPUNKNOWNpUnkOuter DWORDdwClsContext REFIIDriid LPVOID ppv 例12 7 下面是调用CoCreateInstance 函数初始化IWbemLocator对象的示例代码 IWbemLocator pLoc 0 获取的IWbemLocator对象HRESULThr CLSID WbemLocator是一个GUID 称为类标识符 它标识一种或一类COM对象 CLSCTX INPROC SERVER指定管理对象的服务器类型hr CoCreateInstance CLSID WbemLocator 0 CLSCTX INPROC SERVER IID IWbemLocator LPVOID 程序失败 12 2 4连接到指定的计算机 调用IWbemLocator ConnectServer 函数可以获取指定计算机上root cimv2命令空间上的IWbemService对象的指针 连接的计算机可以是本地计算机 也可以是远程计算机 IWbemLocator ConnectServer 函数的语法如下 HRESULTConnectServer constBSTRstrNetworkResource constBSTRstrUser constBSTRstrPassword constBSTRstrLocale LONGlSecurityFlags constBSTRstrAuthority IWbemContext pCtx IWbemServices ppNamespace 例12 8 假定pLoc是已经创建的IWbemLocator对象 则下面的代码用于连接到计算机COMPUTERNAME的root cimv2命名空间 hres pLoc ConnectServer bstr t L COMPUTERNAME root cimv2 bstr t useToken NULL pszName 用户名 bstr t useToken NULL pszPwd 密码NULL 地域NULL 安全标识 bstr t useNTLM NULL pszAuthority AuthorityNULL 上下文对象 Programhasfailed 12 2 5设置WMI连接的安全属性 HRESULTCoSetProxyBlanket inIUnknown pProxy inDWORDdwAuthnSvc inDWORDdwAuthzSvc in optOLECHAR pServerPrincName inDWORDdwAuthnLevel inDWORDdwImpLevel in optRPC AUTH IDENTITY HANDLEpAuthInfo inDWORDdwCapabilities 12 2 6执行查询操作 HRESULTExecQuery constBSTRstrQueryLanguage constBSTRstrQuery LONGlFlags IWbemContext pCtx IEnumWbemClassObject ppEnum Next 函数 HRESULTNext LONGlTimeOut ULONGuCount IWbemClassObject ppObjects ULONG puReturned IWbemClassObject Get 函数 IWbemClassObject对象相当于查询结果中的一条记录 调用IWbemClassObject Get 函数可以获取记录中每个字段的值 函数原型如下 HRESULTGet LPCWSTRwszName LONGlFlags VARIANT pVal CIMTYPE pvtType LONG plFlavor 例12 9 下面是调用WQL语句获取本地计算机BIOS信息的示例代码 pSvc是已经连接到WMI实例 并且已经设置了安全属性的IWbemServices对象 IWbemServices pSvc 用于连接WMIIWbemLocator pLoc 定位器HRESULThres pSvc NULL pLoc NULL 1 初始化COMhres CoInitializeEx 0 COINIT MULTITHREADED if FAILED hres printf 初始化COM库失败 returnfalse 接上 2 设置安全级别hres CoInitializeSecurity NULL 1 COM身份认证NULL 认证服务器NULL 保留RPC C AUTHN LEVEL DEFAULT 默认认证方式RPC C IMP LEVEL IMPERSONATE 默认模拟级别NULL 认证信息EOAC NONE 附加能力NULL 保留 接上 if FAILED hres 接上 4 连接到WMIpSvc NULL hres pLoc ConnectServer bstr t root cimv2 WMI命名空间的对象路径NULL 用户名NULL 密码0 地域NULL 安全标
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公司码头防污染管理制度
- 两地办公司车辆管理制度
- 央企子公司食堂管理制度
- 日本城市保洁管理制度
- 变电站土建维护管理制度
- 公司员工饮用水管理制度
- 移动数据采集器管理制度
- 公司团队大巴车管理制度
- 大厦出入口人脸管理制度
- 江苏企业绩效管理制度
- 声波检测报告
- 2023年国考真题(附答案)
- 个案工作知识点隋玉杰主编
- 乙状结肠癌护理查房
- 2022年高考真题及答案解析《历史、地理、政治》(广东卷)
- 信息素养通识教程:数字化生存的必修课(中山大学)超星尔雅学习通网课章节测试答案
- 朗文4B 复习提要及朗文4B单词及句子
- TSGD0012023年压力管道安全技术监察规程-工业管道(高清晰版)
- 运动控制系统阮毅陈维钧课后答案清华大学出版社
- 光伏电站项目工程资料清单
- YY/T 0003-1990病床
评论
0/150
提交评论