Поделиться через


Создание предложения 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 слишком широкое для использования.