Escritura de un proveedor de eventos

Un proveedor de eventos es un objeto COM que proporciona a WMI notificaciones de eventos intrínsecos y extrínsecos. Un evento intrínseco informa de un cambio de datos interno a WMI, mientras que un evento extrínseco informa de un evento definido por el usuario que no se describe mediante un evento intrínseco. Por ejemplo, un evento en respuesta a los cambios, creación o eliminación de la clase Win32_LogicalDisk se clasificaría como un evento intrínseco. Un evento que se genera como resultado de una acción diferente de la modificación, creación o eliminación de un objeto WMI existente es un evento extrínseco. Independientemente de la clase admitida, puede implementar todos los proveedores de eventos de la misma manera.

En el procedimiento siguiente se describe cómo implementar un proveedor de eventos.

Procedimientos para implementar un proveedor de eventos

  1. Diseñe y registre el proveedor de clases con WMI.

    Los proveedores de clases se registran con WMI mediante la creación de una instancia __Win32Provider y una clase __EventProviderRegistration. Para obtener más información, vea Registro de un proveedor de eventos.

  2. Implemente la interfaz IWbemProviderInit para el proveedor.

    La interfaz IWbemProviderInit es una interfaz común que WMI usa para cargar e inicializar todos los proveedores. Para obtener más información, vea Inicialización de un proveedor.

  3. Implemente IWbemEventProvider como la interfaz principal del proveedor.

    La interfaz IWbemEventProvider usa el método ProviderEvents para proporcionar eventos a WMI. A fin de obtener más información, vea Implementación de la interfaz principal para un proveedor de eventos.

    Nota

    Los proveedores de eventos deben usar el modelo de subprocesamiento múltiple "Both".

     

  4. Opcionalmente, también puede implementar la interfaz IWbemEventProviderQuerySink para aumentar el rendimiento del proveedor de eventos.

    La interfaz IWbemEventProviderQuerySink permite al proveedor optimizar las consultas antes de enviar una respuesta a WMI, y es más útil para un proveedor que proporciona eventos de varios tipos y que necesita realizar tantas optimizaciones internas como sea posible. Para obtener más información, vea Optimización de un proveedor de eventos.

  5. Implemente la interfaz IWbemEventProviderSecurity para limitar los consumidores a determinados id. de seguridad (SID) o implementar IWbemEventSink::SetSinkSecurity para proteger el propio receptor. El proveedor también puede establecer la propiedad SECURITY_DESCRIPTOR en la clase de eventos para proteger eventos individuales en el código MOF. Para obtener más información, vea Protección de eventos de WMI.

  6. Agregue cualquier código adicional que necesite el proveedor.

    Al diseñar el proveedor, probablemente tendrá que llamar a interfaces de WMI. Para obtener más información, vea Llamada a un método.

    Al recuperar información de un cliente, es posible que tenga que acceder a los niveles de seguridad de ese cliente. Para más información, consulte Suplantar un cliente.

  7. Reemplace el proveedor existente por el nuevo código.

    No es necesario realizar este paso si no hay un proveedor existente para copiar encima. Para obtener más información, vea Actualización de un proveedor.

Una aplicación cliente puede solicitar un evento si se registra a sí misma con WMI como un consumidor de eventos. Para obtener más información, vea Recepción de un evento WMI.