Freigeben über


SMP-Entwicklung

WMI-Anbieter

SMP-Schnittstellen (Storage Management Provider) sind WMI-basiert. Obwohl Sie einen SMP mit WMI v1 schreiben können, wird dringend empfohlen, einen WMI v2-Anbieter mit C/C++ zu schreiben. Es wird nicht empfohlen, .NET Framework für die SMP-Entwicklung zu verwenden, da einige wichtige Funktionen möglicherweise nicht über die .NET-Plattform verfügbar sind. Außerdem:

  • WMI v1 hat eine starke Abhängigkeit von COM, die schwierig und zeitaufwendig sein kann, um zu lernen.
  • WMI v2 richtet sich näher an Branchenstandards als WMI v1; WMI v2 verwendet WS-Management anstelle von DCOM.
  • Anbieter können in WMI v2 ein besseres Fehler-/Ereignising verwenden.
  • Anbieter können PowerShell-Erweiterungen und -Integration in WMI v2 nutzen.

Prüfliste für Entwicklungsressourcen

Artikel Location Hinweis
MOF-Basisklassendateien: Storagewmi_provider.mof und alle MOF-Dateien beginnend mit "msft_" im Dateinamen. Windows Software Development Kit (SDK) Unter %SDK_Installed_Location%\Windows Kits\x.x\Include\um
Andere erforderliche MOF-Dateien: qualifiers.mof und CIM_Error.mof Task Force für verteilte Verwaltung: http://dmtf.org/standards/cim Diese Dateien sind nicht von Microsoft definiert.
Headerdatei: mi.h Windows SDK Unter %SDK_Installed_Location%\Windows Kits\x.x\Include\um
Tool zur Anbieterskelettgenerierung und .dll Datei: Convert-MofToProvider.exe Windows SDK Unter %SDK_Installed_Location%\Windows Kits\x.x\bin\x64\ oder ...\bin\x86
Anbieterregistrierungstool: Register-CimProvider.exe %OS_Install_Path%\Windows\System32\

MOF-Definition

Die anfängliche SMP-Entwicklung erfolgt in drei einfachen Schritten:

  1. Erweitern Des Anbieters MOF.
  2. Generieren Sie ein Anbieterskelett (oder Stubs).
  3. Implementieren Sie Stubs.

Erweitern des Anbieter-MOF

Die SMP-MOFs befinden sich im Windows SDK-Ordner "Include". Sie haben das Präfix MSFT_*. Kopieren Sie diese Dateien zusammen mit CIM_Error.mof und qualifiers.mof in Ihr Entwicklungsverzeichnis. Jedes MOF definiert eine oder mehrere abstrakte Klassen, die die Basis für Ihren SMP bilden.

Ähnlich wie bei anderen Sprachen kann eine abstrakte Klasse nicht direkt implementiert werden. Sie muss in einer separaten Implementierungsklasse abgeleitet und implementiert werden. Erstellen Sie Ihr eigenes MOF, und schließen Sie alle relevanten Anbieter-MOFs ein. Erstellen Sie dann eine abgeleitete Klasse für jede der Basisklassen, die Ihr Anbieter implementiert. Achten Sie darauf, ein eindeutiges Präfix für Ihre Klassen zu wählen. Beispielsweise ein Unternehmen mit dem Namen "Contoso Storage Inc". können entweder ihre Klassen mit CONTOSO_* oder CSI_* voranstellen. For example, for MSFT_StorageProvider, a prefix of "CONTOSO_" would yield CONTOSO_StorageProvider. Die -Klasse müsste jetzt wie folgt aussehen:

    class CONTOSO_StorageProvider : MSFT_StorageProvider
    {
        ...
    }

