ExecQueryWmi 函式
執行查詢以擷取物件。
注意
此 API 僅供內部使用。 不是要讓您在開發人員程式碼中使用。
語法
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
);
參數
strQueryLanguage
[in] 字串,具有 Windows 管理所支援的有效查詢語言。 它必須是「WQL」,這是 WMI 查詢語言的縮略字。
strQuery
[in] 查詢的文字。 這個參數不可以是 null
。
lFlags
[in] 影響此函式行為的旗標組合。 下列值定義於 WbemCli.h 標頭檔中,或者,您可以將其定義為程式碼中的常數:
常數 | 值 | 描述 |
---|---|---|
WBEM_FLAG_USE_AMENDED_QUALIFIERS |
0x20000 | 如果設定,函式會擷取儲存在目前連接地區設定當地語系化命名空間中的修改限定詞。 如果未設定,函式只會擷取儲存在立即命名空間中的限定詞。 |
WBEM_FLAG_RETURN_IMMEDIATELY |
0x10 | 旗標會造成半同步呼叫。 |
WBEM_FLAG_FORWARD_ONLY |
0x20 | 函式會傳回順向列舉值。 一般而言,順向列舉值的速度較快,且使用記憶體比傳統列舉值少,但不允許呼叫 Clone。 |
WBEM_FLAG_BIDIRECTIONAL |
0 | WMI 會保留列舉中物件的指標,直到釋放為止。 |
WBEM_FLAG_ENSURE_LOCATABLE |
0x100 | 確保任何傳回的物件都有足夠的資訊,讓系統屬性,例如 __PATH、__RELPATH和__SERVER,而非null 。 |
WBEM_FLAG_PROTOTYPE |
2 | 這個旗標用於原型處理。 它不會執行查詢,而是傳回類似一般結果物件的物件。 |
WBEM_FLAG_DIRECT_READ |
0x200 | 導致直接存取指定類別的提供者,而不需考慮其父代類別或任何子類別。 |
建議的旗標為WBEM_FLAG_RETURN_IMMEDIATELY
和WBEM_FLAG_FORWARD_ONLY
,以獲得最佳效能。
pCtx
[in] 一般而言,此值為 null
。 否則會是指向 IWbemCoNtext 執行個體的指標,可供要求類別的提供者使用。
ppEnum
[out] 如果沒有發生錯誤,就會收到列舉值的指標,讓呼叫端能夠擷取查詢結果集中的實例。 查詢可以有具有零個執行個體的結果集。 如需詳細資訊,請參閱備註一節。
authLevel
[in] 授權等級。
impLevel
[in] 模擬等級。
pCurrentNamespace
[in] 代表目前命名空間的 IWbemServices 物件指標。
strUser
[in] 使用者名稱。 如需詳細資訊,請參閱 ConnectServerWmi 函式。
strPassword
[in] 密碼。 如需詳細資訊,請參閱 ConnectServerWmi 函式。
strAuthority
[in] 使用者的網域名稱。 如需詳細資訊,請參閱 ConnectServerWmi 函式。
傳回值
此函式傳回的下列值定義於 WbemCli.h 標頭檔中,或者,您可以將其定義為程式碼中的常數:
常數 | 值 | 描述 |
---|---|---|
WBEM_E_ACCESS_DENIED |
0x80041003 | 使用者沒有權限可檢視函式可傳回的一或多個類別。 |
WBEM_E_FAILED |
0x80041001 | 發生未指定的錯誤。 |
WBEM_E_INVALID_PARAMETER |
0x80041008 | 參數無效。 |
WBEM_E_INVALID_QUERY |
0x80041017 | 查詢發生語法錯誤。 |
WBEM_E_INVALID_QUERY_TYPE |
0x80041018 | 所要求的查詢語言不支援。 |
WBEM_E_QUOTA_VIOLATION |
0x8004106c | 查詢太複雜。 |
WBEM_E_OUT_OF_MEMORY |
0x80041006 | 可用的記憶體不足,無法完成作業。 |
WBEM_E_SHUTTING_DOWN |
0x80041033 | WMI 可能已停止並重新啟動。 再次呼叫 ConnectServerWmi。 |
WBEM_E_TRANSPORT_FAILURE |
0x80041015 | 目前處理序與 WMI 之間的遠端程序呼叫 (RPC) 連結失敗。 |
WBEM_E_NOT_FOUND |
0x80041002 | 查詢指定不存在的類別。 |
WBEM_S_NO_ERROR |
0 | 函式呼叫成功。 |
備註
此函式會包裝向 IWbemServices::ExecQuery 方法發出的呼叫。
此函式會處理 strQuery
參數中指定的查詢,並建立列舉值,讓呼叫端可以存取查詢結果。 列舉值是 IEnumWbemClassObject 介面的指標,查詢結果是透過 IWbemClassObject 介面提供的類別物件實例。
WQL 查詢中可以使用的AND
和OR
關鍵字數目有一些限制。 複雜查詢中使用的大量 WQL 關鍵字可能會導致 WMI 將 WBEM_E_QUOTA_VIOLATION
(或0x8004106c) 錯誤碼當做 HRESULT
值傳回。 WQL 關鍵字的限制取決於查詢的複雜程度。
如果函式呼叫失敗,您可以藉由呼叫 GetErrorInfo 函式來取得其他錯誤資訊。
規格需求
平台:請參閱系統需求。
標頭:WMINet_Utils.idl
.NET Framework版本:自 4.7.2 起可用