为注册表提供程序创建 WHERE 子句

为系统注册表提供程序创建适当的 WHERE 子句时要考虑的要点是每个事件查询都必须完整且显式。 如果不完整和不显式,会收到错误消息。

若要完整,ExecNotificationQueryAsync 的 bstrQuery 参数中的每个事件查询都必须包含一个 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 会拒绝所有不含 WHERE 子句或 WHERE 子句过于宽泛而无用的查询,并显示错误 WBEM_E_TOO_BROAD。