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;