Hívások indítása a WMI-hez
A szolgáltatók a WMI által implementált metódusokat a saját metódusimplementációikból hívhatják meg. Vannak azonban különleges szempontok, amikor egy szolgáltató meghívja egy IWbemServices metódus WMI-implementációját ugyanazon módszer saját implementációjából. Ezek a szempontok attól függetlenül fontosak, hogy a szolgáltató meghívja-e a metódus szinkron vagy aszinkron verzióját.
Minden IWbemServices metódus, amelyet a szolgáltató implementálhat, egy pCtx paraméterrel rendelkezik, amely egy IWbemContext felületi implementációra mutat. Amikor a WMI meghívja a szolgáltatót, a WMI egy érvényes mutatót ad át ebben a paraméterben. A szolgáltatónak mindig ugyanazt a mutatót kell átadnia a WMI-nek küldött hívások során, amelyeket a kérések kiszolgálása közben kezdeményeznek. Ha figyelmen kívül hagyja pCtx megfelelő beállítását, a WMI végtelen hurkot indíthat el.
Az alábbi példakód bemutatja, hogyan hívhatja meg a GetObject WMI-implementációját a GetObjectAsyncimplementációjából.
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);
}
A jelen témakör C++ kódjának példájához a következő hivatkozásokra és #include utasításokra van szükség a helyes fordításhoz.
#define _WIN32_DCOM
#include <iostream>
using namespace std;
#include <comdef.h>
#include <Wbemidl.h>
#pragma comment(lib, "wbemuuid.lib")
A példány-, osztály- és tulajdonságszolgáltatók nem adhatnak ki olyan hívásokat a WMI-nek, amely az olvasási kérések karbantartása során kéri az adatok módosítását. A szabály alól csak a push szolgáltatók jelentenek kivételt. A leküldéses szolgáltató egy osztályszolgáltató, amely adatokat tárol a WMI-adattárban, és a WMI-re támaszkodik az ügyfelektől érkező kérések kezeléséhez. Az olvasási kérelmek kezelése közben a leküldéses szolgáltató frissítheti a WMI-adattárat, de az lFlags paramétert úgy kell beállítania, hogy az WBEM_FLAG_OWNER_UPDATE legyen a megfelelő IWbemServices hívásnál.
Az eseményszolgáltatók nem módosíthatják az osztályt a hívás kezelése közben. Nem tudnak eseményhez kapcsolódó hívásokat kibocsátani, például nem tudják módosítani az eseményszűrőt.
Kapcsolódó témakörök
-
szolgáltatói biztonságossá tétele