首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >WMI技术介绍和应用——接收事件

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

作者头像
方亮
发布2019-01-16 16:26:42
9150
发布2019-01-16 16:26:42
举报
文章被收录于专栏:方亮方亮

        时隔两三年,再次更新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

Availability

Meaning

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.

BatteryStatus

Meaning

1

The battery is discharging.

2

The system has access to AC so no battery is being discharged. However, the battery is not necessarily charging.

3

Fully Charged

4

Low

5

Critical

6

Charging

7

Charging and High

8

Charging and Low

9

Charging and Critical

10

Undefined

11

Partially Charged

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年01月19日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  •     监控进程创建和死亡
  •     监控USB设备插拔
  •     监控某个进程   
  •     监控电量
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档