Dela via


Ringa anrop till WMI

Leverantörer kan anropa metoder som implementeras av WMI inifrån deras metodimplementeringar. Det finns dock särskilda överväganden när en provider anropar WMI-implementeringen av en IWbemServices-metod inifrån sin egen implementering av samma metod. Dessa överväganden är viktiga oavsett om providern anropar metodens synkrona eller asynkrona version.

Varje IWbemServices metod som en provider kan implementera har en pCtx parameter, en pekare till en IWbemContext gränssnittsimplementering. När WMI anropar providern skickar WMI en giltig pekare i den här parametern. En tjänsteleverantör måste alltid skicka samma pekare i alla anrop till WMI som de gör när de hanterar serviceförfrågningar. Om du inte anger pCtx på rätt sätt kan WMI starta en oändlig loop.

Följande kodexempel visar rätt sätt att anropa WMI-implementeringen av GetObject inifrån en implementering av 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);
}

C++-kodexemplet i det här avsnittet kräver följande referenser och #include-instruktioner för att kompilera korrekt.

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

Instans-, klass- och egenskapsproviders får inte utfärda några anrop till WMI som begär ändring av data när en läsbegäran behandlas. De enda leverantörer som är undantag från den här regeln är push-leverantörer. En push-provider är en klassprovider som lagrar data på WMI-lagringsplatsen och förlitar sig på WMI för att hantera begäranden från klienter. När en läsbegäran hanteras kan en push-provider uppdatera WMI-lagringsplatsen, men måste ange parametern lFlags till WBEM_FLAG_OWNER_UPDATE i det lämpliga IWbemServices-anropet.

Händelseleverantörer får inte göra några klassändringar medan de hanterar ett samtal. De kan inte heller utfärda några händelserelaterade anrop, till exempel att ändra ett händelsefilter.

Utveckla en WMI-provider

Ställa in Namespace-säkerhetsbeskrivningar

Skydda din provider