共用方式為


呼叫 WMI

提供者可以從其方法實作內呼叫 WMI 實作的方法。 不過,當提供者從相同的方法本身實作中呼叫 IWbemServices 方法的 WMI 實作時,會有特殊考慮。 無論提供者呼叫方法的同步或異步版本,這些考慮都很重要。

提供者可以實作的每個 IWbemServices 方法,都有一個 pCtx 參數,這是一個指向 IWbemContext介面實作的指標。 當 WMI 呼叫提供者時,WMI 會在此參數中傳遞有效的指標。 提供者必須一律在服務要求時對WMI所做的任何呼叫中傳遞這個相同的指標。 忽略適當地設定 pCtx 可能會導致WMI 啟動無限迴圈。

下列程式代碼範例示範從 getObjectAsync作內呼叫 GetObject WMI 實作的正確方式。

STDMETHODIMP CClassProv::GetObjectAsync (BSTR ObjectPath,
    long lFlags, IWbemContext *pCtx,
    IWbemObjectSink *pHandler)
{
  IWbemClassObject *pclObj = NULL;
  IWbemServices* m_pNamespace;
  HRESULT hr = m_pNamespace->GetObject(
      _bstr_t(L"AClass"), 0, pCtx, &pclObj, 
      NULL );
  pclObj->Release();
  return pHandler->SetStatus(0, hr, NULL, NULL);
}

本主題中的C++程式代碼範例需要下列參考和 #include 語句才能正確編譯。

#define _WIN32_DCOM
#include <iostream>
using namespace std;
#include <comdef.h>
#include <Wbemidl.h>
#pragma comment(lib, "wbemuuid.lib")

實例、類別和屬性提供者在處理讀取請求時,不得發出任何要求 WMI 修改數據。 此規則的例外只有推送提供者。 推送提供者是類別提供者,會將數據儲存在 WMI 存放庫中,並依賴 WMI 來處理來自用戶端的要求。 在維護讀取要求時,推送提供者可以更新 WMI 存放庫,但必須在適當的 IWbemServices 呼叫中,將 lFlags 參數設定為 WBEM_FLAG_OWNER_UPDATE

事件提供者在服務呼叫時不得進行任何類別變更。 它們也無法發出任何事件相關呼叫,例如修改事件篩選條件。

開發 WMI 提供者

設定 Namepace 安全性描述元

保護您的提供者