Создание поставщика событий

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

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

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

  1. Проектирование и регистрация поставщика классов с помощью инструментария WMI.

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

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

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

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

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

    Примечание

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

     

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

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

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

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

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

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

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

    Если у вас нет поставщика для копирования, этот шаг выполнять не нужно. Дополнительные сведения см. в разделе Обновление поставщика.

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