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:
- Erstellen Sie mit Provider::CreateNewInstance eine leere instance Ihrer Klasse.
-
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.
- Füllen Sie die Eigenschaften des leeren instance mit den Set-Methoden der CInstance-Klasse, z. B. CInstance::SetByte oder CInstance::SetStringArray.
- Senden Sie die instance mithilfe von CInstance::Commit zurück an den Client.
-
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.
Beim Schreiben Ihres Frameworkanbieters sollten Sie jedoch Folgendes beachten:
- Stellen Sie sicher, dass Sie Standardabfragen in Ihrer Zuordnungsklasse unterstützen, insbesondere Abfragen, bei denen die Verweiseigenschaften in einer WHERE-Klausel verwendet werden. Weitere Informationen finden Sie unter CFrameworkQuery::GetValuesForProp.
-
Wenn Sie in der Unterstützung Ihrer Zuordnungsklasse überprüfen, ob die Endpunkte vorhanden sind, stellen Sie sicher, dass Sie die Methoden CWbemProviderGlue::GetInstanceKeysByPath oder CWbemProviderGlue::GetInstancePropertiesByPath verwenden.
Mit diesen Methoden können die Endpunkte das Auffüllen ressourcenintensiver oder nicht benötigter Eigenschaften überspringen.
- Stellen Sie sicher, dass alle Zuordnungsendpunktklassen Get-Methoden pro Eigenschaft unterstützen. Weitere Informationen finden Sie unter Unterstützen von Partial-Instance-Vorgängen. Weitere Informationen zum Abfrageparameter finden Sie unter CFrameworkQuery.
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 |