Provider::ExecQuery 方法 (provider.h)
[提供者類別是 WMI 提供者 架構的一部分,現在被視為最終狀態,而且不會針對影響這些程式庫的非安全性相關問題使用進一步的開發、增強功能或更新。 MI API應該用於所有新的開發。]
ExecQuery方法是由 WMI 呼叫,以處理 WMI 查詢語言 (WQL) 查詢。
語法
HRESULT ExecQuery(
MethodContext *pMethodContext,
[ref] CFrameworkQuery & cQuery,
long lFlags
);
參數
pMethodContext
這個呼叫之內容物件的指標。 這個值包含用戶端所指定的任何 IWbemCoNtext 屬性。 此外,此指標必須當做回 WMI 的任何呼叫的參數使用。
[ref] cQuery
提供者架構已剖析之查詢的指標。
lFlags
旗標的位元遮罩,其中包含執行查詢作業的相關資訊。 這是 IWbemServices::ExecQuery 方法中用戶端所指定的值。
下列旗標是由 WMI 處理 (並篩選掉) :
- WBEM_FLAG_ENSURE_LOCATABLE
- WBEM_FLAG_FORWARD_ONLY
- WBEM_FLAG_BIDIRECTIONAL
- WBEM_FLAG_USE_AMENDED_QUALIFIERS
- WBEM_FLAG_RETURN_IMMEDIATELY
- WBEM_FLAG_PROTOTYPE
傳回值
此方法的預設架構提供者實作會將 WBEM_E_PROVIDER_NOT_CAPABLE 傳回給呼叫方法。 IWbemServices::ExecQuery方法會列出常見的傳回值,不過您可以選擇傳回任何 COM 傳回碼。
備註
WMI 通常會呼叫 ExecQuery ,以回應 IWbemServices::ExecQuery的用戶端呼叫,其中用戶端會傳入選取的屬性清單或 WHERE 子句。 如果用戶端查詢包含描述類別的 「ASSOCIATORS OF」 或 「REFERENCES OF」 語句,WMI 也可以呼叫 ExecQuery 。 如果您的 ExecQuery 實作傳回 WBEM_E_NOT_SUPPORTED,用戶端會依賴 WMI 來處理查詢。
WMI 會呼叫 CreateInstanceEnum 的實作來處理查詢,以提供所有實例。 接著,WMI 會先篩選產生的實例,再將實例傳回用戶端。 因此,您所建立 的任何 ExecQuery 實作都必須比 CreateInstanceEnum更有效率。
下列描述 ExecQuery的常見實作:
- 使用 Provider::CreateNewInstance建立類別的空白實例。
-
決定您應該建立的實例子集。
您可以使用 IsPropertyRequired 之類的方法來查看所需的屬性,以及 GetValuesForProp 來查看 WMI 所需的實例。 處理要求屬性的其他方法包括 CFrameworkQuery::GetRequiredProperties、 CFrameworkQuery::AllPropertiesAreRequired和 CFrameworkQuery::KeysOnly。
- 使用 CInstance 類別的 Set 方法填入空白實例的屬性,例如 CInstance::SetByte 或 CInstance::SetStringArray。
- 使用 CInstance::Commit將實例傳回用戶端。
-
傳回適當的傳回值。
預設 ExecQuery 架構提供者實作會 傳回WBEM_E_PROVIDER_NOT_CAPABLE。 如果您實作 ExecQuery,您應該使用 IWbemServices::ExecQuery中列出的一般傳回值。 不過,如有必要,您可以傳回任何 COM 傳回碼。
不過,撰寫架構提供者時,您應該記住下列事項:
- 請確定您在關聯類別中支援標準查詢,特別是 WHERE 子句中使用參考屬性的查詢。 如需詳細資訊,請參閱 CFrameworkQuery::GetValuesForProp。
-
在關聯類別支援中,當您檢查端點是否存在時,請確定您使用 CWbemProviderGlue::GetInstanceKeysByPath 或 CWbemProviderGlue::GetInstancePropertiesByPath 方法。
這些方法可讓端點略過填入大量資源或不必要的屬性。
- 請確定任何關聯端點類別都支援每個屬性 Get 方法。 如需詳細資訊,請參閱 支援 Partial-Instance 作業。 如需查詢參數的詳細資訊,請參閱 CFrameworkQuery。
需求
最低支援的用戶端 | Windows Vista |
最低支援的伺服器 | Windows Server 2008 |
目標平台 | Windows |
標頭 | provider.h (include FwCommon.h) |
程式庫 | FrameDyn.lib |
Dll | FrameDynOS.dll;FrameDyn.dll |