将事件筛选器与逻辑使用者绑定

创建逻辑事件使用者和事件筛选器后,必须将其链接,此操作可以注册逻辑使用者以接收有关筛选器指定事件的通知。

以下过程描述了如何将事件筛选器与逻辑使用者绑定。

若要将事件筛选器与逻辑使用者绑定

  1. 在 WMI 存储库中创建 __FilterToConsumerBinding 系统类的实例。

    __FilterToConsumerBinding 类是一个关联类,通过 Filter 和 Consumer 引用属性将事件筛选器实例和逻辑使用者实例链接。 有关详细信息,请参阅声明关联类

  2. 将 Filter 属性设置为筛选器的实例。

  3. 将 Consumer 属性设置为逻辑使用者的实例。

  4. 设置 DeliverSynchronously 属性以确定所需的传递类型。

    DeliverSynchronously 属性确定 WMI 何时同步或异步传递事件通知。 将此属性设置为 TRUE 可请求同步传递。 仅当永久使用者可以在大约 100 微秒内处理事件时,才使用同步传递。

    注意

    由于对接收器的回调可能不会以客户端所需的相同身份验证级别返回,因此建议使用半同步而不是异步通信。 有关详细信息,请参阅调用方法

     

  5. 如果取消注册逻辑事件使用者,请确保删除 __FilterToConsumerBinding 实例。

    每个 __FilterToConsumerBinding 实例表示特定事件通知的注册。 如果删除绑定,WMI 会停用注册。 可能必须删除逻辑使用者和事件筛选器实例才能停用注册,具体取决于实现。

以下代码示例显示了一个 __FilterToConsumerBinding 实例,它将 ActiveScriptEventConsumer 类的实例与特定事件筛选器关联(事件使用者实例在创建逻辑使用者主题中创建,事件筛选器在创建事件筛选器主题中创建)。

instance of __FilterToConsumerBinding
{
    Filter = $FILTER;
    Consumer = $CONSUMER;
    DeliverSynchronously=FALSE;

    // this is the Administrators SID in array of bytes format
    CreatorSID = {1,2,0,0,0,0,0,5,32,0,0,0,32,2,0,0}; 
};

ActiveScriptEventConsumerCommandLineEventConsumer 这两个使用者都不起作用,除非其创建者是本地管理员组的成员。

:当管理员创建订阅时,其 SID 不用于 CreatorSID 属性,而使用本地管理员组的 SID。 因此,实例可以由不同的管理员创建,并且订阅仍然有效。 有关详细信息,请参阅安全接收事件

筛选器绑定到逻辑使用者后,事件将由 Windows (ETW) 的事件跟踪记录。 有关详细信息,请参阅跟踪 WMI 活动

随时接收事件