Determinazione del tipo di evento da ricevere
Prima di registrarsi per ricevere un evento, è necessario determinare i tipi di eventi da ricevere: intrinseci o estrini. Per altre informazioni su come ricevere eventi, vedere Ricezione di un evento WMI. Per altre informazioni sulla fornitura di eventi, vedere Sviluppo di un provider WMI e scrittura di un provider di eventi. Per altre informazioni sui problemi di sicurezza per la ricezione e la fornitura di eventi, vedere Protezione degli eventi WMI.
Eventi intrinseci
Un evento intrinseco è un evento che si verifica in risposta a una modifica nel modello di dati WMI standard. Ogni classe di eventi intrinseci rappresenta un tipo specifico di modifica e si verifica quando WMI o un provider crea, elimina, rimuove o modifica uno spazio dei nomi, una classe o un'istanza della classe. Ad esempio, la creazione di un'istanza di Win32_LogicalDisk genera un'istanza di __InstanceCreationEvent .
WMI crea eventi intrinseci per gli oggetti archiviati nel repository WMI. Un provider genera eventi intrinseci per le classi dinamiche, ma WMI può creare un'istanza per una classe dinamica se non è disponibile alcun provider. WMI usa il polling per rilevare le modifiche. Nella tabella seguente sono elencate le classi di sistema usate da WMI per segnalare gli eventi intrinseci.
Classe di sistema | Descrizione |
---|---|
__ClassCreationEvent | Notifica a un consumer quando viene creata una classe. |
__ClassDeletionEvent | Notifica a un consumer quando viene eliminata una classe. |
__ClassModificationEvent | Notifica a un consumer quando viene modificata una classe. |
__InstanceCreationEvent | Notifica a un consumer quando viene creata un'istanza di classe. |
__InstanceOperationEvent | Notifica a un consumer quando si verifica un evento di istanza, ad esempio la creazione, l'eliminazione o la modifica dell'istanza. È possibile usare questa classe nelle query per ottenere tutti i tipi eventi associati a un'istanza di . |
__InstanceDeletionEvent | Notifica a un consumer quando un'istanza viene eliminata. |
__InstanceModificationEvent | Notifica a un consumer quando un'istanza viene modificata. |
__NamespaceCreationEvent | Notifica a un consumer quando viene creato uno spazio dei nomi. |
__NamespaceDeletionEvent | Notifica a un consumer quando viene eliminato uno spazio dei nomi. |
__NamespaceModificationEvent | Notifica a un consumer quando viene modificato uno spazio dei nomi. |
__ConsumerFailureEvent | Notifica a un consumer quando viene eliminato un altro evento a causa di un errore da parte di un consumer di eventi. |
__EventDroppedEvent | Notifica a un consumer quando viene eliminato un altro evento anziché essere recapitato al consumer di eventi richiedente. |
__EventQueueOverflowEvent | Notifica a un consumer quando un evento viene eliminato a causa di un overflow della coda di recapito. |
__MethodInvocationEvent | Notifica a un consumer quando si verifica un evento di chiamata al metodo. |
Eventi estristrici
Un evento estrinsico è un'occorrenza predefinita che non può essere collegata direttamente alle modifiche nel modello di dati WMI. WMI consente pertanto a un provider di eventi di definire una classe di evento che descrive l'evento. Ad esempio, un evento che descrive un computer che passa alla modalità stand-by è un evento estrinsico. Un provider deriva un evento estrinsico dalla classe di sistema __ExtrinsicEvent , che è una sottoclasse della classe di sistema __Event . I provider Registro di sistema e SNMP definiscono classi di evento estrinsiche, ad esempio RegistryKeyChangeEvent, che notifica a un consumer quando viene modificata una chiave del Registro di sistema. Per altre informazioni, vedere Registrazione per gli eventi del Registro di sistema e Scrittura di un provider di eventi.
Nell'esempio seguente un provider di eventi segnala violazioni di sicurezza a uno o più edifici. La classe seguente può essere definita per l'evento estrinsico che rappresenta una violazione di sicurezza.
class SecurityViolationEvent : __ExtrinsicEvent
{
string Building; // building where violation occurred
sint32 EntranceNumber; // entrance where violation occurred
datetime TimeOfDetection; // date and time of violation
}
Per ricevere le notifiche di violazione di sicurezza, un consumer esegue la registrazione per il tipo di evento SecurityViolationEvent. Se non diversamente specificato, un utente riceve una notifica di tutte le violazioni di sicurezza durante tutti i periodi di tempo e in tutti gli edifici. La classe di evento contiene anche informazioni che gli utenti possono usare per richiedere eventi più specifici.
Nell'esempio seguente la query registra l'utente per gli eventi di violazione della sicurezza solo nell'edificio 24.
SELECT * FROM SecurityViolationEvent WHERE Building = 24;