




已阅读5页,还剩90页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于WMI的WindoWs远程监控(VC+)毕业设计目 录摘要IAbstractII第1章绪论11.1课题背景与选题依据11.2WMI管理计算机的优点21.3脚本方法理论41.4本课题的主要内容5第2章使用脚本语言实现基于WMI的Windows监控72.1通过VBScript实现72.1.1VBScript简介72.1.2编辑本段属性、方法和事件82.1.3对象与类82.2VIsual Basic 的局限性92.3基于WMI的计算机管理技术的实现102.3.1使用WMI获取远程计算机信息102.3.2使用WMI远程控制计算机112.4本章小结13第3章VC+实现WMI监控153.1VC+简介153.2通过VC+访问WMI相关组件173.3实现监控的整体设计思路193.4VC+实现获取远程计算机的软硬件信息223.5VC+实现控制远程计算机253.6通过MFC显示所取数据253.6.1MFC简介253.6.2MFC界面显示数据303.7MFC界面控制远程计算机333.8本章小结34结论35参考文献37致谢39附录1开题报告41附录2文献综述47附录3中期报告57附录4外文翻译67附录5相关程序81IError! No text of specified style in document.第1章绪论1.1课题背景与选题依据计算机系统管理的标准化最近成为业内人士关注的重点。这一现象并不令人意外,因为对这样的标准来说,一经建立和接纳,便会牵扯到所有人的利益。针对各类基础结构,程序员可以采用“插件”的形式,开发出能重复使用的软件组件。最终用户可享受到越来越高的可靠性,同时不会由于频繁的升级、维护或者不可预期的当季时间而影响工作效率。管理者可利用它有效的缩短自己的总体成本,最后,系统管理员和IT人员可从一个位置部署,配置和检测数百台计算机无论他们的配置或操作系统是什么。因此,这些人可以从以往繁重的工作中脱离出来,在缩短工作时间的同时,轻松地完成自己的任务1。微软一直都在努力地使Windows操作系统易于管理,这是通过集中不同的策略来实现的。目前在Windows NT 4.0 Option Pack中采用了Windows Script Host 以来,脚本功能得到了显著改进。1994年,微软发布了版本号为1.0的Systems Management Server,它提供了硬件和软件库存、软件分布发布以及远程诊断功能。Zero Administration Initiative for Windows(Windows 零管理,ZAW)不仅把这两种功能合为一体,同时还合并了一些其他技术(如微软管理管理控制台、Windows管理规范、基于Web的企业管理、系统策略和零管理包等)。ZAW最初面向的是WindowsNT/9x操作系统,允许实现自动化管理任务,并可对客户机的桌面进行集中式管理。后来Systems Management Server 2.0 进一步增强了这些特性。随着Windows2000的问世,微软采取个积极的手段开发出高效的管理策略。根据下面这几个设计好的目标,Windows2000成为其中主要的支持平台:管理同活动目录服务的集成。将.NET企业服务器(SQL Server 2000、Exchange Server 2000 和BizTalk Server 2000)包括到管理范畴内。将XML(可扩张标记语言)和SOAP(简单的对象访问协议)规范作为交换管理数据的标准方法使用。要实现这些目标,就必须对Windows零管理(ZAW)进行扩展,加入Windows2000基本结构的核心元素,比如IntelliMirror(智能镜像)、Active Directory(活动目录)和基于Web的企业管理组(WBEM)。目前有明显的趋势可以证明,在下一个版本的Windows中,必然会提供对这个策略的支持。Windows管理设备必然成为.NET方案的管理基础。另外,微软也允许第三方软件开发商支持该结构产品。此外,微软还成立了Microsoft Management Alliance(微软管理联盟),目的是帮助其他厂商构建相应的产品来支持新结构。业内其他竞争者也没有放慢自己的脚步。Unicenter(来自CA国际公司)和Enterprise(来自Tivoli Systems 公司)均为十分成熟的产品,支持多平台上的管理功能。NetIQ 的Operations Manageer(已获微软授权)能在Windows系统上提供实时的性能管理与监视。对那些预算吃紧的小公司来说,即便在这些“精简”方案面前,他们的费用也通常超出了能够接受的限度。即使在较大的公司里,对管理控制台的访问都是由一个中心的IT小组小心的看管着,极少被纳入日常的管理任务中。幸运的是,我们还有一个备用方案可供使用。“专业”管理工具提供的大多数特性其实都可通过一系列相对简单的脚本来实现。其中要用到的核心组件(它提供了所需的功能)便是WMI。WMI是Windows 2000 以及Windows.NET的一种内建服务,这证明了微软试图将WMI作为自己管理策略的一个密不可分的部分提供给用户。WMI也可在其他Win32平台上使用,同时可作为加载项或免费工具下载2。WMI(Windows Management Instrumentation,Windows 管理规范)是一项核心的 Windows 管理技术;用户可以使用 WMI 管理本地和远程计算机。1.2WMI管理计算机的优点通常,WMI可提供三种类型的管理功能:数据收集访问来自不同来源(操作系统、性能计数器、事件日志、注册表、硬件、驱动程序和目录服务)的系统信息。这些信息可针对资源管理进行分析与总结,以便创建性能能基准,进行可用性分析(为实现所需的服务级别)或进行安全方面的跟踪。系统配置通过一种集中化的方式来修改系统信息,其中包括操作进程、服务和软件组件,进行系统维护或升级,以及执行作业,等等。事件管理被检视系统组件的属性一旦发生改变,可以及时知道。这种侦测既可以通知作为基础(发生时再通知),也可以时间间隔作为基础(定时通知)。在主动和被动解决问题。错误隔离。控制系统可用性和系统健康监视过程中,这一功能是十分有用的。WMI可以实现的功能:收集Windows性能监视器数据(比如剩余磁盘空间的百分比,处理器利用率),对其进行总结或自动采集相应的行动(比如清除临时文件夹、Internet Explorer缓存以及终止无用进程等等)。收集Windows 事件日志条目,并定义特定的行动,针对特定事件做出响应。数据也可以进行总结,而事件日志可进行清空备份处理。查询被管理系统的不同特征,比如操作系统版本、NetBIOS名称、与成员、物理和逻辑盘、交换文件信息、日期和时间设置等等。启动,暂停、停止、恢复和删除服务。启动、终止和查询进程。关机或重启系统。注销用户。收集与打印机和打印队列有关的信息。获取和编辑Windows注册表信息。获取和编辑目录服务信息(包括活动目录)。控制网络配置(显示和修改路由表、网卡协议设置的内容)。访问WDM设置驱动程序信息。相同的脚本可同时应用在本地和远程系统中(要提供足够的许可权限)。本论文主要展示几种不同的方法来访问WMI,如VBScript脚本,VC+和其他Windows组件对象模型提供的功能上面。1.3脚本方法理论Visual Basic脚本版(VBScript)是本次毕设学习阶段采用的脚本语言。和Windows管理员为自动化任务而使用的WindowsNT命令相比它的功能较强,足够达到我们的目的。Windows Script Host(WSH)将用于提供脚本编制环境。利用WSH,能访问Windows COM对象。WMI用于提供对管理数据的访问。在Windows Script Host 2.0 中引入的可扩展标记语言(XML)特性,用于提供辅助脚本格式。XML和WSH 2.0 的联合使用并不一定是必需的。但是遵守XML规范任然是有好处的3。从概念上说,大多数脚本中沿用的基本思想都是相当简单的。需要的数据有WMI提供,不必过分操心这些数据时如何生成的,它的生成流程会进一步解释,将利用由Windows Script Host和WMI对象模型提供的技术来访问它。有了一定程度的熟悉后,将利用VBScript中的一系列命令来处理它,并生成自己需要的结果。脚本连接WMI,获取WMI管理资源,然后返回资源属性。唯一改变的是类名(即,Win32_LogicalMemoryConfiguration, Win32_Service和 Win32_NTLogEvent)和资源的相应属性。三步骤对WMI脚本是通用的。下面仔细考察每一个步骤。Step 1: 连接WMI Service任何脚本的第一个步骤就是与目标电脑上的Windows管理服务建立连接。连接本地或远程电脑的WMI很简单,调用VBScript的Getobject函数,其参数为WMI脚本库的标记名(即winmgmts:)和目标电脑名 用这种方式连接WMI,会返回对SWbemServices对象的引用,在Listings 1, 2和3中用变量名wbemServices引用。SWbemServices是在WMI脚本库中定义的。WMI脚本库提供通用功能对象集,脚本使用他们来访问WMI infrastructure。一旦引用了SWbemServices 对象,就可以调用SWbemServices提供的任何方法。InstancesOf就是这样一种方法Step 2: 获取WMI管理资源不可否认,第二步绝大程度上取决于要执行的任务。在获取有关WMI管理资源的信息时,第二步很简单,调用SWbemServices对象的InstancesOf方法。如同名字暗示的那样,InstancesOf 返回所有的由资源类名标识的管理资源。InstancesOf按SWbemObjectSet集合的方式返回请求的资源。再Listing 1,2和3中,使用变量名wbemObjectSet来引用。SWbemObjectSet是WMI脚本库定义的另外一个脚本对象 Step 3: 显示WMI管理资源的属性最后一步是列举SWbemObjectSet 集合的内容。SWbemObjectSet 内的每一项是一个 SWbemObject (WMI脚本库的对象),他表示请求资源的单个实例。可以使用SWbemObject 来访问管理资源类定义中定义的方法和属性。1.4本课题的主要内容本文共分为3章,课题的结构安排如下:第章中结合课题背景与国内外WMI Windows管理研究现状分析课题的选题依据,以研究意义等,同时对WMI技术做简单的介绍。第2章从VBScript脚本理论方面叙述WMI管理Windows计算机的原理,同时根据原理,介绍课题基于WMI的Windows计算机远程监控整体思路与远程监控设计。第3章首先简单介绍VC+编程,以及课题所涉及的计算机管理等内容,然后按课题进展,模块化设计思想,介绍mfc界面实现远程监控与程序编写。最后用VC+实现远程监。91第2章使用脚本语言实现基于WMI的Windows监控2.1通过VBScript实现2.1.1VBScript简介VB的中心思想就是要便于程序员使用,无论是新手或者专家。VB使用了可以简单建立应用程序的GUI系统,但是又可以开发相当复杂的程序。VB的程序是一种基于窗体的可视化组件安排的联合,并且增加代码来指定组件的属性和方法。因为默认的属性和方法已经有一部分定义在了组件内,所以程序员不用写多少代码就可以完成一个简单的程序。过去的版本里面VB程序的性能问题一直被放在了桌面上,但是随着计算机速度的飞速增加,关于性能的争论已经越来越少。 窗体控件的增加和改变可以用拖放技术实现。一个排列满控件的工具箱用来显示可用控件(比如文本框或者按钮)。每个控件都有自己的属性和事件。默认的属性值会在控件创建的时候提供,但是程序员也可以进行更改。很多的属性值可以在运行时候随着用户的动作和修改进行改动,这样就形成了一个动态的程序4。举个例子来说:窗体的大小改变事件中加入了可以改变控件位置的代码,在运行时候每当用户更改窗口大小,控件也会随之改变位置。在文本框中的文字改变事件中加入相应的代码,程序就能够在文字输入的时候自动翻译或者阻止某些字符的输入。 VB的程序可以包含一个或多个窗体,或者是一个主窗体和多个子窗体,类似于操作系统的样子。有很少功能的对话框窗口(比如没有最大化和最小化按钮的窗体)可以用来提供弹出功能。VB的组件既可以拥有用户界面,也可以没有。这样一来服务器端程序就可以处理增加的模块。 VB使用参数计算的方法来进行垃圾收集,这个方法中包含有大量的对象,提供基本的面向对象支持。因为越来越多组件的出现,程序员可以选用自己需要的扩展库。和有些语言不一样,VB对大小写不敏感,但是能自动转换关键词到标准的大小写状态,以及强制使得符号表入口的实体的变量名称遵循书写规则。默认情况下字符串的比较是对大小写敏感的,但是可以关闭这个功能。VB使得大量的外界控件有了自己的生存空间。大量的第三方控件针对VB提供。VB也提供了建立、使用和重用这些控件的方法,但是由于语言问题,从一个应用程序创建另外一个并不简单。 2.1.2编辑本段属性、方法和事件在 Visual Basic 中,可以通过属性、方法和事件来说明和衡量一个对象的特征。1)、事件(Event) 事件是指发生在某一对象上的事情。事件又可分为鼠标事件和键盘事件。例如,在命令按钮(Command Button)这一对象上可能发生鼠标单击(Click)、鼠标移动(Mouse Move)、鼠标按下(Mouse Down)等鼠标事件,也可能发生键盘按下(Key Down)等键盘事件。总之,事件指明了对象“什么情况下做?”,常用于定义对象发生某种反映的时机和条件。2)、方法(Method) 方法是用来控制对象的功能及操作的内部程序。例如,人具有说话、行走、学习、睡觉等功能,在visual Basic中,对象所能提供的这些功能和操作,就称作“方法” 5。以窗体为例,它具有显示(show)或隐藏(hide)的方法。总之,方法指明了对象“能做什么?”,常用于定义对象的功能和操作。3)、属性(Property) 属性是指用于描述对象的名称、位置、颜色、字体等特征的一些指标。可以通过属性改变对象的特性。有些属性可以在设计时通过属性窗口来设置,不用编写任何代码;而有些属性则必须通过编写代码,在运行程序的同时进行设置。可以在运行时读取和设置取值的属性成为读写属性,只能读取的属性成为只读属性。总之属性指明了对象“是什么样的?”,常用于定义对象的外观。 2.1.3对象与类1)、对象(Object) Visual basic 具有“面向对象”的特性,Visual Basic 应用种程序的基本单元是对象,用 Visual Basic 编程就是用“对象”组装程序。这种“面向对象”的编程方法与传统的全部用代码编制程序的方法有很大区别,就像用集成电路芯片组装电视机和用三极管,二极管组装电视机的区别一样。显然,“面向对象”的编程方法比传统的编程方法更简单,更方便,并且编写出的程序也更加稳定。因此,“对象”可以被看做 Visual Basic 程序设计的核心。 在 Visual Basic 程序设计中,对象中还可以包含头,手,腿,脚等部位,其中的每个部位又可以单独作为作为被研究的对象。在 Visual Basic 程序设计中,整个应用程序就是一个对象,应用程序中又包含着窗体(Frame),命令按钮(Command),菜单(Menu)等对象。 2)、类(Class) 在 Visual Basic 中,对象是由类创建的,因此对象可以说是类的具体实例,这就好比是蛋糕和做蛋糕的模具之间的关系。 各种不同的对象分属于各种不同的种类。同一类对象可能具有一些不同的特征(或是说同一类对象不一定具有完全相同的特性);具有某些相同的特性的对象,不一定是同一类对象,这就好比是人和猴子虽然都有身高、性别等特征,但二者之间还存在着智商、语言等特性差异,这两个对象之间的特性相差很多,根本就不能算是同一类对象。而男人和女人,虽然有着性别、生理等方面的差异,但他们绝大部分特性相同,可以算是同一种类。由此,可以归结为一句话:同一类对象的绝大部分特性相同。 2.2Visual Basic 的局限性Visual Basic 语言具有不支持继承、无原生支持多线程、异常处理不完善等三项明显缺点,使其有所局限性。(此些缺点皆已在 VB.NET 获得改进) 1)、不支持继承 VB5 和 VB6 都是基于对象的编程语言,但是不包含继承特性。VB 中提供了特殊的类的功能,但是还是不能满足程序员的需求。VB.NET 已包含了所有面向对象的特性。 2)、无原生支持多线程 Visual Basic 对于多线程无原生支持,只能通过 Windows API 的调用实现。VB.NET 已支持多线程技术。 3)、异常处理不完善 Visual Baisc 中内置异常处理,即使未写异常处理代码,一旦用户出错也会弹出一个明确写出出错原因对话框,接着程序终止。 Visual Basic 中可以使用 Err.Raise 抛出异常。对系统及用户抛出的异常的处理常用两种模式:一是使用 On Error Resume Next 处理错误;另一种是使用 On Error Goto 将运行引入错误处理代码。但相对 C+ 等语言而言,这样的异常处理破坏了代码的结构。 VB.NET 已支持更佳的异常处理机制。2.3基于WMI的计算机管理技术的实现基于结合WMI和WEB服务技术来获取远程计算机信息、远程控制计算机及具体的实现方法,其它的管理功能如监视应用程序的运行状况、管理和配置应用程序等均可采用类似的方法实现。2.3.1使用WMI获取远程计算机信息现在的计算机以及网络组成十分复杂,例如系统硬件方面就有主板、硬盘、网卡等;软件方面有操作系统、系统中安装的软件、正在运行的进程等;网络方面有域、工作组等等,对这些信息的收集和数据的处理是现代计算机管理中非常重要的任务。WMI的功能十分强大,可以管理windows的方方面面,从常见的文件操作到硬件管理,都可以通过WMI来实现。以下介绍笔者使用WMl和NET框架一起来获取远程计算机软硬件的实现方法。首先需要引入SystemManagement命名空间。在NET中,使用SystemManagement命名空间,通过对class的操作,可以查询系统软硬件的信息。此命名空间是NET框架中的WMI命名空间,它提供的类对象为访问各种管理对象提供了面向对象的编程接口,并包括下列支持WMI操作的第一级类对象:(1)ManagementObject或ManagementClass:分别为单个管理对象或类;(2)ManagementEventWatcher:用于预订来自WMI的事件通知:(3)ManagementQuery:用作所有查询类的基础;(4)ManagementObjectSearcher:用于根据指定的查询或枚举检索ManagementObject或ManagementClass对象的集合。SystemManagement类的使用编码范例对NET框架环境很适合,并且WMI在任何适当的时候均使用标准基框架。应用程序和服务可以通过使用从ManagementObjectSearcher和ManagementQuery派生的类,查询其感兴趣的管理信息(例如在磁盘上还剩多少可用空间、当前CPU利用率是多少、某一应用程序正连接到哪一数据库等等);或者它们可以通过使用ManagementEventWatcher类来预订各种管理事件。笔者在学习了上述相关理论知识后,了解在NET中如何与WMI进行通讯以便达到获取信息的目的,并着手编写了一些利用SystemManagement下面的类来获取系统相关信息的代码,在此做一些简单介绍。获取硬件信息(以下是一段获取主板的序列号以及制造商的代码):Dim searcher As New ManagementObjectSearcher(“SELECT+FROM Win32_BaseBoard”、Dim share As ManagementObjectFor Each share In searcherGet0DebugWriteLine(“主板制造商:”&share(”Manufacturer”)DebugWriteLine(“型号:”&share(”Product”)DebugWriteLine(“序列号:”&share(”SerialNumber”)1Next share此段代码同样采用WQL语句实现。同理,还可获取网卡硬件地址、硬盘ID和CPU系列号等信息,在此就不一一列举。获取软件信息(以下是一段列出所有系统当前共享目录的代码):Imports SystemManagementDim searcher As New ManagementObjectSearcher(“SELECT * FROM Win32_share”、Dim share As ManagementObjectFor Each share In searcherGet0MessageBoxShow(shareGetText(TextFormatMoO)Next share2.3.2使用WMI远程控制计算机WMI提供了大量的规范以便为许多高端应用程序(例如,Microsoft Exchange、Microsoft SQL Server和Microsoft Interact信息服务(IIS)实现几乎任何管理任务。管理员可以执行下列任务:(1)监视应用程序的运行状况;(2)检测瓶颈或故障;(3)管理和配置应用程序;(4)查询应用程序数据(使用对象关系的遍历和查询);(5)执行无缝的本地或远程管理操作。一般而言,对计算机的控制主要包括:重新启动计算机、关闭计算机、注销当前用户、启动或终止某个进程(某项服务)。使用WMI实现远程控制的最简单方法是编制WMI脚本程序然后在命令行中运行该脚本其命令格式为:Cscriptexe脚本文件名,Cscriptexe是执行脚本的宿主程序,当运行该程序时,它自动执行作为输入参数的脚本文件。通过编写WMI脚本程序来实现计算机远程控制的过程中发现编写WMI脚本的很大一部分工作涉及到读取和设置属性值,WMI脚本的语法比较简单,编制起来较容易。脚本程序在任何一个具有WSH(Windows Script Host)环境的系统中都可以运行6。由于它不依赖于特定的开发工具和运行环境因此具有良好的可移植性。只要在脚本中指定了要控制的远程计算机名,且该计算机是可访问的同时拥有远程系统的管理员权限,则在任何时候都可以对它进行远程控制。相对于传统的C/S控制模式,这种方法显得相当简单和可靠。 对比传统的C/S控制模式,我们需要能更高效地管理计算机,因此笔者又尝试在软件中实现远程控制功能,发现同样通过简单的代码既可实现,以下介绍笔者在NET环境下远程控制计算机的实现方法。以远程关闭计算机为例(VBNET编写的核心代码):Dim scope As ManagementScope=New ManagementScope (“”+RemoteHostName+“hqootCIMV2”,opfiong)/以给定的管理员帐号连接给定计算机名或者IP地址的计算机TryscopeConnect0/连接远程计算机Dim oq As SystemManagementObieetQueryoq=New SystemManagementObjectQuery(“Select+From Win32_OperatingSystem”、/调用远程计算机进行WMI操作Dim gwo As ManagementObiectSearchergwo=New ManagementObjectSearcher(scope.oq)/从已经完成远程连接的计算机中,得到WMI操作集合 Dim pwo As ManagementObiectCollectionpwo=gwoGet()/存放得到WMI操作Dim mo As ManagementObject/定义WMI操作对象 ForEach 1110 In pwoDim ssO As String 2 fIt”根据企业的作息时间,我们设置用户只能在上班时间登录网络(8:00 17:00),其他时间不能登录网络。单击组织单位名一在 建立的用户名上右击一选择属性一单击帐户选项卡一点击登录时间一我们可以设置用户允许登录的时间为8:00-7:00。点击登录到一输入计算机的名称如N01一添加一则我们可以控制该用户只能通过N01登录到网络而不能使用其它的计算机登录。2.4本章小结本章主要介绍了VB脚本语言,及其特点,以及WMI脚本理论,用VB脚本实现远程监控。VB的程序可以包含一个或多个窗体,或者是一个主窗体和多个子窗体,类似于操作系统的样子。VB的组件既可以拥有用户界面,也可以没有。这样一来服务器端程序就可以处理增加的模块。Visual Basic 语言具有不支持继承、无原生支持多线程、异常处理不完善等三项明显缺点,使其有所局限性。 基于结合WMI和WEB服务技术来获取远程计算机信息、远程控制计算机及具体的实现方法,其它的管理功能如监视应用程序的运行状况、管理和配置应用程序等均可采用类似的方法实现。WMI的功能十分强大,可以管理windows的方方面面,从常见的文件操作到硬件管理,都可以通过WMI来实现。第3章VC+实现WMI监控3.1VC+简介1)、C+组成部分根据Effective C+第三版第一条款的描述,现在C+由以下四个“子语言”组成:1、C子语言。C+支持C语言的几乎全部功能,主要是C89的部分,在语法上与C语言仅有极微妙的差别(如括号表达式的左右值性,具体请参考C+标准文献)。2、面向对象的C+语言。C+语言原本不具备面向对象的设计功能,然而随着面向对象编程的概念的提出以及如Java等语言的发展成熟,C+语言也开发出了支持面向对象功能的版本。3、泛型编程语言。C+强大(但容易失控的)模板功能使它能在编译期完成许多工作,从而大大提高运行期效率。4、STL(C+标准模板库,Standard Template Library)。随着STL的不断发展,它已经逐渐成为C+程序设计中不可或缺的部分,其效率可能比一般的native代码低些,但是其安全性与规范性使它大受欢迎。此外,包含在TR1等中的C+0x将实现的新功能在开发和测试中。2)、语言特点7C+设计成静态类型、和C同样高效且可移植的多用途程序设计语言。C+设计成直接的和广泛的支持多种程序设计风格(程序化程序设计、资料抽象化、面向对象程序设计、泛型程序设计)。C+设计成给程序设计者更多的选择,即使可能导致程序设计者选择错误。C+设计成尽可能与C兼容,籍此提供一个从C到C+的平滑过渡。C+避免平台限定或没有普遍用途的特性。C+不使用会带来额外开销的特性。C+设计成无需复杂的程序设计环境。出于保证语言的简洁和运行高效等方面的考虑,C+的很多特性都是以库(如STL)或其他的形式提供的,而没有直接添加到语言本身里。关于此类话题,Bjarne Stroustrup的C+语言的设计和演化(1994)里做了详尽的陈述。3)、优点C+在一定程度上可以和C语言很好的结合,甚至目前大多数C语言程序是在C+的集成开发环境中完成的。C+相对众多的面向对象的语言,具有相当高的性能。C+引入了面向对象的概念,使得开发人机交互类型的应用程序更为简单、快捷。很多优秀的程序框架包括MFC、QT、wxWidgets就是使用的C+。4)、争议C+由于语言本身过度复杂,这甚至使人类难于理解其语义。更为糟糕的是C+的编译系统受到C+的复杂性的影响,非常难于编写,即使能够使用的编译器也存在了大量的问题,这些问题大多难于被发现。由于本身的复杂性,复杂的C+程序的正确性相当难于保证。也有人提出不支持多线程的原语等缺陷。不过有如此多的知名人士提出了如此多的缺陷,正说明C+被广泛使用和成功。C+语言由于过度的复杂性,以及与unix的文化相抵触,在unix/linux领域受到很多著名人士(比如Linux之父linus torvalds与著名黑客Eric S. Raymond)的强烈批 评与抵制。5)、STL简介8STL(StandardTemplateLibrary,标准模板库)是惠普实验室开发的一系列软件的统称。它是由AlexanderStepanov、MengLee和DavidRMusser在惠普实验室工作时所开发出来的。现在虽说它主要出现在C+中,但在被引入C+之前该技术就已经存在了很长的一段时间。STL的代码从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器),几乎所有的代码都采用了模板类和模版函数的方式,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会。在C+标准中,STL被组织为下面的13个头文件:、和。以下笔者就简单介绍一下STL各个部分的主要特点。Visual C+Microsoft Visual C+,(简称Visual C+、MSVC、VC+或VC)微软公司的C+开发工具,具有集成开发环境,可提供编辑C语言,C+以及C+/CLI等编程语言。VC+整合了便利的除错工具,特别是整合了微软视窗程式设计(Windows API)、三维动画DirectX API,Microsoft .NET框架。目前最新的版本是Microsoft Visual C+ 2010。Microsoft Visual C+是Microsoft公司推出的开发Win32环境程序,面向对象的可视化集成编程系统。它不但具有程序框架自动生成、灵活方便的类管理、代码编写和界面设计集成交互操作、可开发多种程序等优点,而且通过简单的设置就可使其生成的程序框架支持数据库接口、OLE2,WinSock网络、3D控制界面。它以拥有“语法高亮”,IntelliSense(自动编译功能)以及高级除错功能而著称。比如,它允许用户进行远程调试,单步执行等。还有允许用户在调试期间重新编译被修改的代码,而不必重新启动正在调试的程序。其编译及建置系统以预编译头文件、最小重建功能及累加连结著称。这些特征明显缩短程式编辑、编译及连结的时间花费,在大型软件计划上尤其显著。3.2通过VC+访问WMI相关组件WMI是WBEM模型的一种实现,通过访问WBEM接口来实现WMI管理计算机。COM component(COM组件)是微软公司为了计算机工业的软件生产更加符合人类的行为方式开发的一种新的软件开发技术。在COM构架下,人们可以开发出各种各样的功能专一的组件,然后将它们按照需要组合起来,构成复杂的应用系统。由此带来的好处是多方面的:可以将系统中的组件用新的替换掉,以便随时进行系统的升级和定制;可以在多个应用系统中重复利用同一个组件;可以方便的将应用系统扩展到网络环境下;COM与语言,平台无关的特性使所有的程序员均可充分发挥自己的才智与专长编写组件模块。COM是开发软件组件的一种方法。组件实际上是一些小的二进制可执行程序,它们可以给应用程序,操作系统以及其他组件提供服务。开发自定义的COM组件就如同开发动态的,面向对象的API。多个COM对象可以连接起来形成应用程序或组件系统。并且组件可以在运行时刻,在不被重新链接或编译应用程序的情况下被卸下或替换掉。Microsoft的许多技术,如ActiveX, DirectX以及OLE等都是基于COM而建立起来的。并且Microsoft的开发人员也大量使用COM组件来定制他们的应用程序及操作系统。COM所含的概念并不止是在Microsoft Windows操作系统下才有效。COM并不是一个大的API,它实际上像结构化编程及面向对象编程方法那样,也是一种编程方法。在任何一种操作系统中,开发人员均可以遵循“COM方法”。一个应用程序通常是由单个的二进制文件组成的。当编译器生成应用程序之后,在对下一个版本重新编译并发行新生成的版本之前,应用程序一般不会发生任何变化。操作系统,硬件及客户需求的改变都必须等到整个应用程序被重新生成。目前这种状况已经发生变化。开发人员开始将单个的应用程序分隔成单独多个独立的部分,也即组件。这种做法的好处是可以随着技术的不断发展而用新的组件取代已有的组件。此时的应用程序可以随新组件不断取代旧的组件而渐趋完善。而且利用已有的组件,用户还可以快速的建立全新的应用。传统的做法是将应用程序分割成文件,模块或类,然后将它们编译并链接成一个单模应用程序。它与组件建立应用程序的过程(称为组件构架)有很大的不同。一个组件同一个微型应用程序类似,即都是已经编译链接好并可以使用的二进制代码,应用程序就是由多个这样的组件打包而得到的。单模应用程序只有一个二进制代码模块。自定义组件可以在运行时刻同其他的组件连接起来以构成某个应用程序。在需要对应用程序进行修改或改进时,只需要将构成此应用程序的组件中的某个用新的版本替换掉即可。COM,即组件对象模型,是关于如何建立组件以及如何通过组件建立应用程序的一个规范,说明了如何可动态交替更新组件。调用COM9:1、利用CoCreateInstance函数来调用。2、直接用CoGetClassObejct得到类厂对象接口,然后用该接口的方法CreateInstance来生成实例。3、直接从dll中得到DllGetClassObject,接着生成类对象及类实例(本方法适合于你想用某个组件,却不想在注册表中注册该组件)。3.3实现监控的整体设计思路点击主对话框上的tab按钮,可切换到监测与控制功能,在消息相应函数里分别添加两个对话框到Tab控件上,然后用函数ShowWindow来隐藏或显示对应的对话框,与纯脆用ShowWindow来显示或隐藏对话框相比,这种方法效率要高,而且容易编辑,代码整洁。其界面流程如图3-1所示:CWMIMonCtrlDlg主对话框鼠标点击MyTabCtrl监测控制MonitorPageControlPage监测控制图3-1 界面流程图主对话框里面Tab控件加入监测和控制两个页,在监测页里面类MonitorPage的m_ItemMapInfo Map类型成员用于存储节点信息,在鼠标事件中根据点击的节点找到该节点的信息(IP、用户名、密码等),Map类型成员m_ItemMapInt用于存储在配置监测时加入监测项对应的序号,如复选框选中了“服务信息”,则在配置监测完后,新加入的节点“服务信息”对应着数字6,在鼠标双击“服务信息”节点时找到对应的数字6,如果右键单击右边的list控件则需要根据该数字判断是否弹出菜单,CWmiMonitor类型的成员m_wmiMon用于监测。在CWmiMonitor 中m_CStrColumnList 链表存储List控件的列名,m_lCstrList用于存储监测到的数据,它相当于存储了这个List显示的表,表的每行成为一个CString类型的链表,然后再把这些链表放在一个链接链表的链表里面,最后用迭代器层层访问这些链表,并把数据插入list控件里面显示。主对话框初始化时已经在TreeCtrl上加入了一些节点,右键单击这些节点弹出菜单可以添加新节点,删除节点,编辑节点。对以上这些操作都会弹出对话框进行操作,并把相关的信息存到map类型成员ItemMapInf里。有些节点信息不全没有IP、用户名、密码,对于这样的节点不能进行配置监测,应为能进行配置监测的计算机应该是一台要去监测的实际计算机必须给出其IP、用户名密码,但如果编辑这些节点,有了IP、用户名、密码,就可以进行配置监测。在配置监测时在弹出的对话框里选择要监测的项,确定后该节点即可加入新的节点。双击这些新的节点,就在右边的listCtrl控件中显示出监测所得数据。如果双击的节点不是由配置监测而得来,那么双击节点将不会取得监测数据,只会响应展开节点的操作。这个功能的实现,主要是map变量里存储于这节点的信息,每个节点对应这一个信息,包括IP、用户名、密码等。整体流程如图3-2所示:主对话框WMIMonCtrl?监测:控制监测控制右键点击listCtrl新建,编辑,删除配置监测对话框?确定:取消取消主界面显示数据等操作信息:ip,user,pswd启动进程,关机,注销,重启确定控制确定NYNY图3-2 整体流程图3.4VC+实现获取远程计算机的软硬件信息实现远程监测与控制的核心部分是类CwmiMonitor,除了监控功能外它包含了访问组件,存储数据等任务,其工作流程如图3-3所示:申请CWmiMonitor的实例,如:CWmiMonitor m_wmiMon;调用构造函数CWmiMonitor(),初始化组建,CoInitialize单线程访问com,CoInitializeSecurity,注册并设置进程的默认的安全值 调用公有成员函数进行监控,如m_wmiMon. GetWmiVirMem()Connect连接计算机,ExecuteSql执行WQL语句结果由枚举变量保存,IWbemClassObject:Get()取数据IEnumWbemClassObject:Next()枚举出下一条把当前数据放入一个链接字符串的链表里,把该链表放入另一个链接链表的链表里图3-3 类CwmiMonitor实现监控的流程图主对话框分为监测和控制两个功能,其中监测部分可获得计算机的软硬信息,实现过程大体如下:1、函数 CoInitializeEx(void * pvReserved,DWORD dwCoInit) 初始化组件2、函数HRESULT CoInitializeSecurity(_in_optPSECURITY_DESCRIPTOR pSecDesc,_inLONG cAuthSvc,_in_optSOLE_AUTHENTICATION_SERVICE *asAuthSvc,_in_optvoid *pReserved1,_inDWORD dwAuthnLevel,_inDWORD dwImpLevel,_in_optvoid *pAuthList,_inDWORD dwCapabilities,_in_optvoid *pReserved3) 设置COM安全级别3、STDAPI CoCreateInstance(REFCLSID rclsid,/创建的Com对象的类标识符(CLSID)LPUNKNOWN pUnkOuter, /指向接口IUnknown的指针DWORD dwClsContext, /运行可执行代码的上下文REFIID riid, /创建的Com对象的接口标识符LPVOID * ppv /用来接收指向Com对象接口地址的指针变量)函数用指定的类标识符创建一个Com对象,用指定的类标识符创建一个未初始化的对象。4、通过IWbemLocator : ConnectServer方法连接到WMI5、创建能用来设置安全代理的COAUTHIDENTITY6、在WMI连接上设置安全级别HRESULT CoSetProxyBlanket( IUnknown*pProxy,DWORDdwAuthnSvc,DWORDdwAuthzSvc,WCHAR*pServerPrincName,DWORDdwAuthnLevel,DWORDdwImpLevel,RPC_AUTH_IDENTITY_HANDLEpAuthInfo,DWORDdwCapabilities)7、使用 IWbemServices 指针产生 WMI请求HRESULT ExecQuery(inconst BSTR strQueryLanguage,inconst BSTR strQuery,inLONG lFlags
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公司知识宣传活动方案
- 公司暑期公益活动方案
- 教学方法的实践与教师专业成长
- 技术创新在企业经营中的驱动作用
- 提高保险公司理培业务竞争能力的途径研究
- 提升研发团队成员的自我管理能力
- 支持企业数字化消费转型推动线上消费增长
- 新兴技术在招标风险控制中的创新应用
- 影视文化与主题公园的联动发展
- 影视制作技术与后期处理技巧解析
- 物业小饭桌管理制度
- 2025年湖南省普通高中学业水平考试合格性考试模拟试题(长郡版高一生物)(原卷版)
- 2025春国家开放大学《思想道德与法治》终考大作业答案
- 2025年广东省广州市白云区中考语文二模试卷
- 【英语(新高考Ⅰ卷)】2025年普通高等学校招生全国统一考试
- 2025年天津市河西区中考二模数学试题(含部分答案)
- 医院培训课件:《药品不良反应报告和监测工作简介》
- 广东省东莞市2025届九年级下学期中考三模语文试卷(含答案)
- 2025 届九年级初三毕业典礼校长讲话:星河长明共赴新程
- 2025年生态文明建设的考核试卷及答案
- GM/T 0009-2023SM2密码算法使用规范
评论
0/150
提交评论