Nachdem Sie diese Skelettklassen erstellt haben, müssen Sie dann alle Methodendeklarationen für die Methoden kopieren, die Sie implementieren möchten. Alle Methoden, die nicht kopiert werden (unabhängig davon, ob implementiert oder nicht), geben MI_RESULT_NOT_SUPPORTED zurück. Sie müssen die Klasseneigenschaften nicht kopieren. Um MOF-Kompilierungsfehler zu minimieren, behalten Sie alle Qualifizierer der Methoden und Parameter bei.

Achten Sie abschließend darauf, diese Zeilen am Anfang Ihres MOF einzuschließen:

    #pragma include("storagewmi_provider.mof")
    #pragma include("msft_qualifiers.mof")

Wenn Sie Schritt 1 abgeschlossen haben, können Sie nun die Anbieterstumbs mithilfe von Convert-MofToProvider.exe generieren. Achten Sie beim Bereitstellen von Eingaben für diesen Befehl darauf, nur die abgeleiteten Klassen anzugeben. Die Header für die Basisklassen werden implizit generiert.

Siehe SMP-Beispiel-MOFs.

Anbieterskelettgenerierung

SMP-Entwickler können das Convert-MofToProvider.exe Tool aus dem WMI SDK verwenden, um ein Anbieterskelettprojekt zu generieren. Dieses Projekt enthält eine Liste der Header- und C-Quelldateien, die mit WMI-Anbietermethoden ausgefüllt wurden. Durch die Bereitstellung von Implementierungen für diese Methoden können Entwickler Unterstützung für ihre Speicherhardware bereitstellen.

Platzieren Sie alle MOFs aus dem Abschnitt "Prüfliste für Entwicklungsressourcen" und die MOFs, die Sie in einem Ordner erstellt haben. Verwenden Sie als Nächstes den folgenden Befehl in einer Eingabeaufforderung, um die Anbieterskelett zu generieren (siehe Hilfetext für die aktuellsten Optionen):

    Convert-MofToProvider.exe
        -MofFile <path to your provider mof>
        -ClassList <list of ALL classes listed in your mof, space separated>
        -IncludePath <path to qualifiers.mof and CIM_Error.mof>
        -SkipQualifiers
        -SkipLocalize

Schließen Sie schließlich die Mi.h-Headerdatei in Ihr Entwicklungsprojekt ein.

"StorageProvider", "StorageSubSystem" und "VirtualDisk" sind obligatorische Klassen. Abhängig von den Funktionen Ihres Speicherarrays sind StoragePool, ResiliencSetting, PhysicalDisk, MaskingSet, InitiatorId, TargetPort, TargetPortal, OffloadDataTransferSetting und StorageJob optional.

Zur Vereinfachung des Entwicklungs- und Testprozesses folgt eine empfohlene Implementierungssequenz:

  1. EnumerateInstances: Unterstützen Sie grundlegende Abfragen für erforderliche Klassen StorageProvider, StorageSubSystem, VirtualDisk.
  2. GetInstance: GetInstance ist für viele WMI-Vorgänge erforderlich, einschließlich Methodenaufruf.
  3. Create*/DeleteObject: Implementieren Sie alle Erstellungs- und Löschmethoden für die Objekte, die Ihr Anbieter unterstützt.
  4. Objektzuordnungen: Zuordnungen ermöglichen eine schnelle und einfache Durchquerung zwischen Ihren Arrayobjekten. Für die Implementierung sind EnumerateInstances, AssociatorsOf und ReferencesOf für die Associator-Klasse erforderlich. GetInstance für die Zuordnung ist nicht erforderlich, aber GetInstance für die Quell- und Zielobjekte sind.
  5. Hinweise: Indikationen ermöglichen Es Ihrem Anbieter, Verwaltungsanwendungen über eine Änderung zu benachrichtigen.
  6. Rest der Methoden.

Anbieterregistrierung

Starten Sie eine Eingabeaufforderung. Registrieren Sie Ihren Anbieter mit dem folgenden Befehl:

    Register-CimProvider.exe 
    –Namespace root\Microsoft\Windows\Storage\Providers
    –ProviderName <name of your provider>
    –Path <path to your provider’s dll file>