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


Создание предложения WHERE для поставщика реестра

Основные моменты, которые следует учитывать при создании соответствующего предложения WHERE для поставщика системного реестра, заключаются в том, что каждый запрос событий должен быть завершённым и явным. Несоответствие полноте и ясности приведет к появлению сообщения об ошибке.

Чтобы быть полным, в каждом запросе события в параметре bstrQuery параметраExecNotificationQueryAsync должно присутствовать предложение 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 слишком широко для любого использования.