Passage d’appels à WMI

Les fournisseurs peuvent appeler des méthodes implémentées par WMI à partir de leurs implémentations de méthode. Toutefois, il existe des considérations particulières quand un fournisseur appelle l’implémentation WMI d’une méthode IWbemServices à partir de sa propre implémentation de la même méthode. Ces considérations sont importantes, que le fournisseur appelle la version synchrone ou asynchrone de la méthode.

Chaque méthode IWbemServices qu’un fournisseur peut implémenter a un paramètre pCtx, un pointeur vers une implémentation d’interface IWbemContext. Quand WMI appelle le fournisseur, WMI passe un pointeur valide dans ce paramètre. Un fournisseur doit toujours passer ce même pointeur dans tous les appels à WMI qu’il effectue durant le traitement des requêtes. Si vous négligez de définir pCtx de manière appropriée, WMI peut démarrer une boucle infinie.

L’exemple de code suivant montre la façon appropriée d’appeler l’implémentation WMI de GetObject à partir d’une implémentation de 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);
}

L’exemple de code C++ de cette rubrique nécessite les références et les instructions #include suivantes pour être compilé correctement.

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

Les fournisseurs d’instances, de classes et de propriétés ne doivent pas émettre d’appels à WMI pour demander la modification des données durant le traitement d’une demande de lecture. Les seuls fournisseurs qui font exception à cette règle sont les fournisseurs d’envoi (push). Un fournisseur d’envoi est un fournisseur de classes qui stocke les données dans le dépôt WMI et s’appuie sur WMI pour gérer les requêtes des clients. Durant le traitement d’une demande de lecture, un fournisseur d’envoi peut mettre à jour le dépôt WMI, mais il doit affecter la valeur WBEM_FLAG_OWNER_UPDATE au paramètre lFlags dans l’appel au IWbemServices approprié.

Les fournisseurs d’événements ne doivent apporter aucun changement de classe pendant le traitement d’un appel. Ils ne doivent pas non plus émettre d’appels liés aux événements, par exemple la modification d’un filtre d’événement.

Développement d’un fournisseur WMI

Définition des descripteurs de sécurité d’espace de noms

Sécurisation de votre fournisseur