Creación de una cláusula WHERE para el proveedor del Registro
Los puntos principales que se deben tener en cuenta al crear una cláusula WHERE adecuada para el proveedor del Registro del sistema es que cada consulta de eventos debe ser completa y explícita. Si no es completa y explícita, se generará un mensaje de error.
Para completarse, cada consulta de eventos del parámetro bstrQuery de ExecNotificationQueryAsync debe contener una cláusula WHERE que incluya cada una de las propiedades de la clase de eventos especificada.
En el ejemplo siguiente se muestra cómo establecer bstrQuery a fin de registrarlo para los eventos de cambio de árbol en el árbol "HKEY_LOCAL_MACHINE\Software".
SELECT * FROM RegistryTreeChangeEvent WHERE Hive = "HKEY_LOCAL_MACHINE" AND Rootpath = "Software"
Para ser explícito, el proveedor debe poder deducir de la consulta una lista de valores posibles para cada propiedad de la clase de eventos.
En el ejemplo siguiente se muestra la consulta de eventos que se registra correctamente para los eventos de cambio de árbol.
SELECT * FROM RegistryTreeChangeEvent
WHERE (hive = "hkey_local_machine" AND rootpath = "software")
OR (hive = "hkey_current_user" AND rootpath = "console")
El siguiente es un ejemplo de registro incorrecto.
SELECT * FROM RegistryTreeChangeEvent WHERE hive = "hkey_local_machine" OR rootpath ="software"
Como no hay ninguna manera de evaluar los valores posibles para cada una de las propiedades, WMI rechaza con el error WBEM_E_TOO_BROAD cualquier consulta que no tenga una cláusula WHERE o si la cláusula WHERE es demasiado amplia para usarla.