Share via


Enlace de un filtro de eventos con un consumidor lógico

Después de crear el consumidor de eventos lógico y el filtro de eventos, debe vincularlos, lo que registra el consumidor lógico para recibir notificaciones sobre los eventos especificados por el filtro.

En el procedimiento siguiente se describe cómo enlazar un filtro de eventos con un consumidor lógico.

Pasos para enlazar un filtro de eventos con un consumidor lógico

  1. Cree una instancia de la clase __FilterToConsumerBinding del sistema en el repositorio de WMI.

    __FilterToConsumerBinding es una clase de asociación que vincula la instancia del filtro de eventos y la instancia del consumidor lógico mediante las propiedades de referencia Filter y Consumer. Para obtener más información, vea Declaración de una clase de asociación.

  2. Establezca la propiedad Filter en la instancia del filtro.

  3. Establezca la propiedad Consumer en la instancia del consumidor lógico.

  4. Establezca la propiedad DeliverSynchronously para determinar el tipo de entrega que quiere.

    La propiedad DeliverSynchronously determina cuándo WMI entrega notificaciones de eventos de forma sincrónica o asincrónica. Establecer esta propiedad en TRUE solicita una entrega sincrónica. Use la entrega sincrónica solo cuando el consumidor permanente pueda procesar los eventos en aproximadamente 100 microsegundos.

    Nota

    Dado que es posible que la devolución de llamada al receptor no se devuelva en el mismo nivel de autenticación que requiere el cliente, se recomienda usar la comunicación semisincrónica, en lugar de la asincrónica. Para obtener más información, vea Llamada a un método.

     

  5. Al anular el registro del consumidor de eventos lógico, asegúrese de eliminar la instancia de __FilterToConsumerBinding.

    Cada instancia de __FilterToConsumerBinding representa un registro para una notificación de eventos específica. Al eliminar un enlace, WMI desactiva el registro. Es posible que tenga que eliminar las instancias del filtro de eventos y del consumidor lógico para desactivar el registro, en función de la implementación.

En el ejemplo de código siguiente se muestra una instancia de __FilterToConsumerBinding que asocia una instancia de una clase ActiveScriptEventConsumer con un filtro de eventos específico (la instancia del consumidor de eventos se creó en el tema Creación de un consumidor lógico y el filtro de eventos se creó en el tema Creación de un filtro de eventos).

instance of __FilterToConsumerBinding
{
    Filter = $FILTER;
    Consumer = $CONSUMER;
    DeliverSynchronously=FALSE;

    // this is the Administrators SID in array of bytes format
    CreatorSID = {1,2,0,0,0,0,0,5,32,0,0,0,32,2,0,0}; 
};

Dos consumidores, ActiveScriptEventConsumer y CommandLineEventConsumer, no funcionarán a menos que su creador sea miembro del grupo local de administradores.

: Cuando un administrador crea una suscripción, su SID no se usa para la propiedad CreatorSID, sino que en su lugar se usa el SID del grupo de administradores local. Por lo tanto, los distintos administradores pueden crear instancias y la suscripción seguirá funcionando. Para obtener más información, vea Recepción de eventos de forma segura.

Cuando un filtro está enlazado a un consumidor lógico, el evento se registra mediante el Seguimiento de eventos para Windows (ETW). Para obtener más información, vea Seguimiento de la actividad de WMI.

Recepción de eventos en todo momento