共用方式為


實作類別提供者的主要界面

有兩種方式可以實作類別提供者:將介面實作為推送提供者,或做為提取提供者。

本主題將討論下列各節:

實作 Push 類別提供者的主要介面

雖然所有提供者都會實作 IWbemProviderInit 進行初始化,而且至少有一個其他介面做為其主要介面,但推送提供者只會實作 IWbemProviderInit

請確定您的實作會執行下列工作:

  • 擷取適當的類別數據。
  • 將數據放在WMI存放庫中。
  • 刪除過時的數據。

完成初始化程序之後,WMI 會處理屬於推送提供者之類別的所有應用程式要求,而不需要任何進一步的提供者互動。 之後,推送提供者會有效地作為 WMI 的用戶端,而不是提供者。 如需實作 IWbemProviderInit的詳細資訊,請參閱 初始化提供者

注意

當呼叫 WMI 並在推送提供者中建立、更新或移除數據時,請在所有對 IWbemServices 方法的呼叫中,將 lFlags 參數設定為包含 WBEM_FLAG_OWNER_UPDATE 旗標。

 

實作提取類別提供者的主要介面

類別提取提供者應該實作 IWbemServices 做為主要介面。 IWbemServices 介面支持數據擷取、數據更新、數據移除、列舉和查詢處理。 不過,由於應用程式與提供者也會使用 IWbemServices 來要求 WMI 的服務,IWbemServices 包含許多與類別提供者無關的方法。 您的實作必須 分別透過 getObjectAsyncCreateClassEnumAsync 方法來支持類別擷取和列舉。 下表列出您可以為類別提供者實作的其他異步 IWbemServices 方法。

方法 特徵
PutInstanceAsync 修改
DeleteClassAsync 刪除

 

注意

由於回呼傳回至接收端時,可能無法符合用戶端所需的相同驗證層級,因此建議您使用半同步通信,而不是異步通信。 如需詳細資訊,請參閱 呼叫 方法

 

您的類別提供者應該提供一個存根實作,對於所有其他不支援您的功能集的 IWbemServices 方法,傳回 WBEM_E_PROVIDER_NOT_CAPABLE。 具體而言,WMI 不支援類別提供者的查詢處理。 因此,類別提供者必須從其 IWbemServices::ExecQueryAsync的實作傳回 WBEM_E_PROVIDER_NOT_CAPABLE,或者將其 QuerySupportLevels 註冊屬性設定為 NULL,或兩者皆是。

類別提供者實作的介面與實例提供者和方法提供者的介面非常類似。 事實上,單一提供者可以藉由實作所有方法並正確註冊,作為這三種類型的提供者。