Поделиться через


Привязка фильтра событий к логическому потребителю

После создания логического потребителя событий и фильтра событий необходимо связать их, чтобы зарегистрировать логический потребитель для получения уведомлений о событиях, указанных фильтром.

В следующей процедуре описывается привязка фильтра событий к логическому потребителю.

Привязка фильтра событий к логическому потребителю

  1. Создайте экземпляр системного класса __FilterToConsumerBinding в репозитории WMI.

    Класс __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}; 
};

Два потребителя, ActiveScriptEventConsumer и CommandLineEventConsumer, не будут работать, если их создатель не является членом локальной группы администраторов.

: Когда администратор создает подписку, его идентификатор безопасности не используется для свойства CreatorSID , но вместо него используется идентификатор безопасности локальной группы администраторов. Таким образом, экземпляры могут создаваться разными администраторами, и подписка по-прежнему будет работать. Дополнительные сведения см. в разделе Безопасное получение событий.

Когда фильтр привязан к логическому потребителю, событие записывается с помощью трассировки событий Windows (ETW). Дополнительные сведения см. в разделе Трассировка действия WMI.

Получение событий в любое время