Реализация основного интерфейса для поставщика событий

Поставщик событий должен реализовать интерфейс IWbemEventProvider для создания уведомлений о событиях. WMI вызывает метод IWbemEventProvider::P rovideEvents поставщика и передает указатель на объект приемника, который является реализацией интерфейса IWbemObjectSink . Когда поставщик событий будет готов к созданию уведомления, он вызывает метод IWbemObjectSink::Indicate .

Поставщик событий должен помещать уведомления, созданные с помощью IWbemEventProvider , в объекты событий. Объекты событий следует реализовать в виде записей в массиве интерфейсов IWbemClassObject , представленных параметром ppObjArray метода Indicate . Так как IWbemClassObjects являются COM-объектами, поставщик должен увеличить число ссылок для приемника, вызвав метод IWbemObjectSink::AddRef . Поставщики событий, которые должны предоставлять множество уведомлений (например, 400 событий), должны создать уникальный объект события для каждого уведомления путем создания нового экземпляра или клонирования существующего. WMI никогда не удерживает объект события после завершения вызова Indicate и не имеет особых требований к AddRef , которые выходят за рамки стандарта COM.

При реализации поставщика событий учитывайте следующие рекомендации.

  • Не изменяйте класс во время обслуживания вызова клиента.

  • Не следует выполнять вызовы, связанные с событиями, например вызов, изменяющий фильтр событий.

  • Обработайте все запросы, с которыми выдает служба управления Windows, например CancelQuery, перед повторной обработкой события.

    Если вы не обработаете запрос, повторная обработка события может заблокировать его принятие.

  • Никогда не вызывайте IWbemObjectSink::SetStatus из поставщика.