Provider::ExecQuery-Methode (provider.h)

[Die Provider-Klasse ist Teil des WMI-Provider-Frameworks, das nun als endgültig betrachtet wird, und es sind keine weiteren Entwicklungen, Verbesserungen oder Updates für nicht sicherheitsrelevante Probleme verfügbar, die diese Bibliotheken betreffen. Die MI-APIs sollten für alle Neuentwicklungen verwendet werden.]

Die ExecQuery-Methode wird von WMI aufgerufen, um eine WMI-Abfrage (WMI Query Language, WQL) zu verarbeiten.

Syntax

HRESULT ExecQuery(
        MethodContext     *pMethodContext,
  [ref] CFrameworkQuery & cQuery,
        long              lFlags
);

Parameter

pMethodContext

Zeiger auf das Kontextobjekt für diesen Aufruf. Dieser Wert enthält alle vom Client angegebenen IWbemContext-Eigenschaften . Außerdem muss dieser Zeiger als Parameter für alle Aufrufe von WMI verwendet werden.

[ref] cQuery

Zeiger auf eine Abfrage, die bereits vom Anbieterframework analysiert wurde.

lFlags

Bitmaske von Flags mit Informationen zum Abfragevorgang ausführen. Dies ist der vom Client in der IWbemServices::ExecQuery-Methode angegebene Wert.

Die folgenden Flags werden von WMI behandelt (und herausgefiltert):

  • WBEM_FLAG_ENSURE_LOCATABLE
  • WBEM_FLAG_FORWARD_ONLY
  • WBEM_FLAG_BIDIRECTIONAL
  • WBEM_FLAG_USE_AMENDED_QUALIFIERS
  • WBEM_FLAG_RETURN_IMMEDIATELY
  • WBEM_FLAG_PROTOTYPE

Rückgabewert

Die Standardframeworkanbieterimplementierung dieser Methode gibt WBEM_E_PROVIDER_NOT_CAPABLE an die aufrufende Methode zurück. Die IWbemServices::ExecQuery-Methode listet die allgemeinen Rückgabewerte auf, obwohl Sie auswählen können, dass jeder COM-Rückgabecode zurückgegeben werden soll.

Hinweise

WMI ruft häufig ExecQuery als Reaktion auf einen Clientaufruf von IWbemServices::ExecQuery auf, wobei der Client entweder eine Liste ausgewählter Eigenschaften oder eine WHERE-Klausel übergibt. WMI kann auch ExecQuery aufrufen, wenn die Clientabfrage eine Anweisung "ASSOCIATORS OF" oder "REFERENCES OF" enthält, die Ihre Klasse beschreibt. Wenn Ihre Implementierung von ExecQueryWBEM_E_NOT_SUPPORTED zurückgibt, verlässt sich der Client auf WMI, um die Abfrage zu verarbeiten.

WMI verarbeitet eine Abfrage, indem Ihre Implementierung von CreateInstanceEnum aufgerufen wird, um alle Instanzen bereitzustellen. WMI filtert dann die resultierenden Instanzen, bevor die Instanzen an den Client zurückgegeben werden. Daher muss jede Implementierung von ExecQuery , die Sie erstellen, effizienter sein als CreateInstanceEnum.

Im Folgenden wird eine gängige Implementierung von ExecQuery beschrieben:

  1. Erstellen Sie mit Provider::CreateNewInstance eine leere instance Ihrer Klasse.
  2. Bestimmen Sie die Teilmenge der Instanzen, die Sie erstellen sollten.

    Sie können Methoden wie IsPropertyRequired verwenden, um zu ermitteln, welche Eigenschaften erforderlich sind, und GetValuesForProp , um zu ermitteln, welche Instanzen WMI benötigt. Andere Methoden, die sich mit angeforderten Eigenschaften befassen, sind CFrameworkQuery::GetRequiredProperties, CFrameworkQuery::AllPropertiesAreRequired und CFrameworkQuery::KeysOnly.

  3. Füllen Sie die Eigenschaften des leeren instance mit den Set-Methoden der CInstance-Klasse, z. B. CInstance::SetByte oder CInstance::SetStringArray.
  4. Senden Sie die instance mithilfe von CInstance::Commit zurück an den Client.
  5. Gibt die entsprechenden Rückgabewerte zurück.

    Die Standardimplementierung des ExecQuery-Frameworkanbieters gibt WBEM_E_PROVIDER_NOT_CAPABLE zurück. Wenn Sie ExecQuery implementieren, sollten Sie die allgemeinen Rückgabewerte verwenden, die in IWbemServices::ExecQuery aufgeführt sind. Bei Bedarf können Sie jedoch beliebigen COM-Rückgabecode zurückgeben.

WMI sendet keine "ASSOCIATORS OF"- oder "REFERENCES OF"-Abfragen an Frameworkanbieter. Stattdessen verwendet WMI das Schema, um zu bestimmen, welche Klassen mit der betreffenden Klasse verknüpft sind, und generiert eine entsprechende WQL-Abfrage zum Abrufen der Ergebnisse. Daher müssen Sie keine zusätzliche Unterstützung für "ASSOCIATORS OF" und "REFERENCES OF"-Abfragen codieren.

Beim Schreiben Ihres Frameworkanbieters sollten Sie jedoch Folgendes beachten:

Anforderungen

   
Unterstützte Mindestversion (Client) Windows Vista
Unterstützte Mindestversion (Server) Windows Server 2008
Zielplattform Windows
Kopfzeile provider.h (einschließlich FwCommon.h)
Bibliothek FrameDyn.lib
DLL FrameDynOS.dll; FrameDyn.dll