Udostępnij przez


Programowanie za pomocą protokołu SMP

Dostawca usługi WMI

Interfejsy dostawcy zarządzania magazynem (SMP) są oparte na technologii WMI. Chociaż można napisać protokół SMP przy użyciu usługi WMI w wersji 1, zdecydowanie zalecamy napisanie dostawcy usługi WMI w wersji 2 przy użyciu języka C/C++. Nie zalecamy używania programu .NET Framework na potrzeby programowania za pomocą protokołu SMP, ponieważ niektóre ważne funkcje mogą nie być dostępne za pośrednictwem platformy .NET. W dodatku:

  • Usługa WMI w wersji 1 jest silnie zależna od COM, co sprawia, że nauka jej jest trudna i czasochłonna.
  • Usługa WMI w wersji 2 jest bliższa standardom branżowym niż WMI v1; Usługa WMI w wersji 2 używa WS-Management zamiast modelu DCOM.
  • Dostawcy mogą korzystać z udoskonalonego raportowania błędów i obsługi zdarzeń w WMI w wersji 2.
  • Dostawcy mogą korzystać z rozszerzeń programu PowerShell i integracji w usłudze WMI w wersji 2.

Lista kontrolna zasobów rozwojowych

Przedmiot Lokalizacja Uwaga / Notatka
Pliki MOF klasy bazowej: Storagewmi_provider.mof i wszystkie pliki MOF rozpoczynające się od "msft_" w nazwie pliku. Windows Software Development Kit (SDK) W folderze %SDK_Installed_Location%\Windows Kits\x.x\Include\um
Inne wymagane pliki MOF: qualifiers.mof i CIM_Error.mof Rozproszona grupa zadaniowa zarządzania: http://dmtf.org/standards/cim Te pliki nie są zdefiniowane przez firmę Microsoft.
Plik nagłówka: mi.h Windows SDK W lokalizacji %SDK_Installed_Location%\Windows Kits\x.x\Include\um
Narzędzie do generowania szkieletu dla dostawcy i plik .dll: Convert-MofToProvider.exe Windows SDK W obszarze %SDK_Installed_Location%\Windows Kits\x.x\bin\x64\ lub ...\bin\x86
Narzędzie rejestracji dostawcy: Register-CimProvider.exe %OS_Install_Path%\Windows\System32\

Definicja MOF

Początkowe opracowywanie protokołu SMP odbywa się w trzech prostych krokach:

  1. Rozszerz MOF dostawcy.
  2. Generowanie szkieletu dostawcy (lub wycinków).
  3. Implementowanie zalążków.

Rozszerzanie uwierzytelniania MOF dostawcy

MOFs SMP znajdują się w katalogu 'include' Windows SDK. Są poprzedzone prefiksem MSFT_*. Skopiuj te pliki do katalogu deweloperów wraz z plikami CIM_Error.mof i qualifiers.mof. Każdy MOF definiuje co najmniej jedną klasę abstrakcyjną, która stanowi podstawę dla twojego SMP.

Podobnie jak w przypadku innych języków, nie można zaimplementować klasy abstrakcyjnej bezpośrednio. Musi być wyprowadzony i zaimplementowany w oddzielnej klasie. Utwórz własny MOF i uwzględnij wszystkie odpowiednie MOFy dostawcy. Następnie utwórz klasę pochodną dla każdej z klas bazowych, które dostawca zaimplementuje. Pamiętaj, aby wybrać unikatowy prefiks dla klas. Na przykład firma o nazwie "Contoso Storage Inc". może nadawać prefiksy klasom za pomocą CONTOSO_* lub CSI_*. Na przykład w przypadku MSFT_StorageProvider prefiks "CONTOSO_" daje CONTOSO_StorageProvider. Klasa powinna teraz wyglądać następująco:

    class CONTOSO_StorageProvider : MSFT_StorageProvider
    {
        ...
    }

Po utworzeniu tych klas szkieletów należy skopiować wszystkie deklaracje metod dla metod, które mają zostać zaimplementowane. Wszystkie metody, które nie są kopiowane (niezależnie od tego, czy są zaimplementowane, czy nie), zwrócą MI_RESULT_NOT_SUPPORTED. Nie trzeba kopiować właściwości klasy. Aby zminimalizować błędy kompilacji MOF, zachowaj wszystkie kwalifikatory metod i parametrów.

Na koniec pamiętaj, aby uwzględnić te wiersze na początku moF:

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

Po zakończeniu kroku 1 możesz teraz wygenerować wycinki dostawcy przy użyciu Convert-MofToProvider.exe. Podając dane wejściowe do tego polecenia, pamiętaj, aby sprecyzować tylko klasy pochodne. Nagłówki klas bazowych są generowane niejawnie.

Zobacz Przykładowe pliki MOFS protokołu SMP.

Generowanie szkieletu dostawcy

Deweloperzy protokołu SMP mogą użyć narzędzia Convert-MofToProvider.exe z zestawu WMI SDK w celu wygenerowania projektu szkieletowego dostawcy. Ten projekt zawiera listę plików nagłówkowych i źródłowych języka C wstępnie wypełnionych metodami dostawcy WMI. Dostarczając implementację dla tych metod, deweloperzy mogą zapewnić obsługę sprzętu pamięci masowej.

Umieść wszystkie MOFy z sekcji "Lista kontrolna zasobów programistycznych" oraz MOFy, które utworzyłeś, w jednym folderze. Następnie użyj następującego polecenia w wierszu polecenia, aby wygenerować szkielet dostawcy (zapoznaj się z tekstem pomocy dla najbardziej aktualnych opcji aktualizacji):

    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

Na koniec dołącz plik nagłówka mi.h do projektu programistycznego.

Klasy StorageProvider, StorageSubSystem i VirtualDisk są obowiązkowe. W zależności od możliwości danej macierzy pamięci masowej, StoragePool, ResilienceSetting, PhysicalDisk, MaskingSet, InitiatorId, TargetPort, TargetPortal, OffloadDataTransferSetting i StorageJob są opcjonalne.

Aby ułatwić proces programowania i testowania, zalecana sekwencja implementacji jest następująca:

  1. EnumerateInstances: Obsługa podstawowych zapytań dla wymaganych klas StorageProvider, StorageSubSystem, VirtualDisk.
  2. GetInstance: usługa GetInstance jest wymagana w przypadku wielu operacji WMI, w tym wywołania metody.
  3. Create*/DeleteObject: Zaimplementuj wszystkie metody tworzenia i usuwania dla obiektów obsługiwanych przez dostawcę.
  4. Skojarzenia obiektów: skojarzenia umożliwiają szybkie i łatwe przechodzenie między obiektami tablicy. Do implementacji są wymagane klasy EnumerateInstances, AssociatorsOf i ReferencesOf w klasie associator. Metoda GetInstance na asocjatorze nie jest konieczna, ale metoda GetInstance na obiektach źródłowych i docelowych jest wymagana.
  5. Wskazania: Wskazania umożliwiają dostawcy powiadamianie aplikacji do zarządzania o zmianie.
  6. Pozostałe metody.

Rejestracja dostawcy

Uruchom wiersz polecenia. Zarejestruj dostawcę za pomocą następującego polecenia:

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