题
最近我已经学习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
是系统的元数据查询。它用途:
Meta_Class
指定的查询作为一种模式查询,__This
酒店递归列表__Event
子类
WMI类是一个类事件,如果它提供实现为一个事件WMI提供者必须被一个子类的 __Event
.这并不意味着你不能使用"普通"类喜欢 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);
}
不隶属于 StackOverflow