Recepción de eventos en cualquier momento
Es posible que quiera escribir una aplicación que pueda reaccionar a eventos en cualquier momento. Por ejemplo, puede que un administrador quiera recibir un mensaje de correo electrónico cuando se reduzcan determinadas medidas de rendimiento en los servidores de red. En este caso, la aplicación debe ejecutarse en todo momento. Sin embargo, la ejecución continua de una aplicación no es un uso eficaz de los recursos del sistema. En su lugar, WMI permite crear un consumidor de eventos permanente. Los consumidores de eventos permanentes deben cumplir requisitos de seguridad especiales. Para más información, consulte Protección de eventos de WMI.
Un consumidor de eventos permanente recibe eventos hasta que su registro se cancela explícitamente.
Un consumidor de eventos permanente es una combinación de las siguientes clases, filtros y objetos COM de WMI que residen en el sistema:
- Un objeto COM denominado consumidor físico. WMI proporciona varios consumidores permanentes estándar. Por ejemplo, el consumidor de Active Script Event ejecuta un script cuando se produce un evento.
- Una nueva clase de consumidor permanente.
- Una instancia de la clase de consumidor permanente denominada un consumidor lógico.
- Un filtro que contiene la consulta de eventos.
- Una vinculación entre el consumidor y el filtro.
Las propiedades de un consumidor de eventos lógicos especifican las acciones que se van a realizar cuando se notifica un evento, pero no definen las consultas de eventos con las que están asociadas. Cuando se señala, WMI carga automáticamente el objeto COM que representa al consumidor de eventos permanente en la memoria activa. Normalmente, esto ocurre durante el inicio o en respuesta a un evento desencadenador. Después de activarse, el consumidor de eventos permanente actúa como un consumidor de eventos normal, pero permanece hasta que el sistema operativo lo descarga específicamente.
Puede escribir su propio consumidor de eventos permanente o usar las clases de consumidor estándar preinstaladas de WMI, como ActiveScriptEventConsumer. Para más información, consulte Clases de consumidor estándar, Supervisión y respuesta a eventos con consumidores estándar y Supervisión de eventos.
En el procedimiento siguiente se describe cómo crear su propio consumidor de eventos permanente.
Para crear su propio consumidor de eventos permanente
Determine el tipo de eventos que desea recibir.
WMI admite eventos intrínsecos y extrínsecos. Un evento intrínseco es un evento predefinido por WMI, mientras que un evento extrínseco es un evento definido por un proveedor de terceros. Para más información, consulte Determinación del tipo de evento que se va a recibir.
Implemente un consumidor físico.
La principal diferencia entre una aplicación de administración y un consumidor físico es que un usuario carga y descarga una aplicación de administración, mientras que WMI carga y descarga un consumidor físico. La mayoría de la codificación debe estar en el consumidor físico.
Nota
Este paso es el primero del procedimiento para facilitar una explicación. En términos de codificación, el consumidor físico debería crearse en último lugar. De este modo, puede diseñar los parámetros y la lógica para un proveedor de eventos permanente antes de comenzar la larga codificación. Sin embargo, no hay ninguna restricción para escribir primero el consumidor físico.
Cree una clase de consumidor que describa el consumidor físico.
Como cualquier otra clase, la clase de consumidor describe los parámetros generales de un consumidor de eventos permanente en WMI.
Cree una instancia de la clase de consumidor.
Al igual que cualquier otra clase de WMI, debe crear una instancia de la clase de consumidor si desea implementarla. Una instancia de una clase de consumidor también se conoce como un consumidor lógico. El consumidor lógico representa al consumidor físico en WMI.
-
Las consultas de eventos que activan consumidores de eventos permanentes se denominan filtros de eventos. Un único filtro de eventos se puede asociar a varios consumidores de eventos lógicos. Además, varios filtros de eventos se puede asociar a un único consumidor de eventos lógicos. El filtro es una instancia de __EventFilter.
Se genera un evento Registro de NT cuando se produce un error en la consulta de un consumidor de eventos permanente. El origen del evento es WinMgmt, el identificador del evento es 10 y el tipo de evento es Error.
Vincule el filtro de eventos al consumidor lógico.
Al vincular el filtro de eventos al consumidor lógico, se indica a WMI qué filtro de eventos pertenece al consumidor lógico. Los consumidores de eventos lógicos y los filtros de eventos están vinculados mediante una instancia de clase de asociación de __FilterToConsumerBinding. Cuando se recibe un evento que coincide con una consulta de eventos descrita en un filtro de eventos, WMI busca el consumidor de eventos lógicos asociado examinando la instancia de clase de asociación. Una vez que se encuentra la instancia de consumidor de eventos lógicos, WMI usa una instancia de la clase __EventConsumerProviderRegistration para buscar y ejecutar el consumidor de eventos físico asociado a esta instancia.
Escritura de un proveedor de consumidores de eventos.
El proveedor de consumidores de eventos es un objeto COM que localiza el consumidor físico para WMI.