Ricezione di eventi in qualsiasi momento
È possibile scrivere un'applicazione in grado di reagire agli eventi in qualsiasi momento. Ad esempio, un amministratore potrebbe voler ricevere un messaggio di posta elettronica quando specifiche misure di prestazioni diminuiscono nei server di rete. In questo caso, l'applicazione deve essere eseguita sempre. Tuttavia, l'esecuzione continua di un'applicazione non è un uso efficiente delle risorse di sistema. WMI consente invece di creare un consumatore di eventi permanente. I consumatori di eventi permanenti devono soddisfare requisiti di sicurezza speciali. Per altre informazioni, vedere Sicurezza degli eventi WMI.
Un consumatore di eventi permanente riceve eventi finché la registrazione non viene annullata in modo esplicito.
Un consumer di eventi permanente è una combinazione delle classi WMI, dei filtri e degli oggetti COM seguenti che risiedono nel sistema:
- Oggetto COM denominato consumer fisico. WMI fornisce diversi consumatori permanenti standard. Ad esempio, il consumatore di eventi di script attivo esegue uno script quando si verifica un evento.
- Una nuova categoria di consumatori permanente.
- Istanza della classe consumer permanente denominata consumer logico.
- Un filtro che contiene la query per gli eventi.
- Collegamento tra un consumatore e il filtro.
Le proprietà di un consumatore di eventi logici specificano le azioni da eseguire quando viene notificato un evento, ma non definiscono le query degli eventi a cui sono associate. Quando viene segnalato, WMI carica automaticamente l'oggetto COM che rappresenta il consumatore di eventi permanente nella memoria attiva. In genere, questo si verifica durante l'avvio o in risposta a un evento di attivazione. Dopo l'attivazione, il consumer di eventi permanente funge da consumer di eventi normale, ma rimane fino a quando non viene scaricato in modo specifico dal sistema operativo.
È possibile scrivere un consumer di eventi permanente o usare le classi di consumer standard di WMI preinstallate , ad esempio ActiveScriptEventConsumer. Per ulteriori informazioni, vedere Classi Consumer Standard, Monitoraggio e Risposta agli Eventi con Consumer Standarde Monitoraggio degli Eventi.
La procedura seguente descrive come creare un consumer di eventi permanente.
Per creare il proprio consumatore di eventi permanente
Determinare il tipo di eventi che si desidera ricevere.
WMI supporta eventi intrinseci ed estrini. Un evento intrinseco è un evento predefinito da WMI, mentre un evento estrinsico è un evento definito da un provider di terze parti. Per altre informazioni, vedere Determinare il tipo di evento da ricevere.
Implementare un consumatore fisico.
La differenza principale tra un'applicazione di gestione e un consumer fisico è che un utente carica e scarica un'applicazione di gestione, mentre WMI carica e scarica un consumer fisico. La maggior parte della tua codifica dovrebbe essere orientata ai consumatori fisici.
Nota
Questo passaggio è il primo nella procedura per semplificare la spiegazione. In termini di codifica, dovresti in realtà creare il consumer fisico per ultimo. In questo modo è possibile disporre i parametri e la logica per il provider di eventi permanenti prima di iniziare a scrivere codice lungo. Tuttavia, non esiste alcuna restrizione per scrivere prima il consumatore fisico.
Creare una nuova classe di consumatore che descriva il consumatore fisico.
Come qualsiasi classe, la classe consumer descrive i parametri generali di un consumatore di eventi permanente in WMI.
Creare un'istanza della classe consumer.
Come qualsiasi altra classe WMI, è necessario creare un'istanza della classe consumer se si vuole implementare la classe . Un'istanza di una classe consumer è nota anche come consumer logico . Il consumatore logico rappresenta il consumatore fisico per WMI.
-
Le query degli eventi che attivano i consumatori di eventi permanenti vengono chiamate filtri eventi . Un singolo filtro eventi può essere associato a più consumer di eventi logici. Inoltre, più filtri eventi possono essere associati a un singolo consumatore di eventi logici. Il filtro è un'istanza di __EventFilter.
Un evento NT Log viene generato quando la query di un consumer di eventi permanente ha esito negativo. L'origine dell'evento è WinMgmt, l'ID evento è 10 e il tipo di evento è Error.
Collegare il filtro eventi al consumatore logico.
Collegando il filtro eventi al consumer logico, si indica a WMI quale filtro eventi appartiene al consumer logico. I consumer di eventi logici e i filtri di eventi sono collegati da un'istanza della classe di associazione di __FilterToConsumerBinding. Quando viene ricevuto un evento che corrisponde a una query di evento descritta in un filtro eventi, WMI trova il consumatore di eventi logici associato controllando l'istanza della classe di associazione. Dopo aver individuato l'istanza del consumer di eventi logici, WMI usa un'istanza della classe __EventConsumerProviderRegistration per individuare ed eseguire il consumer di eventi fisici associato a questa istanza.
Scrittura di un consumatore di eventi provider.
Il provider di consumer di eventi è un oggetto COM che individua il consumer fisico per WMI.