Sdílet prostřednictvím


Volání do WMI

Zprostředkovatelé mohou volat metody implementované rozhraním WMI v rámci svých implementací metod. Existují však zvláštní aspekty, když poskytovatel volá implementaci rozhraní WMI IWbemServices metodu z vlastní implementace stejné metody. Tyto aspekty jsou důležité bez ohledu na to, jestli poskytovatel volá synchronní nebo asynchronní verzi metody.

Každá metoda IWbemServices, kterou může poskytovatel implementovat, obsahuje parametr pCtx, což je ukazatel na implementaci rozhraní IWbemContext. Když WMI volá poskytovatele, předá v tomto parametru platný ukazatel. Poskytovatel musí vždy předat tento stejný ukazatel ve všech voláních rozhraní WMI, která provede při servisních požadavcích. Zanedbání nastavení pCtx může způsobit, že WMI spustí nekonečnou smyčku.

Následující příklad kódu ukazuje správný způsob volání implementace WMI GetObject z implementace GetObjectAsync.

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);
}

Příklad kódu jazyka C++ v tomto tématu vyžaduje, aby byly správně zkompilovány následující odkazy a příkazy #include.

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

Poskytovatelé instancí, tříd a vlastností nesmí vydávat žádná volání rozhraní WMI požadující úpravu dat během zpracování žádosti o čtení. Jedinými poskytovateli, kteří jsou výjimkami tohoto pravidla, jsou "push" poskytovatelé. Poskytovatel push je zprostředkovatel třídy, který ukládá data v úložišti WMI a spoléhá na WMI ke zpracování požadavků od klientů. Při údržbě požadavku na čtení může poskytovatel push aktualizovat úložiště WMI, ale musí nastavit lFlags parametr na WBEM_FLAG_OWNER_UPDATE v příslušném volání IWbemServices.

Poskytovatelé událostí nesmí při vyřizování hovoru provádět žádné změny třídy. Nemůžou také vydávat žádná volání související s událostmi, například úpravu filtru událostí.

Vývoj zprostředkovatele WMI

nastavení popisovačů zabezpečení

Zabezpečení vašeho poskytovatele