注册事件提供程序

若要创建 WMI 事件提供程序,必须使用__EventProviderRegistration实例注册表示提供程序的__Win32Provider实例。 作为 COM 对象,提供程序必须注册到操作系统和 WMI。 以下过程假定你已经实现了注册过程,如 注册提供程序中所述。

以下过程介绍如何注册事件提供程序。

注册事件提供程序

  1. 创建 描述提供程序的__Win32Provider 类的实例。

  2. 创建描述提供程序功能集 的 __EventProviderRegistration 类的实例。

    __EventProviderRegistration类从__ObjectProviderRegistration父类继承许多属性。 __EventProviderRegistration类的本地属性是提供程序的对象路径,以及描述提供程序支持的事件的查询列表。 有关详细信息,请参阅 查询 WMI

  3. __Win32Provider__EventProviderRegistration 类的实现加载到 WMI 存储库中。

    WMI 使用类定义注册和访问事件提供程序。 有关详细信息,请参阅 注册提供程序

下面的代码示例介绍 __Win32Provider 类和 __EventProviderRegistration 类的实现。

instance of __Win32Provider as $P
{
    ClientLoadableCLSID = NULL;
    CLSID = "{AA7828C5-95F9-11d2-BB0D-00C042424242}";
    DefaultMachineName = NULL;
    ImpersonationLevel = 0;
    InitializationReentrancy = 0;
    InitializeAsAdminFirst = FALSE;
    Name = "FaxEventProvider";
    PerLocaleInitialization = FALSE;
    PerUserInitialization = FALSE;
    Pure = TRUE;
    UnloadTimeout = NULL;
};

instance of __EventProviderRegistration
{  
Provider = $P;
EventQueryList = {
         "SELECT * FROM FaxEvent",
         "SELECT * FROM __InstanceCreationEvent WHERE TargetInstance ISA \"Win32_LogicalDisk\""};
};

第一个查询指示提供程序为 extrinsic 事件类 FaxEvent 生成所有事件通知。 由于它使用 ISA 运算符,因此第二个查询意味着提供程序将为 Win32_LogicalDisk 类及其所有子类的所有实例创建事件生成通知。

当提供程序注册以提供内部事件时,该事件必须应用于类的所有实例。 换句话说,无法写入查询,以便只为属于 Win32_LogicalDisk 类的某些磁盘驱动器提供实例创建事件。