Поделиться через


Разработка SMP

Поставщик WMI

Интерфейсы поставщика управления хранилищами (SMP) основаны на WMI. Хотя вы можете написать SMP с помощью WMI версии 1, мы настоятельно рекомендуем написать поставщик WMI версии 2 с помощью C/C++. Мы не рекомендуем использовать платформа .NET Framework для разработки SMP, так как некоторые важные функциональные возможности могут быть недоступны через платформу .NET. Дополнительно:

  • WMI версии 1 имеет тяжелую зависимость от COM, которая может быть сложной и потребляющей много времени для обучения.
  • WMI версии 2 соответствует отраслевым стандартам, чем WMI версии 1; WMI версии 2 использует WS-Management вместо DCOM.
  • Поставщики могут использовать лучшие ошибки и события в WMI версии 2.
  • Поставщики могут использовать расширения PowerShell и интеграцию в WMI версии 2.

Контрольный список ресурсов разработки

Товар Расположение Примечание.
MOF-файлы базового класса: Storagewmi_provider.mof и все MOF-файлы, начиная с "msft_" в имени файла. Windows SDK В разделе %SDK_Installed_Location%\Windows Kits\x.x\Include\um
Другие необходимые MOF-файлы: qualifiers.mof и CIM_Error.mof Группа задач распределенного управления: http://dmtf.org/standards/cim Эти файлы не определены корпорацией Майкрософт.
Файл заголовка: mi.h Пакет Windows SDK В разделе %SDK_Installed_Location%\Windows Kits\x.x\Include\um
Средство создания скелетов поставщика и файл .dll: Convert-MofToProvider.exe Пакет Windows SDK В разделе %SDK_Installed_Location%\Windows Kits\x.x\bin\x64\ или ...\bin\x86
Средство регистрации поставщика: Register-CimProvider.exe %OS_Install_Path%\Windows\System32\

Определение MOF

Начальная разработка SMP выполняется в трех простых шагах:

  1. Расширение MOF поставщика.
  2. Создайте скелет поставщика (или заглушки).
  3. Реализуйте заглушки.

Расширение MOF поставщика

MOFS SMP находятся в папке пакета SDK для Windows. Они префиксированы с помощью MSFT_*. Скопируйте эти файлы в каталог разработки вместе с CIM_Error.mof и qualifiers.mof. Каждый MOF определяет один или несколько абстрактных классов, которые образуют основу для SMP.

Аналогично другим языкам, абстрактный класс не может быть реализован напрямую. Он должен быть производным и реализован в отдельном классе реализации. Создайте собственный MOF и включите все соответствующие MOF-файлы поставщика. Затем создайте производный класс для каждого базового класса, который будет реализован поставщиком. Обязательно выберите уникальный префикс для классов. Например, компания с именем Contoso Storage Inc. может быть префикс их классов с CONTOSO_* или CSI_*. Например, для MSFT_StorageProvider префикс "CONTOSO_" даст CONTOSO_StorageProvider. Теперь класс должен выглядеть следующим образом:

    class CONTOSO_StorageProvider : MSFT_StorageProvider
    {
        ...
    }

После создания этих классов скелета необходимо скопировать все объявления методов для методов, которые планируется реализовать. Все методы, которые не копируются (независимо от того, реализовано или нет) возвращаются MI_RESULT_NOT_SUPPORTED. Не нужно копировать свойства класса. Чтобы свести к минимуму ошибки компиляции MOF, сохраните все квалификаторы методов и параметров.

Наконец, обязательно включите эти строки в начале MOF:

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

После завершения шага 1 теперь можно создать заглушки поставщика с помощью Convert-MofToProvider.exe. При предоставлении входных данных для этой команды обязательно укажите только производные классы. Заголовки базовых классов создаются неявно.

См . примерЫ MOF-файлов SMP.

Создание скелета поставщика

Разработчики SMP могут использовать средство Convert-MofToProvider.exe из пакета SDK WMI для создания проекта скелета поставщика. Этот проект содержит список исходных файлов заголовка и C, предварительно заполненных методами поставщика WMI. Предоставляя реализации для этих методов, разработчики могут предоставлять поддержку их оборудованию хранения.

Поместите все MOFS из раздела "Контрольный список ресурсов разработки" и MOFS, созданные в одну папку. Затем используйте следующую команду в командной строке для создания скелета поставщика (см. текст справки для наиболее актуальных параметров обновления):

    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

Наконец, добавьте файл заголовка mi.h в проект разработки.

StorageProvider, StorageSubSystem и VirtualDisk являются обязательными классами. В зависимости от возможностей массива хранилища, StoragePool, ResiliencSetting, PhysicalDisk, MaskingSet, InitiatorId, TargetPort, TargetPortal, OffloadDataTransferSetting и StorageJob являются необязательными.

Чтобы упростить процесс разработки и тестирования, рекомендуется выполнить последовательность реализации:

  1. ПеречислениеInstances: поддержка базовых запросов для обязательных классов StorageProvider, StorageSubSystem, VirtualDisk.
  2. GetInstance: GetInstance требуется для многих операций WMI, включая вызов метода.
  3. Create*/DeleteObject: реализуйте все методы создания и удаления для объектов, поддерживаемых поставщиком.
  4. Связи объектов: ассоциации позволяют быстро и легко проходить между объектами массива. ПеречислениеInstances, AssociatorOf и ReferencesOf в классе associator требуется для реализации. GetInstance в ассоциаторе не требуется, но GetInstance на исходных и целевых объектах.
  5. Указания. Указания позволяют поставщику уведомлять приложения управления об изменении.
  6. Оставшаяся часть методов.

Регистрация поставщика

Запустите командную строку. Зарегистрируйте поставщика с помощью следующей команды:

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