Création d’une clause WHERE pour le fournisseur de registre
Les principaux points à prendre en compte lors de la création d’une clause WHERE appropriée pour le fournisseur de registre système sont que chaque requête d’événement doit être complète et explicite. Si vous n’avez pas été complet et explicite, un message d’erreur s’affiche.
Pour être complète, chaque requête d'événement dans le paramètre bstrQuery de ExecNotificationQueryAsync doit contenir une clause WHERE qui inclut chacune des propriétés de la classe d'événement spécifiée.
L’exemple suivant montre comment définir bstrQuery pour qu’il s’inscrive aux événements de modification d’arborescence dans l’arborescence « HKEY_LOCAL_MACHINE\Software ».
SELECT * FROM RegistryTreeChangeEvent WHERE Hive = "HKEY_LOCAL_MACHINE" AND Rootpath = "Software"
Pour être explicite, le fournisseur doit être en mesure de déduire à partir de la requête une liste de valeurs possibles pour chaque propriété de la classe d’événements.
L’exemple suivant montre la requête d’événement qui s’inscrit correctement pour les événements de modification d’arborescence.
SELECT * FROM RegistryTreeChangeEvent
WHERE (hive = "hkey_local_machine" AND rootpath = "software")
OR (hive = "hkey_current_user" AND rootpath = "console")
Un exemple d’inscription incorrecte est fourni ci-dessous.
SELECT * FROM RegistryTreeChangeEvent WHERE hive = "hkey_local_machine" OR rootpath ="software"
Étant donné qu’il n’existe aucun moyen d’évaluer les valeurs possibles pour chacune des propriétés, WMI rejette avec l’erreur WBEM_E_TOO_BROAD toute requête qui n’a pas de clause WHERE ou si la clause WHERE est trop vaste pour être d’une quelconque utilité.