注册事件提供程序

若要创建 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 类的一些磁盘驱动器提供实例创建事件。