Разработка 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 выполняется в трех простых шагах:
- Расширение MOF поставщика.
- Создайте скелет поставщика (или заглушки).
- Реализуйте заглушки.
Расширение 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 являются необязательными.
Чтобы упростить процесс разработки и тестирования, рекомендуется выполнить последовательность реализации:
- ПеречислениеInstances: поддержка базовых запросов для обязательных классов StorageProvider, StorageSubSystem, VirtualDisk.
- GetInstance: GetInstance требуется для многих операций WMI, включая вызов метода.
- Create*/DeleteObject: реализуйте все методы создания и удаления для объектов, поддерживаемых поставщиком.
- Связи объектов: ассоциации позволяют быстро и легко проходить между объектами массива. ПеречислениеInstances, AssociatorOf и ReferencesOf в классе associator требуется для реализации. GetInstance в ассоциаторе не требуется, но GetInstance на исходных и целевых объектах.
- Указания. Указания позволяют поставщику уведомлять приложения управления об изменении.
- Оставшаяся часть методов.
Регистрация поставщика
Запустите командную строку. Зарегистрируйте поставщика с помощью следующей команды:
Register-CimProvider.exe
–Namespace root\Microsoft\Windows\Storage\Providers
–ProviderName <name of your provider>
–Path <path to your provider’s dll file>