建立登錄提供者的 WHERE 子句
為 System Registry 提供者建立適當的 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 會拒絕錯誤,WBEM_E_TOO_BROAD任何沒有 WHERE 子句的查詢,或 WHERE 子句太廣泛而無法使用。