




已阅读5页,还剩23页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
于鹏论文终稿范文 本科毕业论文(设计)题目基于C+的硬件检测系统的设计与实现姓名于鹏学号09062151004s专业计算机科学与技术专升本院系信息工程学院指导老师张怡文实习单位合肥华美完成时间xx年4月24日安徽新华学院教务处制安徽新华学院本科毕业生毕业论文(设计)承诺书本人按照毕业论文(设计)进度计划积极开展实验(调查)研究活动,实事求是地做好实验(调查)记录,所呈交的毕业论文(设计)是我个人在导师指导下进行的研究工作及取得的研究成果。 据我所知,除文中特别加以标注引用参考文献资料外,论文(设计)中所有数据均为自己研究成果,不包含其他人已经发表或撰写过的研究成果。 与我一同工作的同志对本研究所做的工作已在论文中作了明确说明并表示谢意。 对大多数的普通用户来说,各种各样的硬件信息使我们普通电脑用户对计算机望而生畏。 如何及时、有效的获取个人计算机系统硬件信息成了我们亟待解决的问题。 设计开发一个基于C+的硬件检测系统,主要有如下功能 1、计算机的基本信息及概述 2、主板上CPU,内存,BIOS等详细信息 3、存储器详细信息 4、Windows网络设备基本信息通过以上检测信息让用户熟悉和了解个人计算机的硬件详细信息。 本文主要介绍在Microsoft Visual Studioxx开发平台下使用VC+与WMI管理计算机硬件资源。 关键词WMI;Visual C+;硬件检测IVABSTRACT Withthe rapideconomical development,Personal Computermore andmore popular,bined softwareand hardwareupdates sofast.For morethe ordinaryusers,a varietyof hardwareinformation thatordinary puterusers onthe puterdaunting.How toaess toour personal puters hardwareinformation timelyand effectivelythat beeour problemsto besolved.Design anddevelopment ofa hardwaredetection systembased C+,for morepersonalputerusers arefamiliar withand understandthe hardwaredetails.It havethe followingmain features:1.Basic informationand anoverview ofthe puter2.The motherboardCPU,memory,BIOS andother details3.Memory Details4.Windows NetworkingBasics Thepaper describesthe Visualstudioxxdevelopment platformto useWMI managementof puterhardware resources.KEYWORDSWMI;Visual C+;Hardware detection11前言1.1引言电脑硬件信息的检测1,目前在网上能检测到它的软件有很多,如CPU-Z、Everest、优化大师、鲁大师等,对电脑硬件信息的检测有很多好处首先能让用户对自己电脑的具体参数信息有个很清楚的了解;其次能检测出硬件信息的好坏,及时的防御;再次对自己购买的硬件信息真假新旧也能做出正确的判断。 虽然市场上已经有很多检测软件,但本人的毕业设计选择设计实现一个不同于管理类设计的简单添加删除修改和查询,在做这个设计的过程中可以让本人更加熟悉WMI基本信息2。 在我们编写的程序中常常要和硬件打交道,那么如何在程序中确定系统中是否有该设备,它的运行状态又是怎样的呢?对于初学者来说,这个问题常常不好解决,其实只要简单的利用几个API函数3或者使用WMI来对计算机硬件资源信息管理。 1.2课题背景21世纪以来,人类经济高速发展,人们发生了日新月异的变化,特别是计算机的应用及普及到经济和社会生活的各个领域。 使原本的旧的管理方法越来越不适应现在社会的发展。 许多人还停留再以前的手工操作。 这大大的阻碍了人类经济的发展4。 计算机的应用及普及到经济和社会生活的各个领域,随之而来的是管理检测市场工作日趋复杂繁重,要耗费大量人力、物力,而现在检测的管理水平不高,一直以来人们使用传统人工的方式检测计算机硬件信息,这种检测方式存在着许多缺点,如效率低、保密性差、时间长。 这样的机制已经不能适应时代的发展,已愈来愈称为监测工作的一个瓶颈5。 在信息时代这种传统的检测方法必然被计算机为基础的信息检测所取代。 作为计算机应用的一部分,使用计算机软件对硬件信息进行检测,具有手工管理所无法比拟的优点,这些优点能够极大地提高检测工作的效率,也是检测工2作的科学化、正规化管理,与世界接轨的重要条件6。 因此,开发这样一套检测软件成为很有必要的事情。 1.3系统目标此系统以计算机为工具,通过对电脑硬件的信息进行检测,把检测人员从繁琐的检测处理中解脱出来,使其能更好的完成工作,开发本检测系统,从而全面提高工作质量,具体如下1)节约资源,提高信息的精确度本系统能减少很多不必要的资源,不用像以前那样用冗余的纸张式的管理,大大的节约了能源。 并且计算机的存储与快速查询功能大大提高了管理的效率,并且还提高了信息管理的精度。 2)方便快速操作,精简人员,节约开支方便快速的操作,可减少信息管理的漏洞,可减少因工作的冗余出现的错误,并且操作非常简单,可减少许多不必要的人员,这无论从物质上还是工作人员的工资上都为公司节约了开支,增加了财富。 3)对于普通用户,防止被欺骗目前家庭电脑已越来越普及,普通用户使用对个人电脑的硬件信息基本不了解,使用该软件可以轻松获取电脑硬件信息,辨别真伪,防止被骗。 1.4系统开发计划及功能一般来说,信息系统的简历与应用可以划分为总体规划、系统开发和系统运行三个阶段,其中系统开发阶段还可以进一步分为系统分析、系统设计和系统实施等工作环节。 上述各个阶段排列成一个严格的线性开发序列,在每个工作阶段均产生完整的技术文档作为下一个阶段工作的指导和依据,没一个阶段都应对文档进行评审,确信该阶段工作已完成并达到要求后才能进入下一个阶段,同时在以后的工作中不能轻易改变前面经过评审的成果。 上述开发方式的主要优点是便于开发工作的组织和管理,并且可以大大降低管理信息系统开发的复杂性。 国内外许多系统开发的实例都证明这是一个行之有效的开发方式7。 国外曾有人对一些软件项目开发各阶段的工作量进行了统计,结果表明,在开发过程中各工作阶段所占全部工作量的比重分别达到系统分析系统设计变成模块调试系统调试=20%:15%:20%:25%:20%。 由此可见,程3序编写在开发工作中占很小比例,而调试工作却占整个开发工作量的一半左右,因此“系统开发就是编程”的习惯说法显然是片面的。 另据统计,在建立管理信息系统的三个阶段中,总体规划和系统开发阶段的工作量约占整个工作量的2/3,而运行、维护阶段要占1/38,这说明一个信息系统开发后,仍应十分重视它的维护工作,以便系统不断完善并充分发挥其作用。 本系统主要具有以下主要功能 1、计算机的基本信息及概述以及计算机与域名名称 2、主板上CPU,内存,BIOS等详细信息 3、存储器详细信息 4、windows网络设备基本信息1.5论文内容及安排本论文主要使用C+语言作为其开发平带来实现各个功能模块,保证系统的正常运行。 简单而又清晰的界面,操作信息的提示使系统具有一定的可扩展性饿可修改性。 本论文共有六章,具体介绍如下第一章主要介绍了硬件检测系统的现状,并阐述了所要开发系统所具有及要实现的功能。 第二章主要介绍了本设计所使用的开发语言C+,开发环境VC+和WMI及其所使用设计的相关技术。 第三章详细介绍了硬件检测系统的各个模块的具体功能以及系统对计算机进行检测的具体步骤。 第四章详细介绍了硬件检测系统的各个模块的功能实现。 第五章硬件检测系统的各个模块功能测试及截图。 第六章论文工作总结。 42开发语言环境介绍2.1开发语言本课程涉及主要采用了C+9。 C+语言是在C语言10的基础上发展起来的,不仅继承了C语言的所有特点,而且引入了面向对象的程序设计方法11。 C+改进了程序涉及思路,将编程方式进化到面向对象进行程序设计这一新的思维过程。 C+语言代表着对以往语言之精华的发展和提炼,并能很好的与C语言兼容,既支持面向对象的程序设计,也支持结构化的程序设计。 它修补了C语言中的一些漏洞,提供更好的类型检查和编译时的分析,提供了异常处理机制,简化了程序的出错处理,利用throw、try和catch关键字12,出错处理程序不必与正常的代码紧密结合,提高了程序的可靠性和可读性。 函数重载允许相同的函数名具有不同参数表,系统根据参数的个数和类型匹配相应的函数。 提供了模板机制。 模板包括类模板和函数模板两种,它们将数据类型作为参数。 对于具体数据类型,编译器自动生成模板类或模板函数,它提供了源代码复用的一种手段。 2.2开发环境Visual C+是Microsoft公司的Visual Studio13开发工具箱中的一个C+程序开发包。 VisualStudio提供了一整套开发Inter和Windows应用程序的工具,包括Visual C+,Visual Basic,Visual Foxpro,Visual InterDev,Visual J+以及其他辅助工具,如代码管理工具Visual SourceSafe和联机帮助系统MSDN。 Visual C+包中除包括C+编译器外,还包括所有的库、例子和为创建Windows应用程序所需要的文档。 Visual C+不仅是C+语言的集成开发环境,而且与Win32紧密相连,所以,利用Visual C+可以完成各种各样的应用程序的开发,从底层软件直到上层直接面向用户的软件。 而且,Visual C+强大的调试功能的为大型复杂软件的开发提供了有效的排错手段。 进入90年代以来,随着多媒体技术和图形图像技术的不断发展,可视化(Visual)技术得到广泛的重视,越来越多计算机专业人员和非专业人员都开始研究并应用可视化技术。 所谓可视化技术,一般是指软件开发阶段的可视化和计5算机图形技术和方法的应用。 可视化编程就是软件开发阶段的可视化。 Visual C+xx是一个很好的可视化编程工具,使用Visual C+xx环境来开发Windows应用程序大大缩短了开发时间,而且它的界面更友好,便于程序员操作。 开发环境是程序员同Visual C+的交互界面,通过它程序员可以访问C+源代码器、资源器,使用内部调试器,并且可以创建工程文件。 MFC(Microsoft FoundationClasses),是一个微软公司提供的类库(class libraries),以C+类的形式封装了Windows的API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。 其中包含的类包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。 2.3WMI的介绍WMI14即Windows管理规范(Windows ManagementInstrumention),它采用了一套统一的接口,涵盖了系统中所用的硬件设备和软件信息,比如内存状态,网络连接情况,各种接口状态,有1394,USB,串口,并口,各种板卡的信息,主要是主板、显卡、和声卡。 可以通过WMI提供的类接口获取和设置系统内几乎所有设备的状态信息,对它们进行分析和管理。 在WMI的架构中,把系统中的设备分成了九种,它们是制冷,输入,存储,主板控制器和端口,网络,电源管理,打印,通讯,视频监控,每种都由若干个类组成。 不过,这里的类和C+里的类并不是一个概念,简单的说,就是WMI定义了一组属性,通过查询这些属性对应的值,来得到自己期望的信息。 WMI是Windows2K/XP管理系统的核心;对于其他的Win32操作系统,WMI是一个有用的插件。 WMI以CIMOM为基础,CIMOM即公共信息模型对象管理器(Common InformationModel ObjectManager),是一个描述操作系统构成单元的对象数据库,为MMC和脚本程序提供了一个访问操作系统构成单元的公共接口。 有了WMI,工具软件和脚本程序访问操作系统的不同部分时不需要使用不同的API;相反,操作系统的不同部分都可以插入WMI15。 Windows2K/XP和Windows98都支持WMI;如果为NT4.0和Windows95加上了Service Pack4或更高版本,N T4.0和Win95也支持WMI。 因此,用WMI进行远程管理时,并非一定要用Windows2K/XP(当然,如果WMI脚本在一台没有性能监视器的Win9x机器上运行,就不能在远程Win9x系统上查询Windows62K/XP的性能监视器。 WMI如图2.1所示图2.1WMI(Windows管理规范)16如前所述,WMI允许通过一个公共的接口访问多种操作系统构成单元,因此不必分别对待各种底层接口或所谓的“提供者”。 利用WMI可以高效地管理远程和本地的计算机;与此相对,并非所有的Windows2K/XP命令行工具都支持远程运行。 WMI是WBEM模型的一种实现。 WBEM即Web-Based EnterpriseManagement,或基于Web的企业管理,WBEM由DMTF(Distributed ManagementTask Force,分布式管理任务组)在许多厂商的帮助下创立,包括Compaq、Sun、Microsoft等。 WBEM的目标是,为管理企业环境开发一个标准的接口集。 WBEM模型最关键的部分是它的数据模型(或描述和定义对象的方式)、编码规范(Encoding Specification),以及在客户端和服务器端之间传输数据的模式。 WBEM的数据模型是CIM(Common InformationModel,公共信息模型)。 CIM是一个用来命名计算机的物理和逻辑单元的标准的命名系统(或称为命名模式),例如硬盘的逻辑分区或者正在运行的应用的一个实例。 公共信息模型结构如图2.27图2.2公共信息模型结构图CIM是一个面向对象的模型,使用一组面向对象的术语进行描述。 CIM包含类(Class),类是被管理单元的模板。 类的实例称为对象(Object),对象代表着底层系统的一个具体单元。 名称空间(Namespace)是一个类的集合,每个名称空间面向一个特定的管理领域。 类包含属性(Property)和方法(Method)。 CIM分三层。 第一层是核心模型(Core Model),这一层包含的类定义对于所有管理领域来说都是共同的。 第二层是公共模型(Common Model),这一层包含的类定义对于特定的管理领域来说是公共的,但与具体的操作系统和系统设计无关。 第三层是扩展模型(Extension model),这一层包含的类定义与特定的操作系统或技术有关。 WMI是Microsoft扩展CIM2.0得到的面向Win32系统的扩展模型。 引用WMI类和属性的形式是“扩展前缀_类名称.属性名称”,例如Win32_ComputerSystem.Name,其中Win32是CIM模式cimv2名称空间内WMI扩展类的前缀,ComputerSystem是类,Name是属性。 当前,WMI提供的方法还很有限,但随着时间的推移,相信WMI和CIM提供的方法都会越来越丰富16。 本系统就是采用VC+xx与WMI去设计实现的硬件检测系统。 83检测系统功能设计3.1检测系统功能设计经过各方面的调查和分析,确定了系统的总体结构图3.1系统功能结图详细功能介绍 1、计算机用于显示计算机系统信息的摘要以及计算机与域名信息 2、主板主要显示中央处理器属性与物理信息、CPUID指令信息、系统内存与虚拟内存信息、系统BIOS信息 3、存储器主要显示系统逻辑磁盘驱动器信息,以及分区信息 4、网络设备主要显示系统中的网络适配器信息硬件检测系统计算机主板存储器网络设备概述中央处理器内存BIOS逻辑磁盘驱动Windows网络93.2硬件检测系统的检测步骤使用WMI可以得到操作系统、CPU、内存、主板、磁盘、输入设备、电源等等硬件信息,可得到文件系统、驱动、桌面、共享等等软件信息。 并且是通过统一接口来实现。 VC+通过WMI实现硬件检测的步骤如下17 1、初始化库使用C+编写WMI程序必须首先初始化,因为WMI是以为基础的,可使用CoInitializeEx和CoInitializeSecurity来完成初始化。 2、初始化库安全级别调用函数CoInitializeSecurity用于初始化安全级别。 3、连接到WMI命名空间通过调用CoCreateInstance初始化WMI的定位器(IWbemLocator类型的实例)。 4、创建WMI服务调用IWbemLocator:ConnectServer方法,通过这个定位器连接到WMI的命名空间,通过把一个IWbemServices的实例以参数形式传递给ConnectServer方法,就会创建这个服务。 如我们需要一些BIOS信息,那么需要使用的WMI提供程序是Win32_BIOS,则需要连接到ROOTCIMV2命名空间中。 5、设置WMI服务的安全等级根据上一步得到的服务,设置相应的服务安全级别。 通常来说,如果我们没有设置适当的安全属性,安全方案不允许一个进程去访问另一个进程,因此如果我们要访问一个外部进程的对象,那么我们应该设置适当的IWbemServices的安全级别。 6、读取要获取的信息使用之前得到的服务,可以进行一些操作,如查询、调用方法和其他一些操作。 WMI最主要的一个功能就是在WMI储备库里查询一些类和实例的信息,我们可以调用一个同步查询,也可以调用一个异步查询。 10同步查询是在当前进程下执行的查询18;异步查询则需要启动另一个线程去查询,在查询工作结束后,调用定义好的接口(类似于回调函数),以处理查询结果。 同步查询适合于查询本机系统或者其他一些小的应用;当查询的工作量很大的时候,同步查询可能会造成资源的等待,所以对于应用于网络的查询和大量查询的时候,异步查询是更好的选择。 同步查询需要的类型是IWbemServices,方法是ExecQuery,我们需要做的是将一个好的WQL查询字符串作为参数传递给该方法,该方法返回一个IEnumWbemClassObject类型的指针,该类型的指针保存了我们查询的结果集。 利用这个结果集,我们可以调用IEnumWbemClassObject:Next函数遍历结果集,然后选择我们确切需要的数据。 异步查询同样需要类型IWbemServices,方法是ExecQueryAsync。 该方法会从当前查询WMI储备库的进程中转移到另一个线程,使另一个查询工作得以进行。 WMI会调用实现了IWbemSinkObject接口的类型的Indicate方法来通知程序,查询结束,并像同步查询一个样,将查询的结果集以一个IEnumWbemClassObject类型的指针返回给用户19。 本系统主要采用了同步查询对系统硬件信息进行检测 7、释放资源,关闭服务与连接,关闭库在用完资源后,释放资源,关闭连接,关闭库等一些善后操作。 以上步骤的具体流程如图3.2所示11图3.2WMI读取硬件信息流程CoInitializeExCoInitializeSecurity CoCreateInstanceCoSetProxyBlanket ConnectServerIWbemSerices-ExecQuery IWbemClassObject-Get CoUninitialize124硬件检测系统的实现4.1初始化库由于用C+编写WMI应用是基于技术的,所以必须初始化库,这是调用CoInitializeEx用于初始化库20。 HRESULT hres;hres=CoInitializeEx(NULL,COINIT_MULTITHREADED);if(FAILED(hres)MessageBox(“Failed toinitialize library.Error code=0X”+hex+hres);Return1;/Program hasfailed.CoInitializeEx函数声明如下HRESULT CoInitializeEx(void*pvReserved,DWORD dwCoInit);CoInitializeEx()函数中的参数说明如下1.pvReserved系统保留的参数,必须传入NULL2.dwCoInit该标示指明基于当前线程的并发模式和初始化选项。 该参数是COINIT枚举类型,传入参数时候,除了COINIT_APARTMENTTHREADED和COINIT_MULTITHREADED标记外,其余的标记可以组合使用。 默认值取COINIT_MULTITHREADED。 返回值S_OK 库初始化成功。 S_FALSE当前线程上,库已经被初始化。 RPC_E_CHANGED_MODE 库已经被初始化且传入参数设置的并发模式和本次不同。 4.2初始化库安全级别调用CoInitializeSecurity用于初始化安全级别。 13Hres=CoInitializeSecurity(NULL,-1,/ authenticationNULL,/Authentication servicesNULL,/Reserved RPC_C_AUTHN_LEVEL_DEFAULT,/Default authenticationRPC_C_IMP_LEVEL_IMPERSONATE,/Default ImpersonationNULL,/Authentication infoEOAC_NONE,/Additional capabilitiesNULL/Reserved);If(FAILED(hres)MessageBox(“Failed toinitialize security.Error code=0X”+hex+hres);CoUninitialize();Return1;/Program hasfailed.CoInitializeSecurity()函数声明如下HRESULT CoInitializeSecurity(PSECURITY_DESCRIPTOR pVoid,LONG cAuthSvc,SOLE_AUTHENTICATION_SERVICE*asAuthSvc,Void*pReserved1,DWORD dwAuthnLevel,DWORD dwImpLevel,SOLE_AUTHENTICATION_LIST*pAuthList,DWORD dwCapabilities,void*pReserved3);14CoInitializeSecurity()函数主要用于注册并设置进程的默认的安全值。 该函数只被每个进程确切的调用一次,以显示或隐式的方式。 它可以被客户端,服务器端或是两边都调用。 对于非的应用程序不应该显示的被调用,但是对于应用程序该函数会隐式的从注册表读取参数来调用。 如果使用注册表设置进程级的安全然后调用CoInitializeSecurity,那么AppID的注册表值会被忽略而使用CoInitializeSecurity值。 4.3连接到WMI命名空间通过调用CoCreateInstance初始化WMI的定位器(IWbemLocator类型的实例),此函数需要一个CLSID参数,在此基础上创建相应组建的一个实例,并返回此组件的某个接口。 Hres=CoCreateInstance(CLSID_WbemLocator,0,CLSCTX_INPROC_SERVER,IID_IWbemLocator,(LPVOID*)&pLoc);If(FAILED(hres)MessageBox(“Failed tocreate IWbemLocatorobject.Error code=0X”+hex+hres);CoUninitialize;Return1;/Program hasfailed.CoCreateInstance()函数声明如下STDAPI CoCreateInstance(REFCLSID rclsid,/创建的Com对象的类标识符(CLSID)LPUNKNOWN pUnkOuter,/指向接口IUnknown的指针DWORD dwClsContext,/运行可执行代码的上下文REFIID riid,/创建的Com对象的接口标识符15LPVOID*ppv/用来接收指向Com对象接口地址的指针变量);CoCreateInstance()函数各项参数解释如下1.rclsid用来唯一标识一个对象的CLSID(128位),需要用它创建指定对象。 2.pUnkOuter如果为NULL,表明此对象不是聚合式对象一部分。 如果不是NULL,则指针指向一个聚合式对象的IUnknown接口。 3.dwClsContext组件类别,可使用CLSCTX枚举器中预定义的值。 4.riid引用接口标识符,用来与对象通信。 5.ppv用来接收指向接口地址的指针变量。 如果函数调用成功,*ppv包括请求的接口指针。 返回值如下S_OK指定的对象实例被称成功创建。 REGDB_E_CLASSNOTREG指定的类没有在注册表中注册。 也可能是指定的dwClsContext没有注册或注册表中服务器类型损坏。 CLASS_E_NOAGGREGATION这个类不能创建为聚合型。 E_NOINTERFACE指定的类没有实现请求的接口,或者是IUnknown接口没有暴露请求的接口。 4.4创建WMI服务调用IWbemLocator:ConnectServer方法,通过这个定位器连接到WMI命名空间,通过把一个IWbemServices的实例以参数形式传递给ConnectServer方法,就会创建这个服务。 如我们需要一些CPU信息,那么需要使用的WMI提供程序是WIN32_Processor,则需要连接到ROOTCIMV2命名空间中。 IWbemServices*pSvc=NULL;Hres=pLoc-ConnectServer(_bstr_t(L”ROOTCIMV2”),/Object pathof WMInamespace NULL,/User name.NULL=current userNULL,/User password.NULL=current0,/Locale.NULL indicatescurrent16NULL,/Security flags0,/Authority(e.g.Kerberos)0,/Context object&pSvc/pointer toIWbemServices proxy);If(FAILWS(hres)MessageBox(“Could notconnect.Error code=0X”+hex+hres);pLoc-Release();CoUninitialize;Return1;/Program hasfailedConnectServer()函数各项参数解释如下1.strNetworkResource用来指定WMI命名空间对象的路径。 2.strUserName用来指定需要连接客户端机器的用户名,如果为空值是表示为当前用户名。 3.strPassword用来指定需要连接客户端机器的用户密码,如果为空的话表示为当前用户。 4.strLocale如果为NULL,表示使用当前的语言环境。 如果不为NULL,这个参数必须是一个有效的BSTR,表示为信息检索提供正确的语言环境。 4.5设置WMI服务的安全级别根据上一步得到的服务,设置相应的服务安全级别。 通常来说,如果我们没有设置适当的安全属性,安全方案不允许一个进程去访问另一个进程。 因此,如果我们要访问一个外部进程的对象,那么我们应该设置适当的IWbemServices的安全级别。 hres=CoSetProxyBlanket(pSvc,/Indicates theproxy toset RPC_C_AUTHN_WINNT,/RPC_C_AUTHN_xxx RPC_C_AUTHN_NONE,/RPC_C_AUTHZ_xxx NULL,/Server principalname17PRC_C_AUTHN_LEVEL_CALL,/RPC_C_AUTHN_LEVEL_xxx RPC_C_IMP_LEVEL_IMPERSONATE,/RPC_C_IMP_LEVEL_xxx NULL,/client identityEOAC_NONE/proxy capabilities);If(FAILED(hres)MessageBox(“Could notset proxyblanket.Error code=0x”+hex+hres);pSvc-Release();pLoc-Release();CoUninitialize();Return1;/Program hasfailed4.6使用WMI服务使用之前得到的服务,可以进行一些操作,如查询、调用方法和其他一些操作。 本系统的功能具体实现如下 1、计算机概述模块具体实现代码如下CMyWMI MyWmi;MyWmi.InitializeComInterface();int nItem0=listCtrl.InsertItem(0,计算机);CString MySystemCaption=MyWmi.GetQueryData(SELECT*FROM Win32_OperatingSystem,Caption);if(!MySystemCaption.IsEmpty()int nItem1=listCtrl.InsertItem(1,操作系统);listCtrl.SetItemText(nItem1,1,MySystemCaption);CString MySystemCSDVersion=MyWmi.GetQueryData(SELECT*FROM Win32_OperatingSystem,CSDVersion);if(!MySystemCSDVersion.IsEmpty()int nItem2=listCtrl.InsertItem(2,操作系统版本升级(SP);listCtrl.SetItemText(nItem2,1,MySystemCSDVersion);18CString MySystemCSName=MyWmi.GetQueryData(SELECT*FROM Win32_OperatingSystem,CSName);if(!MySystemCSName.IsEmpty()int nItem3=listCtrl.InsertItem(3,计算机名称);listCtrl.SetItemText(nItem3,1,MySystemCSName);CString MyCaption=MyWmi.GetQueryData(SELECT*FROM Win32_ComputerSystem,Caption);if(!MyCaption.IsEmpty()int nItem4=listCtrl.InsertItem(4,登陆域);listCtrl.SetItemText(nItem4,1,MyCaption);int nItem5=listCtrl.InsertItem(5,主板);CString MyCPUName=MyWmi.GetQueryData(SELECT*FROM Win32_Processor,Name);if(!MyCPUName.IsEmpty()int nItem6=listCtrl.InsertItem(6,处理器名称);listCtrl.SetItemText(nItem6,1,MyCPUName);CString MyBoardManufacturer=MyWmi.GetQueryData(SELECT*FROM Win32_BaseBoard,Manufacturer);CString MyBoardProduct=MyWmi.GetQueryData(SELECT*FROM Win32_BaseBoard,Product);CString MyData=MyBoardManufacturer+MyBoardProduct;if(!MyData.IsEmpty()int nItem7=listCtrl.InsertItem(7,主板名称);listCtrl.SetItemText(nItem7,1,MyData);CString TotalVisibleMemorySize=MyWmi.GetQueryData(SELECT*FROM CIM_OperatingSystem,TotalVisibleMemorySize);if(!TotalVisibleMemorySize.IsEmpty()int nItem8=listCtrl.InsertItem(8,系统内存(KB);listCtrl.SetItemText(nItem8,1,TotalVisibleMemorySize);CString BIOSManufacturer=MyWmi.GetQueryData(SELECT*FROM Win32_BIOS,Manufacturer);if(!BIOSManufacturer.IsEmpty()int nItem9=listCtrl.InsertItem(9,主板制造商);listCtrl.SetItemText(nItem9,1,BIOSManufacturer);19CString SerialPortCaption=MyWmi.GetQueryData(SELECT*FROM Win32_SerialPort,Caption);if(!SerialPortCaption.IsEmpty()int nItem10=listCtrl.InsertItem(10,通讯端口);listCtrl.SetItemText(nItem10,1,SerialPortCaption);CString ParallelPort=MyWmi.GetQueryData(SELECT*FROM Win32_ParallelPort,Caption);if(!ParallelPort.IsEmpty()int nItem11=listCtrl.InsertItem(11,通讯端口);listCtrl.SetItemText(nItem11,1,ParallelPort);int nItem12=listCtrl.InsertItem(12,显示设备);CString VideoCaption=MyWmi.GetQueryData(SELECT*FROM Win32_VideoController,Caption);if(!VideoCaption.IsEmpty()int nItem13=listCtrl.InsertItem(13,显示卡);listCtrl.SetItemText(nItem13,1,VideoCaption);int nItem14=listCtrl.InsertItem(14,多媒体);CString SoundProductName=MyWmi.GetQueryData(SELECT*FROM Win32_SoundDevice,ProductName);if(!SoundProductName.IsEmpty()int nItem15=listCtrl.InsertItem(15,声卡);listCtrl.SetItemText(nItem15,1,SoundProductName);int nItem15=listCtrl.InsertItem(16,输入设备);CString MouseName=MyWmi.GetQueryData(SELECT*FROM Win32_PointingDevice,Name);if(!MouseName.IsEmpty()int nItem17=listCtrl.InsertItem(17,鼠标);listCtrl.SetItemText(nItem17,1,MouseName);CString KeyboardName=MyWmi.GetQueryData(SELECT*FROM Win32_Keyboard,Name);if(!KeyboardName.IsEmpty()int nItem18=listCtrl.InsertItem(18,键盘);listCtrl.SetItemText(nItem18,1,KeyboardName);int nItem19=listCtrl.InsertItem(19,网络设备);20CString IPAddress=MyWmi.GetQueryData(SELECT*FROM Win32_NetworkAdapterConfiguration WHEREIPEnabled=True ANDDHCPEnabled=True,IPAddress);if(!IPAddress.IsEmpty()int nItem20=listCtrl.InsertItem(20,主IP地址);listCtrl.SetItemText(nItem20,1,IPAddress);CString MACAddress=MyWmi.GetQueryData(SELECT*FROM Win32_NetworkAdapterConfiguration WHEREIPEnabled=True ANDDHCPEnabled=True,MACAddress);if(!MACAddress.IsEmpty()int nItem21=listCtrl.InsertItem(21,主MAC地址);listCtrl.SetItemText(nItem21,1,MACAddress);int nItem22=listCtrl.InsertItem(22,存储设备);CString DeviceID=MyWmi.GetQueryData(SELECT*FROM Win32_LogicalDisk,DeviceID);if(!DeviceID.IsEmpty()int nItem23=listCtrl.InsertItem(23,逻辑磁盘分区);listCtrl.SetItemText(nItem23,1,DeviceID);MyWmi.ReleaseComInterface(); 2、逻辑磁盘驱动器模块具体实现代码如下HRESULT MyHResult=CoInitializeEx(0,COINIT_MULTITHREADED);MyHResult=CoInitializeSecurity(NULL,-1,NULL,NULL,RPC_C_AUTHN_LEVEL_DEFAULT,RPC_C_IMP_LEVEL_IMPERSONATE,NULL,EOAC_NONE,NULL);IWbemLocator*pMyWbemLocator=NULL;MyHResult=CoCreateInstance(CLSID_WbemLocator,0,CLSCTX_INPROC_SERVER,IID_IWbemLocator,(LPVOID*)&pMyWbemLocator);IWbemServices*pMyWbemSvc=NULL;MyHResult=pMyWbemLocator
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论