最近在学习WMI和WQL。我找到了可以查询的 Win32 类列表(来自 MSDN),但我无法找到事件类列表(应该是 Win32 类列表的子集,不是吗?)有这个 list 或某种备忘单吗?我只是出于好奇而问这个。
事件类示例 - Win32_ProcessStartTrace
最佳答案
以下是使用 C# 和 System.Management
列出 root\cimv2
命名空间中的 WMI 事件类的方法:
using System;
using System.Management;
class Program
{
static void Main()
{
string query =
@"Select * From Meta_Class Where __This Isa '__Event'";
ManagementObjectSearcher searcher =
new ManagementObjectSearcher(query);
foreach (ManagementBaseObject cimv2Class in searcher.Get())
{
Console.WriteLine(cimv2Class.ClassPath.ClassName);
}
}
}
root\cimv2
是默认的 WMI 命名空间,因此您不必使用 ManagementScope
实例。传递给 ManagementObjectSearcher
的 WQL 查询是一个 WMI 元数据查询。它使用:
Meta_Class
将查询指定为架构查询,以及__This
属性递归列出__Event
子类
如果 WMI 类的提供者实现为事件 WMI 提供者并且必须是 __Event
的子类,则 WMI 类是一个事件类。这并不意味着您不能在 WQL 事件查询中使用“普通”WMI 类,例如 Win32_Process
和 Win32_Service
。您只需使用 __InstanceOperationEvent
派生的帮助程序类之一,如 __InstanceCreationEvent
或 __InstanceDeletionEvent
,WMI 将使用其自己的事件子系统来传递事件。
这是订阅 Win32_Process
创建事件的示例 WQL 查询:
Select * From __InstanceCreationEvent Within 5 Where TargetInstance Isa 'Win32_Process'
在这种情况下,您必须使用 Within
条款。
关于c# - WMIEvent 类列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1043220/