Condividi tramite


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 in base a 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.

Implementare un provider di eventi

  1. Progetta e registra il provider della classe con WMI.

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

  2. Implementare l'interfaccia IWbemProviderInit per il provider.

    L'interfaccia IWbemProviderInit è un'interfaccia comune che WMI usa per caricare e inizializzare tutti i provider. Per altre informazioni, vedere Inizializzazione di un provider.

  3. Implementare il IWbemEventProvider come interfaccia primaria per il provider.

    L'interfacciaIWbemEventProviderusa 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 migliorare 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 consumatori 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 ulteriori informazioni, consultare Messa in sicurezza degli eventi WMI.

  6. Aggiungere qualsiasi codice aggiuntivo necessario per il tuo provider.

    Quando si progetta il provider, avrai probabilmente bisogno di chiamare le interfacce WMI. Per altre informazioni, vedere Chiamare un Metodo.

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

  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 ulteriori 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.