Hilfsklassen für Anbieterframework

[WMI C++-Klassen sind Teil des WMI-Anbieterframeworks, das jetzt als endgültig betrachtet wird, und es sind keine weiteren Entwicklungen, Verbesserungen oder Updates für nicht sicherheitsrelevante Probleme verfügbar, die diese Bibliotheken betreffen. Die MI-APIs sollten für alle Neuentwicklungen verwendet werden.]

Die Anbieterframeworkbibliotheken „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 entladen, die nicht mehr benötigt werden.

Um diese Funktion verwenden zu können, 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 long-Wert ist.
  • In der Funktion DllCanUnloadNow, in der Sie CWbemProviderGlue::FrameworkLogoffDLL aufrufen, müssen Sie einen zweiten Parameter hinzufügen, der ein Zeiger auf einen long-Wert 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 long-Wert ist.

In allen drei Fällen muss der Zeiger auf einen long-Wert derselbe sein.

Hinweis

In „Maindll.cpp“ müssen die Routinen DllGetClassObject, DllCanUnloadNow, DllRegisterServer, DllUnregisterServer und DllMain in einem try/catch-Block umschlossen werden.

 

Achtung

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

 

In der folgenden Tabelle sind die Hilfsklassen für das Anbieterframework aufgeführt:

Hilfsklasse BESCHREIBUNG
CHString Stellt Funktionen für den Vergleich und die Bearbeitung von Zeichenfolgen für WMI bereit.
CHStringArray Zum Erstellen und Bearbeiten von CHString-Arrays
TRefPointerCollection Gewährt Zugriff auf eine Containerklasse für Zeiger.
WBEMTime Erleichtert Konvertierungen zwischen verschiedenen Windows- und ANSI C-Laufzeitformaten.
WBEMTimeSpan Enthält Hilfsfunktionen, die zum Berechnen und Speichern der Zeitspannendifferenz zwischen zwei WBEMTime-Objekten verwendet werden.

 

Hinweis

Die Klassen CHString und CHStringArray ähneln den Microsoft Foundation Classes (MFC) CString und CStringArray. Die WMI-Versionen sind vorhanden, sodass Entwickler*innen auf Methoden für die Bearbeitung und den Vergleich von Zeichenfolgen zugreifen können, ohne auf MFC zugreifen zu müssen. Die Klassen WBEMTime und WBEMTimeSpan ähneln auch den MFC-Klassen CTime und CTimeSpan. Die WMI-Versionen können die Zeit nanosekundengenau speichern und auch die Konvertierung in und aus BSTR durchführen. Weitere Informationen zu den Klassen „CString“, „CStringArray“, „CTime“ und „CTimeSpan“ finden Sie auf MSDN unter Microsoft Foundation Classes.

 

Von WBEMTime-Methoden zurückgegebene BSTR-Werte sind im folgenden Format für Datum und Uhrzeit angegeben: „yyyymmddHHMMSS.mmmmmmsUUU“.

Von WBEMTime-Methoden zurückgegebene BSTR-Werte sind im folgenden Format für Datum und Uhrzeit angegeben: ddddddddHHMMSS.mmmmmm:000.

Obwohl Zeiten und Zeiträume intern als Nanosekunden gespeichert werden, werden sie nicht unbedingt nanosekundengenau gespeichert. Das liegt daran, dass WBEMTime-Objekte mit sekundengenauen Zeitformaten (struct tm und time_t) erstellt werden können. Das Hinzufügen künstlicher Dezimalstellen erhöht die Genauigkeit nicht.