Scrittura di un provider di eventi

Un provider di eventi è un oggetto COM che fornisce WMI con notifiche di eventi intrinseci ed estrini. Un evento intrinseco segnala una modifica dei dati interna a WMI, mentre un evento estrinsico segnala un evento definito dall'utente non descritto da un evento intrinseco. Ad esempio, un evento in risposta a modifiche, creazione o eliminazione della classe Win32_LogicalDisk classifica come evento intrinseco. Un evento generato sulla base di un evento diverso dalla modifica, dalla creazione o dall'eliminazione di un oggetto WMI esistente è un evento estrinsico. Indipendentemente dalla classe supportata, è possibile implementare tutti i provider di eventi nello stesso modo.

La procedura seguente descrive come implementare un provider di eventi.

Per implementare un provider di eventi

  1. Progettare e registrare il provider di classi con WMI.

    I provider di classi si registrano con WMI creando un'istanza di __Win32Provider e una classe __EventProviderRegistration . Per altre informazioni, vedere Registrazione di un provider di eventi.

  2. Implementare l'interfaccia IWbemProviderInit per il provider.

    L'interfaccia IWbemProviderInit è un'interfaccia COMUNE usata da WMI per caricare e inizializzare tutti i provider. Per altre informazioni, vedere Inizializzazione di un provider.

  3. Implementare IWbemEventProvider come interfaccia primaria per il provider.

    L'interfaccia IWbemEventProvider usa il metodo ProviderEvents per fornire eventi a WMI. Per altre informazioni, vedere Implementazione dell'interfaccia primaria per un provider di eventi.

    Nota

    I provider di eventi devono usare il modello di multithreading "Both".

     

  4. Facoltativamente, è anche possibile implementare l'interfaccia IWbemEventProviderQuerySink per aumentare le prestazioni del provider di eventi.

    L'interfaccia IWbemEventProviderQuerySink consente al provider di ottimizzare le query prima di inviare una risposta a WMI ed è più utile per un provider che fornisce eventi di più tipi e che deve eseguire il maggior numero possibile di ottimizzazioni interne. Per altre informazioni, vedere Ottimizzazione di un provider di eventi.

  5. Implementare l'interfaccia IWbemEventProviderSecurity per limitare i consumer a determinati IDENTIFICATORi di sicurezza (SID) o implementare IWbemEventSink::SetSinkSecurity per proteggere il sink stesso. Il provider può anche impostare la proprietà SECURITY_DESCRIPTOR nella classe di evento per proteggere singoli eventi nel codice MOF. Per altre informazioni, vedere Protezione degli eventi WMI.

  6. Aggiungere qualsiasi altro codice necessario per il provider.

    Quando si progetta il provider, è molto probabile che sia necessario chiamare interfacce WMI. Per altre informazioni, vedere Chiamata di un metodo.

    Quando si recuperano informazioni per un client, potrebbe essere necessario accedere ai livelli di sicurezza per tale client. Per altre informazioni, vedere Rappresentazione di un client.

  7. Sostituire il provider preesistente con il nuovo codice.

    Non è necessario eseguire questo passaggio se non si dispone di un provider preesistente da copiare. Per altre informazioni, vedere Aggiornamento di un provider.

Un'applicazione client può richiedere un evento registrandosi con WMI come consumer di eventi. Per altre informazioni, vedere Ricezione di un evento WMI.