最近我一直在学习有关WMI和WQL。 我发现的Win32类(从MSDN),我可以查询的名单,但我不能找出事件类的列表(应该是Win32的类别列表中的子集,是不是?)没有任何一个有一个列表或某种小抄的这个? 我仅仅指刚问这个是出于好奇。
例如,对于事件类- Win32_ProcessStartTrace
最近我一直在学习有关WMI和WQL。 我发现的Win32类(从MSDN),我可以查询的名单,但我不能找出事件类的列表(应该是Win32的类别列表中的子集,是不是?)没有任何一个有一个列表或某种小抄的这个? 我仅仅指刚问这个是出于好奇。
例如,对于事件类- Win32_ProcessStartTrace
下面是如何列出的WMI事件类root\cimv2
用C#和命名空间System.Management
:
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
实例。 传递到WQL查询ManagementObjectSearcher
是一个WMI元数据查询。 它用:
Meta_Class
指定查询的模式查询, __This
财产递归列出__Event
小类 (见这里和这里 )。
WMI类是如果供应商实现为一个事件WMI提供程序,并且必须是子类的事件类__Event
。 这并不意味着你不能用“普通” WMI类,如Win32_Process
和Win32_Service
在WQL事件查询。 你只需要使用一个__InstanceOperationEvent
衍生的辅助类,如__InstanceCreationEvent
或__InstanceDeletionEvent
和WMI将使用自己的事件子系统提供的事件。
下面是订阅样本WQL查询Win32_Process
创建事件:
Select * From __InstanceCreationEvent Within 5 Where TargetInstance Isa 'Win32_Process'
在这种情况下,你必须使用Within
子句。
WMI代码造物主是学习WMI的是,除其他事项外,让您探索本地或远程计算机上的WMI事件类和用于接收事件通知代码生成一个伟大的工具。
编辑:既然你标记你的问题是C#,你可能有兴趣在获取从编程特定类派生的事件类的列表的代码:
using System.Management;
...
string ancestor = "WMIEvent"; // the ancestor class
string scope = "root\\wmi"; // the WMI namespace to search within
try
{
EnumerationOptions options = new EnumerationOptions();
options.ReturnImmediately = true;
options.Rewindable = false;
ManagementObjectSearcher searcher =
new ManagementObjectSearcher(scope, "SELECT * FROM meta_class", options);
foreach (ManagementClass cls in searcher.Get())
{
if (cls.Derivation.Contains(ancestor))
{
Console.WriteLine(cls["__CLASS"].ToString());
}
}
}
catch (ManagementException exception)
{
Console.WriteLine(exception.Message);
}
没有MSDN有所有的清单MSMCA这里班
更新:
我不这样做吨的工作与WMI,但我刚刚发现这个WMI工具,这将是有帮助的。 它给你的观看对象的WMI层次结构中的图形用户界面,甚至可以让你注册并消费事件。 这应该给你你需要的信息。