Determinación del tipo de evento que se va a recibir

Antes de registrarse para recibir un evento, debe determinar los tipos de eventos que se van a recibir: intrínsecos o extrínsecos. Para más información sobre cómo recibir eventos, vea Recepción de un evento de WMI. Para más información sobre cómo proporcionar eventos, vea Desarrollo de un proveedor de WMI y Escritura de un proveedor de eventos. Para más información sobre los problemas de seguridad para recibir y proporcionar eventos, vea Protección de eventos de WMI.

Eventos intrínsecos

Un evento intrínseco es el que se produce en respuesta a un cambio en el modelo de datos de WMI estándar. Cada clase de evento intrínseco representa un tipo específico de cambio y aparece cuando WMI o un proveedor crea, elimina o modifica un espacio de nombres, una clase o una instancia de clase. Por ejemplo, la creación de una instancia de Win32_LogicalDisk daría lugar a una instancia de __InstanceCreationEvent.

WMI crea eventos intrínsecos para los objetos almacenados en el repositorio de WMI. Un proveedor genera eventos intrínsecos para clases dinámicas, pero WMI puede crear una instancia para una clase dinámica si no hay ningún proveedor disponible. WMI usa el sondeo para detectar los cambios. En la tabla siguiente se enumeran las clases del sistema que WMI usa para notificar eventos intrínsecos.

Clase del sistema Descripción
__ClassCreationEvent Notifica a un consumidor cuando se crea una clase.
__ClassDeletionEvent Notifica a un consumidor cuando se elimina una clase.
__ClassModificationEvent Notifica a un consumidor cuando se modifica una clase.
__InstanceCreationEvent Notifica a un consumidor cuando se crea una instancia de clase.
__InstanceOperationEvent Notifica a un consumidor cuando se produce cualquier evento de instancia, como la creación, eliminación o modificación de la instancia. Puede usar esta clase en consultas para obtener todos los tipos de eventos asociados a una instancia.
__InstanceDeletionEvent Notifica a un consumidor cuando se elimina una instancia.
__InstanceModificationEvent Notifica a un consumidor cuando se modifica una instancia.
__NamespaceCreationEvent Notifica a un consumidor cuando se crea un espacio de nombres.
__NamespaceDeletionEvent Notifica a un consumidor cuando se elimina un espacio de nombres.
__NamespaceModificationEvent Notifica a un consumidor cuando se modifica un espacio de nombres.
__ConsumerFailureEvent Notifica a un consumidor cuando se quita algún otro evento debido a un error por parte de un consumidor de eventos.
__EventDroppedEvent Notifica a un consumidor cuando se quita algún otro evento en lugar de entregarse al consumidor de eventos solicitante.
__EventQueueOverflowEvent Notifica a un consumidor cuando se quita un evento como resultado de un desbordamiento de la cola de entrega.
__MethodInvocationEvent Notifica a un consumidor cuando se produce un evento de llamada de método.

 

Eventos extrínsecos

Un evento extrínseco es una repetición predefinida que no se puede vincular directamente a los cambios en el modelo de datos de WMI. Por tanto, WMI permite a un proveedor de eventos definir una clase de eventos que describa el evento. Por ejemplo, un evento que describe un cambio de equipo al modo independiente es un evento extrínseco. Un proveedor deriva un evento extrínsecos de la clase del sistema __ExtrinsicEvent, que es una subclase de la clase del sistema __Event. Los proveedores Registro del sistema y SNMP definen clases de eventos extrínsecos, como RegistryKeyChangeEvent, que notifica a un consumidor cuando cambia una clave del Registro. Para más información, vea Registro de eventos del Registro del sistema y Escritura de un proveedor de eventos.

En el ejemplo siguiente, un proveedor de eventos notifica infracciones de seguridad en uno o varios edificios. La siguiente clase se puede definir para el evento extrínseco que representa una infracción de seguridad.

class SecurityViolationEvent : __ExtrinsicEvent
{
   string Building;           // building where violation occurred
   sint32 EntranceNumber;     // entrance where violation occurred
   datetime TimeOfDetection;  // date and time of violation
}

Para recibir las notificaciones de infracción de seguridad, un consumidor se registra para el tipo de evento SecurityViolationEvent. A menos que se especifique lo contrario, un consumidor recibe una notificación de todas las infracciones de seguridad durante todos los períodos de tiempo y en todos los edificios. La clase de eventos también contiene información que los consumidores pueden usar para solicitar eventos más específicos.

En el ejemplo siguiente, la consulta registra al consumidor solo los eventos de infracción de seguridad en la compilación 24.

SELECT * FROM SecurityViolationEvent WHERE Building = 24;