Dela via


Funktionen ExecQueryWmi

Kör en fråga för att hämta objekt.

Anteckning

Det här API:et är endast för internt bruk. Det är inte avsett att användas från utvecklarkod.

Syntax

HRESULT ExecQueryWmi (
   [in] BSTR                    strQueryLanguage,
   [in] BSTR                    strQuery,
   [in] long                    lFlags,
   [in] IWbemContext*           pCtx,
   [out] IEnumWbemClassObject** ppEnum,
   [in] DWORD                   authLevel,
   [in] DWORD                   impLevel,
   [in] IWbemServices*          pCurrentNamespace,
   [in] BSTR                    strUser,
   [in] BSTR                    strPassword,
   [in] BSTR                    strAuthority
);

Parametrar

strQueryLanguage
[in] En sträng med det giltiga frågespråket som stöds av Windows Management. Det måste vara "WQL", förkortningen för WMI Query Language.

strQuery
[in] Texten i frågan. Den här parametern får inte vara null.

lFlags
[in] En kombination av flaggor som påverkar funktionens beteende. Följande värden definieras i rubrikfilen WbemCli.h , eller så kan du definiera dem som konstanter i koden:

Konstant Värde Beskrivning
WBEM_FLAG_USE_AMENDED_QUALIFIERS 0x20000 Om den anges hämtar funktionen de ändrade kvalificerarna som lagras i det lokaliserade namnområdet för den aktuella anslutningens nationella inställningar.
Om den inte anges hämtar funktionen endast de kvalificerare som lagras i det omedelbara namnområdet.
WBEM_FLAG_RETURN_IMMEDIATELY 0x10 Flaggan orsakar ett semisynkront anrop.
WBEM_FLAG_FORWARD_ONLY 0x20 Funktionen returnerar en framåtriktad uppräknare. Normalt är uppräknare med endast vidarebefordran snabbare och använder mindre minne än konventionella uppräknare, men de tillåter inte anrop till Klona.
WBEM_FLAG_BIDIRECTIONAL 0 WMI behåller pekare till objekt i uppräkningen tills de släpps.
WBEM_FLAG_ENSURE_LOCATABLE 0x100 Säkerställer att alla returnerade objekt har tillräckligt med information så att systemegenskaper, till exempel __PATH, __RELPATH och __SERVER, inte nullär .
WBEM_FLAG_PROTOTYPE 2 Den här flaggan används för prototyper. Den kör inte frågan och returnerar i stället ett objekt som ser ut som ett typiskt resultatobjekt.
WBEM_FLAG_DIRECT_READ 0x200 Leder till direkt åtkomst till providern för den angivna klassen utan hänsyn till dess överordnade klass eller underklasser.

De rekommenderade flaggorna är WBEM_FLAG_RETURN_IMMEDIATELY och WBEM_FLAG_FORWARD_ONLY för bästa prestanda.

pCtx
[in] Det här värdet är nullvanligtvis . Annars är det en pekare till en IWbemContext-instans som kan användas av providern som tillhandahåller de begärda klasserna.

ppEnum
[ut] Om inget fel inträffar tar emot pekaren till uppräknaren som gör att anroparen kan hämta instanserna i frågans resultatuppsättning. Frågan kan ha en resultatuppsättning med noll instanser. Mer information finns i avsnittet Kommentarer .

authLevel
[in] Auktoriseringsnivån.

impLevel
[in] Personifieringsnivån.

pCurrentNamespace
[in] En pekare till ett IWbemServices-objekt som representerar det aktuella namnområdet.

strUser
[in] Användarnamnet. Mer information finns i funktionen ConnectServerWmi .

strPassword
[in] Lösenordet. Mer information finns i funktionen ConnectServerWmi .

strAuthority
[in] Användarens domännamn. Mer information finns i funktionen ConnectServerWmi .

Returvärde

Följande värden som returneras av den här funktionen definieras i wbemCli.h-huvudfilen , eller så kan du definiera dem som konstanter i koden:

Konstant Värde Beskrivning
WBEM_E_ACCESS_DENIED 0x80041003 Användaren har inte behörighet att visa en eller flera av de klasser som funktionen kan returnera.
WBEM_E_FAILED 0x80041001 Ett ospecificerat fel har uppstått.
WBEM_E_INVALID_PARAMETER 0x80041008 En parameter är inte giltig.
WBEM_E_INVALID_QUERY 0x80041017 Frågan hade ett syntaxfel.
WBEM_E_INVALID_QUERY_TYPE 0x80041018 Det begärda frågespråket stöds inte.
WBEM_E_QUOTA_VIOLATION 0x8004106c Frågan är för komplex.
WBEM_E_OUT_OF_MEMORY 0x80041006 Det finns inte tillräckligt med minne för att slutföra åtgärden.
WBEM_E_SHUTTING_DOWN 0x80041033 WMI stoppades förmodligen och startades om. Anropa ConnectServerWmi igen.
WBEM_E_TRANSPORT_FAILURE 0x80041015 RPC-länken (Remote Procedure Call) mellan den aktuella processen och WMI misslyckades.
WBEM_E_NOT_FOUND 0x80041002 Frågan anger en klass som inte finns.
WBEM_S_NO_ERROR 0 Funktionsanropet lyckades.

Kommentarer

Den här funktionen omsluter ett anrop till metoden IWbemServices::ExecQuery .

Den här funktionen bearbetar frågan som anges i parametern strQuery och skapar en uppräknare genom vilken anroparen kan komma åt frågeresultatet. Uppräknaren är en pekare till ett IEnumWbemClassObject-gränssnitt . frågeresultatet är instanser av klassobjekt som görs tillgängliga via gränssnittet IWbemClassObject .

Det finns gränser för antalet AND nyckelord och OR som kan användas i WQL-frågor. Ett stort antal WQL-nyckelord som används i en komplex fråga kan orsaka att WMI returnerar WBEM_E_QUOTA_VIOLATION (eller 0x8004106c) felkoden som ett HRESULT värde. Gränsen för WQL-nyckelord beror på hur komplex frågan är.

Om funktionsanropet misslyckas kan du hämta ytterligare felinformation genom att anropa funktionen GetErrorInfo .

Krav

Plattformar: Se Systemkrav.

Huvudet: WMINet_Utils.idl

.NET Framework versioner: Tillgänglig sedan 4.7.2

Se även