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


Написание поставщика событий

Поставщик событий — это COM-объект, который предоставляет WMI с уведомлениями о встроенных и внешних событиях. Встроенное событие сообщает об изменении внутренних данных на WMI, в то время как экстринсическое событие сообщает о определяемом пользователем событии, не описанном встроенным событием. Например, событие в ответ на изменения, создание или удаление класса Win32_LogicalDisk будет классифицироваться как встроенное событие. Событие, созданное на основе чего-либо, отличного от изменения, создания или удаления существующего объекта WMI, является экстринсическим событием. Независимо от поддерживаемого класса, можно реализовать все поставщики событий одинаково.

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

Реализовать поставщика событий

  1. Разработайте и зарегистрируйте вашего поставщика классов в WMI.

    Поставщики классов регистрируются в WMI путем создания экземпляра __Win32Provider и класса __EventProviderRegistration. Дополнительные сведения см. в разделе «Регистрация поставщика событий».

  2. Реализуйте интерфейс IWbemProviderInit для поставщика.

    Интерфейс IWbemProviderInit — это общий интерфейс WMI, используемый для загрузки и инициализации всех поставщиков. Для получения дополнительной информации см. раздел Инициализация поставщика.

  3. Реализуйте IWbemEventProvider в качестве основного интерфейса для поставщика.

    Интерфейс IWbemEventProvider использует метод ProviderEvents для предоставления событий WMI. Дополнительные сведения см. в разделе Реализация основного интерфейса для поставщика событий.

    Заметка

    Поставщики событий должны использовать модель многопоточности "Both".

     

  4. При необходимости можно также реализовать интерфейс IWbemEventProviderQuerySink для повышения производительности поставщика событий.

    Интерфейс IWbemEventProviderQuerySink позволяет поставщику оптимизировать запросы перед отправкой ответа в WMI и наиболее полезно для поставщика, который предоставляет события нескольких типов, и он должен выполнять как можно больше внутренних оптимизаций. Дополнительные сведения см. в разделе Оптимизация поставщика событий.

  5. Реализуйте интерфейс IWbemEventProviderSecurity, чтобы ограничить потребителей доступом к определённым идентификаторам безопасности (SID) или реализуйте IWbemEventSink::SetSinkSecurity для защиты самого ресивера. Поставщик также может задать свойство SECURITY_DESCRIPTOR в классе событий для защиты отдельных событий в коде MOF. Дополнительные сведения см. в разделе Защита событий WMI.

  6. Добавьте дополнительный код, необходимый для вашего поставщика.

    При разработке поставщика вам, скорее всего, понадобится вызывать интерфейсы WMI. Дополнительные сведения см. в статье Вызов метода.

    При получении сведений для клиента может потребоваться доступ к уровням безопасности для этого клиента. Дополнительные сведения см. в разделе "Олицетворение клиента".

  7. Замените текущий код поставщика вашим новым кодом.

    Этот шаг не нужно выполнять, если у вас нет существующего поставщика для копирования. Для получения дополнительной информации см. Обновление поставщика.

Клиентское приложение может запросить событие, зарегистрируя себя в WMI в качестве потребителя событий. Для получения дополнительной информации см. событие WMI.