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;