次の方法で共有


レジストリ プロバイダーの WHERE 句の作成

システム レジストリ プロバイダーの適切な WHERE 句を作成するときに考慮すべき重要な点は、各イベント クエリは完全かつ明示的でなければならないということです。 完全かつ明示的でない場合は、エラー メッセージが表示されます。

完全にするには、ExecNotificationQueryAsyncbstrQuery パラメーター内の各イベント クエリに、指定したイベント クラスの各プロパティを含む 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 エラーで拒否します。