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