Classes utilitaires du framework de fournisseur

[Les classes WMI C++ qui font partie du framework de fournisseur WMI sont désormais considérées comme finalisées ; aucun développement, amélioration ou mise à jour supplémentaire ne sera disponible pour des problèmes non liés à la sécurité qui concernent ces bibliothèques. Les API MI doivent être utilisées dans tout nouveau développement.]

Les bibliothèques du framework de fournisseur, Framedyd.dll (version debug) et Framedyn.dll (version release), implémentent plusieurs classes d’assistance de fournisseur. Certaines fonctions dans Framedyn.dll ont été supprimées des fichiers d’en-tête. Si vous voulez continuer d’utiliser ces fonctions, ajoutez #define FRAMEWORK_ALLOW_DEPRECATED dans votre code avant d’inclure Fwcommon.h.

Vous pouvez décharger les fournisseurs dont vous n’avez plus besoin.

Pour utiliser cette fonctionnalité, vous devez apporter les trois modifications suivantes à votre fournisseur dans MainDll.cpp :

  • Dans la fonction DllMain où vous appelez CWbemProviderGlue::FrameworkLoginDLL, vous devez ajouter un deuxième paramètre qui est un pointeur vers une valeur long.
  • Dans la fonction DllCanUnloadNow où vous appelez CWbemProviderGlue::FrameworkLogoffDLL, vous devez ajouter un deuxième paramètre qui est un pointeur vers une valeur long.
  • Dans la fonction DllGetClassObject où vous créez un instance de CWbemGlueFactory, vous devez ajouter un paramètre qui est un pointeur vers une valeur long.

Dans les trois cas, le pointeur vers une valeur long doit être le même pointeur.

Notes

Dans Maindll.cpp, les routines DllGetClassObject, DllCanUnloadNow, DllRegisterServer, DllUnregisterServer et DllMain doivent être intégrées à un bloc try/catch.

 

Attention

Les builds debug de fournisseur sont liées à Framedyd.lib pour Framedyd.dll. Framedyd.dll se trouve dans le répertoire \bin du Kit de développement logiciel (SDK) Microsoft Windows, et ce répertoire n’est pas inclus dans le chemin du système. Quand une build debug d’un fournisseur est testée avec le service Windows Management, le fournisseur du framework ne parvient pas à se charger, car Framedyd.dll ou l’une de ses dépendances est introuvable. Pour éviter cela, vous devez soit copier Framedyd.dll du répertoire \bin du SDK Windows vers le répertoire \system32\wbem, soit ajouter le répertoire \bin du SDK Windows au chemin de recherche du système.

 

Le tableau suivant liste les classes utilitaires du framework de fournisseur.

Classe utilitaire Description
CHString Fournit des fonctions de comparaison et de manipulation de chaînes pour WMI.
CHStringArray Contient des fonctions de création et de manipulation de tableaux CHString.
TRefPointerCollection Accorde l’accès à une classe de conteneur pour les pointeurs.
WBEMTime Facilite les conversions entre différents formats d’heure d’exécution Windows et ANSI C.
WBEMTimeSpan Contient des fonctions d’assistance utilisées pour calculer et stocker la différence d’intervalle de temps entre deux objets WBEMTime.

 

Notes

Les classes CHString et CHStringArray sont similaires aux classes MFC (Microsoft Foundation Classes) CString et CStringArray. Les versions WMI permettent aux développeurs d’accéder aux méthodes de manipulation et de comparaison des chaînes sans avoir à accéder à MFC. Les classes WBEMTime et WBEMTimeSpan sont également similaires aux classes MFC CTime et CTimeSpan. Les versions WMI peuvent stocker la valeur temps à la nanoseconde près, mais également la convertir en valeur BSTR (ou inversement). Pour plus d’informations sur les classes CString, CStringArray, CTime et CTimeSpan, consultez Microsoft Foundation Classes sur MSDN.

 

Les valeurs BSTR retournées par les méthodes WBEMTime sont au format Date et heure suivant : "yyyymmddHHMMSS.mmmmmmsUUU"

Les valeurs BSTR retournées par les méthodes WBEMTimeSpan sont au format Intervalle suivant : "ddddddddHHMMSS.mmmmmm:000"

Les heures et les intervalles de temps sont stockés en interne en nanosecondes, mais pas obligatoirement avec une précision de l’ordre de la nanoseconde. Cela s’explique par le fait que les objets WBEMTime peuvent être construits avec des formats de temps précis à une seconde (struct tm et time_t). L’ajout de décimales artificielles n’augmente pas la précision.