Freigeben über


Hilfsprogrammklassen im Anbieterframework

[WMI-C++-Klassen, die Teil des WMI-Anbieterframeworks sind, werden jetzt als in der finalen Phase befindlich angesehen, und es werden keine weiteren Entwicklungen, Verbesserungen oder Updates für nicht sicherheitsrelevante Probleme bereitgestellt, die diese Bibliotheken betreffen. Für alle Neuentwicklungen sollten die MI-APIs verwendet werden.]

Die Anbieterframework-Bibliotheken Framedyd.dll (Debugversion) und Framedyn.dll (Releaseversion) implementieren mehrere Anbieterhilfsklassen. Einige Funktionen in Framedyn.dll wurden aus den Headerdateien entfernt. Um diese Funktionen weiterhin zu verwenden, fügen Sie #define FRAMEWORK_ALLOW_DEPRECATED Ihrem Code hinzu, bevor Sie Fwcommon.h einschließen.

Sie können einzelne Anbieter entfernen, die nicht mehr benötigt werden.

Um diese Funktion zu verwenden, müssen Sie die drei folgenden Änderungen an Ihrem Anbieter in MainDll.cpp vornehmen:

  • In der Funktion DllMain, in der Sie CWbemProviderGlue::FrameworkLoginDLL aufrufen, müssen Sie einen zweiten Parameter hinzufügen, der ein Zeiger auf einen Langwert ist.
  • In der Funktion DllCanUnloadNow, in der Sie CWbemProviderGlue::FrameworkLogoffDLL aufrufen, müssen Sie einen zweiten Parameter hinzufügen, der ein Zeiger auf einen Langwert ist.
  • In der Funktion DllGetClassObject, in der Sie eine Instanz von CWbemGlueFactory erstellen, müssen Sie einen Parameter hinzufügen, der ein Zeiger auf einen Langwert ist.

In allen drei Fällen muss der Zeiger auf einen Langwert derselbe Zeiger sein.

Hinweis

In Maindll.cpp müssen die Routinen DllGetClassObject, DllCanUnloadNow, DllRegisterServer, DllUnregisterServer und DllMain in einen Try/Catch-Block eingeschlossen werden.

 

Achtung

Anbieter-Debugging-Builds sind mit Framedyd.lib für Framedyd.dll verknüpft. Framedyd.dll befindet sich im Verzeichnis „Microsoft Windows Software Development Kit (SDK)\bin“, das nicht im Systempfad enthalten ist. Wenn ein Debugging-Build eines Anbieters mit dem Windows Management-Dienst getestet wird, kann der Frameworkanbieter nicht geladen werden, da Framedyd.dll oder eine seiner Abhängigkeiten nicht gefunden wird. Daher müssen Sie entweder Framedyd.dll aus dem Windows SDK \bin-Verzeichnis in das Verzeichnis \system32\wbem kopieren oder das Windows SDK \bin-Verzeichnis zum Systemsuchpfad hinzufügen.

 

In der folgenden Tabelle sind die Hilfsprogrammklassen des Anbieterframeworks aufgeführt.

Hilfsprogrammklasse Beschreibung
CHString Stellt Zeichenfolgenvergleichs- und Manipulationsfunktionen für WMI bereit.
CHStringArray Enthält Informationen zum Erstellen und Bearbeiten von Arrays von CHString.
TRefPointerCollection Gewährt Zugriff auf eine Containerklasse für Zeiger.
WBEMTime Unterstützt Konvertierungen zwischen verschiedenen Windows- und ANSI C-Laufzeitformaten.
WBEMTimeSpan Enthält Hilfsfunktionen, die zum Berechnen und Halten der Zeitspanne zwischen zwei WBEMTime-Objekten verwendet werden.

 

Hinweis

Die Klassen CHString and CHStringArray sind ähnlich den Microsoft Foundation Classes (MFC) CString und CStringArray. Die WMI-Versionen sind vorhanden, damit Entwickler auf Zeichenfolgenbearbeitungs- und Vergleichsmethoden zugreifen können, ohne auf MFC zugreifen zu müssen. Die Klassen WBEMTime und WBEMTimeSpan sind ebenfalls ähnlich den MFC-Klassen CTime und CTimeSpan. Die WMI-Versionen können Zeit mit Nanosekundengenauigkeit speichern und auch zu und von BSTR konvertieren. Weitere Informationen zu den Klassen CString, CStringArray, CTime und CTimeSpan finden Sie in der Dokumentation zu MFC-Desktopanwendungen.

 

BSTR-Werte, die von WBEMTime-Methoden zurückgegeben werden, haben das Datum/Uhrzeit-Format: „yyyymmddHHMMSS.mmmmmmsUUU“

BSTR-Werte, die von WBEMTimeSpan-Methoden zurückgegeben werden, haben das Intervallformat: „ddddddddHHMMSS.mmmmmm:000“

Obwohl Uhrzeiten und Zeitspannen intern als Nanosekunden gespeichert werden, werden sie nicht unbedingt mit Nanosekundengenauigkeit gespeichert. Dies liegt daran, dass WBEMTime-Objekte mithilfe von Zeitformaten erstellt werden können, die auf eine Sekunde genau sind (struct tm und time_t). Durch das Hinzufügen von künstlichen Dezimalstellen wird die Genauigkeit nicht erhöht.