レジストリ プロバイダーの WHERE 句の作成
システム レジストリ プロバイダーの適切な WHERE 句を作成するときに考慮すべき重要な点は、各イベント クエリは完全かつ明示的でなければならないということです。 完全かつ明示的でない場合は、エラー メッセージが表示されます。
完全にするには、ExecNotificationQueryAsync の bstrQuery パラメーター内の各イベント クエリに、指定したイベント クラスの各プロパティを含む WHERE 句が含まれている必要があります。
次の例は、"HKEY_LOCAL_MACHINE\Software" ツリーのツリー変更イベントを登録するように bstrQuery を設定する方法を示しています。
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 エラーで拒否します。