Ricezione di eventi in qualsiasi momento

È possibile scrivere un'applicazione in grado di reagire agli eventi in qualsiasi momento. Ad esempio, un amministratore può 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 consumer di eventi permanente. I consumer di eventi permanenti devono soddisfare requisiti di sicurezza speciali. Per altre informazioni, vedere Protezione degli eventi WMI.

Un consumer di eventi permanente riceve gli eventi fino a quando la registrazione non viene annullata in modo esplicito.

Un consumer di eventi permanente è una combinazione delle classi, dei filtri e degli oggetti COM seguenti che risiedono nel sistema:

  • Oggetto COM denominato consumer fisico. WMI fornisce diversi consumer permanenti standard. Ad esempio, il consumer di eventi script attivi esegue uno script quando si verifica un evento.
  • Nuova classe consumer permanente.
  • Istanza della classe consumer permanente denominata consumer logico.
  • Filtro contenente la query per gli eventi.
  • Collegamento tra il consumer e il filtro.

Le proprietà di un consumer di eventi logici specificano le azioni da eseguire quando viene notificata un evento, ma non definiscono le query di evento a cui sono associate. Quando viene segnalato, WMI carica automaticamente l'oggetto COM che rappresenta il consumer di eventi permanente nella memoria attiva. In genere, ciò si verifica durante l'avvio o in risposta a un evento di attivazione. Dopo l'attivazione, il consumer 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 consumer standard preinstallate in WMI, ad esempio ActiveScriptEventConsumer. Per altre informazioni, vedere Classi consumer standard, monitoraggio e risposta agli eventi con consumer standard ed eventi di monitoraggio.

La procedura seguente descrive come creare un consumer di eventi permanente.

Per creare un consumer di eventi permanente

  1. 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 Determinazione del tipo di evento da ricevere.

  2. Implementare un consumer 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 del codice deve trovarsi nel consumer fisico.

    Nota

    Questo passaggio è il primo nella procedura per semplificare la spiegazione. In termini di codifica, è consigliabile creare l'ultimo consumer fisico. 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 la scrittura del consumer fisico.

     

  3. Creare una nuova classe consumer che descrive il consumer fisico.

    Analogamente a qualsiasi classe, la classe consumer descrive i parametri generali di un consumer di eventi permanente a WMI.

  4. 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 consumer logico rappresenta il consumer fisico in WMI.

  5. Creare un filtro eventi.

    Le query di evento che attivano consumer di eventi permanenti sono denominate filtri eventi. Un singolo filtro eventi può essere associato a più consumer di eventi logici. Inoltre, è possibile associare più filtri di eventi a un singolo consumer 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.

  6. Collegare il filtro eventi al consumer 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 consumer di eventi logici associato esaminando 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.

  7. Scrittura di un provider di consumer di eventi.

    Il provider di consumer di eventi è un oggetto COM che individua il consumer fisico per WMI.