Создание предложения WHERE для поставщика реестра
При создании правильного предложения WHERE для поставщика системного реестра следует учитывать main, что каждый запрос на событие должен быть полным и явным. Если не быть полным и явным, появится сообщение об ошибке.
Для завершения каждый запрос события в параметре bstrQueryexecNotificationQueryAsync должен содержать предложение WHERE, включающее каждое из свойств указанного класса событий.
В следующем примере показано, как настроить bstrQuery для регистрации событий изменения дерева в дереве HKEY_LOCAL_MACHINE\Software.
SELECT * FROM RegistryTreeChangeEvent WHERE Hive = "HKEY_LOCAL_MACHINE" AND Rootpath = "Software"
Чтобы быть явным, поставщик должен иметь возможность вывести из запроса список возможных значений для каждого свойства в классе событий.
В следующем примере показан запрос события, который правильно регистрирует события изменения дерева.
SELECT * FROM RegistryTreeChangeEvent
WHERE (hive = "hkey_local_machine" AND rootpath = "software")
OR (hive = "hkey_current_user" AND rootpath = "console")
Ниже приведен пример неправильной регистрации.
SELECT * FROM RegistryTreeChangeEvent WHERE hive = "hkey_local_machine" OR rootpath ="software"
Так как невозможно оценить возможные значения для каждого свойства, WMI отклоняет с ошибкой WBEM_E_TOO_BROAD любой запрос, у которого либо нет предложения WHERE, либо если предложение WHERE слишком широкое для использования.