Condividi tramite


Creazione di una clausola WHERE per il provider del Registro di sistema

I punti principali da considerare quando si crea una clausola WHERE appropriata per il provider del Registro di sistema è che ogni query evento deve essere completa e esplicita. Non è stato completato e esplicito verrà generato un messaggio di errore.

Per essere completa, ogni query evento nel parametro bstrQuery di ExecNotificationQueryAsync deve contenere una clausola WHERE che include ognuna delle proprietà nella classe di evento specificata.

Nell'esempio seguente viene illustrato come impostare bstrQuery per registrare gli eventi di modifica dell'albero nell'albero "HKEY_LOCAL_MACHINE\Software".

SELECT * FROM RegistryTreeChangeEvent  WHERE Hive = "HKEY_LOCAL_MACHINE" AND Rootpath = "Software"

Per essere espliciti, il provider deve essere in grado di dedurre dalla query un elenco di valori possibili per ogni proprietà nella classe di evento.

Nell'esempio seguente viene illustrata la query evento che registra correttamente gli eventi di modifica dell'albero.

SELECT * FROM RegistryTreeChangeEvent 
    WHERE (hive = "hkey_local_machine" AND rootpath = "software") 
    OR    (hive = "hkey_current_user" AND rootpath = "console")

Di seguito è riportato un esempio di registrazione non corretta.

SELECT * FROM RegistryTreeChangeEvent  WHERE hive = "hkey_local_machine" OR rootpath ="software"

Poiché non è possibile valutare i valori possibili per ognuna delle proprietà, WMI rifiuta con l'errore WBEM_E_TOO_BROAD qualsiasi query che non dispone di una clausola WHERE o se la clausola WHERE è troppo ampia da usare.