Determinazione del tipo di evento da ricevere
Prima di registrarsi per ricevere un evento, è necessario determinare i tipi di eventi da ricevere: intrinseci o estrinseci. Per ulteriori informazioni su come ricevere eventi, vedere Ricevere un evento WMI. Per ulteriori informazioni sulla fornitura di eventi, vedere Sviluppare un provider WMI e Scrivere 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 evento intrinseca rappresenta un tipo specifico di modifica e si verifica quando WMI o un provider crea, elimina o modifica uno spazio dei nomi, una classe o un'istanza di 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 eventi intrinseci.
Classe di sistema | Descrizione |
---|---|
__ClassCreationEvent | Notifica a un consumer quando viene creata una classe. |
__EventoEliminazioneClasse | 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 di 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 consumatore quando viene creato uno spazio dei nomi. |
__NamespaceDeletionEvent | Notifica a un consumatore quando viene eliminato il namespace. |
__NamespaceModificationEvent | Notifica a un consumatore quando viene modificato uno spazio dei nomi. |
__ConsumerFailureEvent | Notifica a un consumatore quando un evento viene eliminato a causa di un errore da parte di un consumatore di eventi. |
__EventDroppedEvent | Notifica a un consumatore quando un altro evento viene eliminato anziché essere consegnato al consumatore di eventi richiedente. |
__EventQueueOverflowEvent | Notifica a un consumatore quando un evento viene eliminato a causa di un overflow della coda di consegna. |
__MethodInvocationEvent | Notifica a un consumatore quando si verifica un evento di chiamata al metodo. |
Eventi estrinici
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, ovvero una sottoclasse della classe di sistema __Event. I provider di del Registro di sistema di e SNMP definiscono classi di evento estrinsiche, ad esempio RegistryKeyChangeEvent, che informa un consumer quando viene modificata una chiave del Registro di sistema. Per ulteriori informazioni, consultare Registrazione agli eventi del Registro di sistema e Creazione di un provider di eventi.
Nell'esempio seguente un provider di eventi segnala violazioni della sicurezza a uno o più edifici. È possibile definire la classe seguente 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 il consumatore per gli eventi di violazione della sicurezza solo nell'edificio 24.
SELECT * FROM SecurityViolationEvent WHERE Building = 24;