WMI技术介绍和应用——接收事件

        时隔两三年,再次更新WMI系列博文。好在功能在三年前就已经实现了,现在只要补充些实例即可。

        之前介绍的基本都是查询静态数据,而本文将要介绍非常有意思的事件接收功能。(转载请指明出于breaksoftware的csdn博客)

    监控进程创建和死亡

        首先提一个问题,如何监控系统创建进程?比如有些软件会监控竞品是否创建,如果创建了就通知用户“不安全”。有一种做法就是使用Windows API遍历系统的进程,而实际上我们可以通过WMI获取这样的信息。

SELECT * FROM __InstanceCreationEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_Process'

        我打开一个记事本,来看看程序的输出

        这组信息,我们可能觉得有用的是进程名(Name)、进程启动命令(CommandLine)、创建时间(CreationDate)、进程所在路径(ExecutablePath),进程ID(ProcessId )、线程数(ThreadCount)等。

        我们可以使用如下指令监控进程的死亡,其返回字段和上图中一致

SELECT * FROM __InstanceDeletionEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_Process'

 

    监控USB设备插拔

        之前做PC版的手机助手,其中有一个功能就是监控USB设备插拔功能。如果有设备插入,则用ADB检测下是否有安卓设备插入。

SELECT * FROM __InstanceCreationEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_USBCOntrollerDevice

        该指令可以监控设备的创建(插入)


        其中有意义的信息是字段中包含的设备路径。

        可以使用如下指令监控设备移除,返回字段和上图一样,我就不贴了。

SELECT * FROM __InstanceDeletionEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_USBCOntrollerDevice'

 

    监控某个进程   

        我们可以通过指定进程名或者进程ID的形式,监控进程的改变

SELECT * FROM __InstanceModificationEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_Process' And TargetInstance.Name = 'Notepad.exe'
SELECT * FROM __InstanceModificationEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_Process' And TargetInstance.ProcessId  = 13792

        WMI的确是个强大的功能,如果一个进程内部集成一个WMI查询器,那么很多复杂的功能就会变成简单的WQL语句。当然它被使用最广的还是远程查询,我们可能在之后的章节中介绍这块的使用。

    监控电量

        随着平板和移动设备的兴起,电量将变量设备的一个重要性能,所以监控电量变化,可以衍生出很多产品。

SELECT * FROM __InstanceModificationEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_Battery'

        
        其中比较有用的字段是Availability和BatteryStatus

AvailabilityMeaning
1 (0x1)Other
2 (0x2)Unknown
3 (0x3)Running or Full Power
4 (0x4)Warning
5 (0x5)In Test
6 (0x6)Not Applicable
7 (0x7)Power Off
8 (0x8)Off Line
9 (0x9)Off Duty
10 (0xA)Degraded
11 (0xB)Not Installed
12 (0xC)Install Error
13 (0xD)Power Save - Unknown
The device is known to be in a power save mode, but its exact status is unknown.
14 (0xE)Power Save - Low Power Mode
The device is in a power save state but still functioning, and may exhibit degraded performance.
15 (0xF)Power Save - Standby
The device is not functioning, but could be brought to full power quickly.
16 (0x10)Power Cycle
17 (0x11)Power Save - Warning
The device is in a warning state, though also in a power save mode.

 

BatteryStatusMeaning
1The battery is discharging.
2The system has access to AC so no battery is being discharged. However, the battery is not necessarily charging.
3Fully Charged
4Low
5Critical
6Charging
7Charging and High
8Charging and Low
9Charging and Critical
10Undefined
11Partially Charged

         工程源码见《WMI技术介绍和应用——WMI概述》结尾。

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

breaksoftware

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值