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
| 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概述》結尾。
總結
以上是生活随笔為你收集整理的WMI技术介绍和应用——接收事件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 以金山界面库(openkui)为例思考和
- 下一篇: WMI技术介绍和应用——执行方法