Freigeben über


Erstellen einer WHERE-Klausel für den Registrierungsanbieter

Die Hauptpunkte, die beim Erstellen einer korrekten WHERE-Klausel für den Systemregistrierungsanbieter berücksichtigt werden sollten, sind, dass jede Ereignisabfrage vollständig und explizit sein muss. Wenn sie nicht vollständig und explizit ist, wird eine Fehlermeldung angezeigt.

Um vollständig zu sein, muss jede Ereignisabfrage im bstrQuery-Parameter von ExecNotificationQueryAsync eine WHERE-Klausel enthalten, die alle Eigenschaften in der angegebenen Ereignisklasse enthält.

Das folgende Beispiel zeigt, wie bstrQuery so festgelegt wird, dass Strukturänderungsereignisse in der Struktur „HKEY_LOCAL_MACHINE\Software“ registriert werden.

SELECT * FROM RegistryTreeChangeEvent  WHERE Hive = "HKEY_LOCAL_MACHINE" AND Rootpath = "Software"

Um explizit zu sein, muss der Anbieter in der Lage sein, aus der Abfrage eine Liste möglicher Werte für alle Eigenschaften in der Ereignisklasse abzuleiten.

Das folgende Beispiel zeigt die Ereignisabfrage, die für Strukturänderungsereignisse korrekt registriert wird.

SELECT * FROM RegistryTreeChangeEvent 
    WHERE (hive = "hkey_local_machine" AND rootpath = "software") 
    OR    (hive = "hkey_current_user" AND rootpath = "console")

Das folgende Beispiel veranschaulicht eine fehlerhafte Registrierung.

SELECT * FROM RegistryTreeChangeEvent  WHERE hive = "hkey_local_machine" OR rootpath ="software"

Da es keine Möglichkeit gibt, die möglichen Werte für die einzelnen Eigenschaften auszuwerten, lehnt WMI jede Abfrage, die keine WHERE-Klausel oder eine zu weitgehende und daher nutzlose WHERE-Klausel enthält, mit dem Fehler WBEM_E_TOO_BROAD ab.