Compartir a través de


Implementación de la interfaz principal para un proveedor de eventos

Un proveedor de eventos debe implementar la interfaz IWbemEventProvider para generar notificaciones de eventos. WMI llama al método IWbemEventProvider::P rovideEvents del proveedor y pasa un puntero al objeto receptor, que es una implementación de la interfaz IWbemObjectSink. Cuando el proveedor de eventos está listo para generar una notificación, llama al método IWbemObjectSink::Indicate.

Un proveedor de eventos debe colocar las notificaciones generadas mediante IWbemEventProvider en objetos de eventos. Debe implementar objetos de eventos como entradas en una matriz de interfaces IWbemClassObject representadas por el parámetro ppObjArray del método Indicate. Dado que IWbemClassObjects son objetos COM, el proveedor debe incrementar el recuento de referencias del receptor llamando al método IWbemObjectSink::AddRef. Los proveedores de eventos que deben proporcionar muchas notificaciones (por ejemplo, 400 eventos) deben crear un objeto de evento único para cada notificación generando una nueva instancia o clonando una existente. WMI nunca se aferra a un objeto de evento más allá de la finalización de la llamada Indicate y no tiene requisitos especiales para AddRef por encima y más allá del estándar COM.

Tenga en cuenta las siguientes directrices al implementar un proveedor de eventos:

  • No realice ningún cambio de clase durante la atención de una llamada de cliente.

  • No emita ninguna llamada relacionada con eventos, como una llamada que modifique un filtro de eventos.

  • Procese las solicitudes que emite el servicio de administración de Windows, como CancelQuery, antes de volver a desencadenar un evento.

    Si no procesa la solicitud, es posible que al volver a desencadenar el evento se bloquee su aceptación.

  • Nunca llame a IWbemObjectSink::SetStatus desde un proveedor.