Criar uma cláusula WHERE para o provedor do Registro

Os principais pontos a serem considerados ao criar uma cláusula WHERE adequada para o provedor do Registro do Sistema é que cada consulta de evento deve ser completa e explícita. Se a consulta não for completa nem explícita, uma mensagem de erro será gerada.

Para ser completa, cada consulta de evento no parâmetro bstrQuery de ExecNotificationQueryAsync deve conter uma cláusula WHERE que inclua cada uma das propriedades na classe de evento especificada.

O exemplo a seguir mostra como definir bstrQuery para registrar eventos de alteração de árvore na árvore "HKEY_LOCAL_MACHINE\Software".

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

Para ser explícito, o provedor deve ser capaz de inferir da consulta uma lista de valores possíveis para cada propriedade na classe de evento.

O exemplo a seguir mostra a consulta de evento que se registra corretamente em eventos de alteração de árvore.

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

A seguir está um exemplo de registro incorreto.

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

Como não há como avaliar os valores possíveis para cada uma das propriedades, o WMI rejeita com o erro WBEM_E_TOO_BROAD qualquer consulta que não tenha uma cláusula WHERE ou se a cláusula WHERE for muito ampla para ter alguma utilidade.