WMI-概述

本文详细介绍如何使用.NET Framework SDK中的System.Management命名空间进行WMI编程,包括连接远程计算机、收集数据、执行方法及接收事件等核心操作。同时介绍了相关类如ManagementClass、ManagementObjectSearcher的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

WMI是Windows Management Instrumentation的简称,即:视窗管理规范。在Windows 2000或以后的版本中均安装得有,NT4.0则需要安装WMI的核心组件。通过WMI可以获取远程计算机的各种数据信息,控制远程计算机的各种行为,而这就像操作本地机一样方便、简单。

 

WMI从根本上说应该为一种服务,WMI服务在组件服务中的显示名称为"Windows Management Instrumentation"。对于本地不同的用户,WMI所有的权限也不一样。

 

.Net FrameWork SDK对WMI提供了全面的支持,.Net FrameWork SDK为Visual C#能够操作WMI提供了一个专门的命名空间"System.Management"。在命名空间"System.Management"中提供了大量用以处理和WMI相关的类、接口和枚举。

 

在实际编程中需要注意,System.Management 命名空间中的类都存在于System.Management .dll这个文件中,所以在编程的时候一定要添加对这个dll文件的引用,然后还需要在我们的程序开始处添加如下代码:using System.Management

 

技术范围 Classes/interfaces/configuration elements

收集 WMI 类信息

ManagementObject, ManagementClass

查询数据

异步查询数据

SelectQuery, ManagementObjectSearcher, WqlObjectQuery, ObjectQuery

ManagementObjectCollection, ManagementOperationObserver

执行方法

异步执行方法

ManagementBaseObject

ManagementOperationObserver

接收事件

异步接收事件

WqlEventQuery, ManagementEventWatcher

EventArrivedEventArgs, EventArrivedEventHandler, CompletedEventArgs, CompletedEventHandler

连接到远程计算机

ConnectionOptions, ManagementScope

此外还有一个 System.Management.Instrumentation 子命名空间,相关介绍请参考MSDN

 

有三个工具,使用它们有助于对WMI开发的学习

1、系统自带的wbemtest.exe

2、微软提供的 agement (WMI) Extensions for Visual Studio .NET 2003 Server Explore

3、微软提供的 WMI Code Creator WMI代码生成器

 

这里推荐第三个工具,此外在参考MSDN或使用工具时要注意一点,有些方法的调用可能是与平台相关的,如Win32_NetworkAdapter中的几个方法Disable、Enable、Reset在XP中会提示”在类中找不到这个方法”

 

WMI开发是一个较庞大的知识体系,利用WMI可以完成大致三类操作:

1、数据收集,如CPU、网卡硬件信息

2、执行方法,如设置网卡IP

3、接收事件,如当某个服务启动或停止时应用程序得到通知

 

.net中与WMI相关的主要类介绍:

1、连接

可使用ConnectOptions和ManagementScope类带上连接帐号及密码连接远程计算,本地计算机可略过此步骤

ManagemenScope也不允许带用户名密码方式的本地计算机连接,这会引发一个异常,此外在连接远程计算机时有一些条件需要具备,比如RPC服务可用、本地策略中登录模式为经典模式。相关知识可参考网上“WMI入侵”一文,可使用Recton作一下连接测试,它同样是利用了WMI

 

2、数据收集

在WMI中提供了两种数据收集方式,一是使用ManagementClass,另一种方式是在ManagementObjectSearch类中使用WQL查询语句

注意,对象的属性,它可能是一个变量,也可能是一个数组地址

 

3、方法调用

 ManagementBaseObject提供了InvokeMethod方法进行对象的方法调用,对于有参数的对象方法,需要使用GetMethodParameters方法获取该对象方法的参数,并设置,然后在InvokeMethod调用中传入

 

4、事件通知

事件通知的大致步骤是利用WQL语句写明需要过滤什么事件,建立一个WqlQueryEvent,然后把WqlQueryEvent对象传递给ManagementEventWatcher类的构造,接着进行同部或异步操作等待事件触发通知

 

同步示例

 

参考资料:

WMI .NET 概述
http://msdn.microsoft.com/zh-cn/library/ms257340(VS.80).aspx

 

Windows Management Instrumentation (Windows)
http://msdn.microsoft.com/en-us/library/aa394582(VS.85).aspx

 

WMI Series 1-8
http://www.google.cn/search?hl=zh-CN&newwindow=1&q=site%3Adev.youkuaiyun.com+WMI+Series

 

.net中的WMI编程(一):WMI介绍及简单应用
http://blog.youkuaiyun.com/zhoufoxcn/archive/2008/01/14/2042697.aspx

 

.net中的WMI编程(二):WMI中的WQL语言和WQL的测试工具
http://blog.youkuaiyun.com/zhoufoxcn/archive/2008/01/14/2044246.aspx

 

WMI使用小工具——WMI代码生成器
http://blog.youkuaiyun.com/zhoufoxcn/archive/2009/06/16/4272209.aspx

 

Visual C#中用WMI编写网络程序
http://www.anqn.com/dev/vc/2009-06-20/a09111805-1.shtml

 

WMI 远程连接问题解决方法
http://dragon0704.spaces.live.com/blog/cns!732dddd1803acb26!342.entry

 

利用WMI打造完美“三无”后门
http://huaidan.org/archives/2265.html

 

WMI使用说明
http://blog.youkuaiyun.com/stbrine/archive/2006/08/19/1096894.aspx

 

WMI初探随记
http://www.nukeblog.cn/article/pw/15.htm

 

WMI使用技巧集 C#
http://www.cnblogs.com/mopems/articles/74921.html

 

利用 WMI 修改计算机的网络设置
http://dev.youkuaiyun.com/article/21/21398.shtm

 

利WMI实现监视局域网计算机CPU使用情况
http://www.cnblogs.com/henryfan/archive/2006/09/14/503811.html

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值