实现事件提供程序的主接口
事件提供程序必须实现 IWbemEventProvider 接口才能生成事件通知。 WMI 调用属性的 IWbemEventProvider::ProvideEvents 方法,并传入指向接收器对象的指针,这是 IWbemObjectSink 接口的实现。 当事件提供程序准备好生成通知时,提供程序将调用 IWbemObjectSink::Indicate 方法。
事件提供程序应将通过 IWbemEventProvider 生成的通知放在事件对象中。 应将事件对象实现为由 Indicate 方法的 ppObjArray 参数表示的 IWbemClassObject 接口数组中的条目。 由于 IWbemClassObjects 是 COM 对象,因此,提供程序必须通过调用 IWbemObjectSink::AddRef 方法递增接收器的引用计数。 必须提供许多通知(例如 400 个事件)的事件提供程序应通过生成新实例或克隆现有实例为每个通知创建唯一的事件对象。 WMI 永远不会在 Indicate 调用完成后保留事件对象,并且对 AddRef 没有超出 COM 标准的特殊要求。
实现事件提供程序时,请考虑以下准则:
为客户端调用提供服务时,请勿进行任何类更改。
不要发出任何与事件相关的调用,例如修改事件筛选器的调用。
在重新触发事件之前,处理 Windows 管理服务发出的任何请求,例如 CancelQuery。
如果不处理请求,则重新触发事件可能会阻止事件被接受。
切勿从提供程序内部调用 IWbemObjectSink::SetStatus。