c# - WMIEvent 类列表

标签 c# wmi wmi-query wql

最近在学习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 子类

(参见 herehere)。

如果 WMI 类的提供者实现为事件 WMI 提供者并且必须是 __Event 的子类,则 WMI 类是一个事件类。这并不意味着您不能在 WQL 事件查询中使用“普通”WMI 类,例如 Win32_ProcessWin32_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/

相关文章:

powershell - 如何在输出中包含计算机名

c# - 充当列表管理器(包含列表的列表)以减少样板代码的抽象类?

wmi - 可以通过 ADO 访问 WMI 吗?

perl - WMI 查询返回不完整的结果

c# - WMI 查询子域中的 DNS CNAME

c# - "Status"返回一个 WMI 功能是空的

c# - 如何为 Ubuntu 12.04 开发 C#.NET 应用程序

c# - 如何使用 HttpClient 返回 "refresh"cookie

c# - 如何更改日期格式和文化?

c# - 在 Get-WmiObject Powershell 查询上选择前 5 个或限制为 5 个条目