Desarrollo de SMP
Un proveedor WMI
Las interfaces del proveedor de administración de almacenamiento (SMP) se basan en WMI. Aunque puede escribir un SMP mediante WMI v1, se recomienda encarecidamente escribir un proveedor de WMI v2 mediante C/C++. No se recomienda usar .NET Framework para el desarrollo de SMP, ya que es posible que algunas funcionalidades importantes no estén disponibles a través de la plataforma .NET. Además:
- WMI v1 tiene una gran dependencia de COM, lo que puede ser difícil y lento para aprender.
- WMI v2 se alinea más cerca de los estándares del sector que WMI v1; WMI v2 usa WS-Management en lugar de DCOM.
- Los proveedores pueden usar mejor error o evento en WMI v2.
- Los proveedores pueden usar extensiones de PowerShell e integración en WMI v2.
Lista de comprobación de recursos de desarrollo
Elemento | Location | Nota: |
---|---|---|
Archivos MOF de clase base: Storagewmi_provider.mof y todos los archivos MOF a partir de "msft_" en el nombre de archivo. | Kit de desarrollo de software de Windows (SDK) | En %SDK_Installed_Location%\Windows Kits\x.x\Include\mmm |
Otros archivos MOF necesarios: qualifiers.mof y CIM_Error.mof | Grupo de tareas de administración distribuida: http://dmtf.org/standards/cim | Estos archivos no están definidos por Microsoft. |
Archivo de encabezado: mi.h | Windows SDK | En %SDK_Installed_Location%\Windows Kits\x.x\Include\mmm |
Herramienta de generación de esqueleto del proveedor y archivo de .dll: Convert-MofToProvider.exe | Windows SDK | En %SDK_Installed_Location%\Windows Kits\x.x\bin\x64\ o ...\bin\x86 |
Herramienta de registro del proveedor: Register-CimProvider.exe | %OS_Install_Path%\Windows\System32\ |
Definición de MOF
El desarrollo inicial de SMP se realiza en tres sencillos pasos:
- Amplíe el MOF del proveedor.
- Generar un esqueleto de proveedor (o códigos auxiliares).
- Implemente códigos auxiliares.
Extensión del MOF del proveedor
Los MOF de SMP se encuentran en la carpeta de inclusión del SDK de Windows. Tienen el prefijo MSFT_*. Copie estos archivos en el directorio de desarrollo, junto con CIM_Error.mof y qualifiers.mof. Cada MOF define una o varias clases abstractas que forman la base de su SMP.
De forma similar a otros lenguajes, una clase abstracta no se puede implementar directamente. Debe derivarse e implementarse en una clase de implementación independiente. Cree su propio MOF e incluya todos los MOF del proveedor pertinentes. A continuación, cree una clase derivada para cada una de las clases base que implementará el proveedor. Asegúrese de elegir un prefijo único para las clases. Por ejemplo, una empresa denominada "Contoso Storage Inc". podría prefijar sus clases con CONTOSO_* o CSI_*. Por ejemplo, para MSFT_StorageProvider, un prefijo de "CONTOSO_" produciría CONTOSO_StorageProvider. La clase ahora debería verse así:
class CONTOSO_StorageProvider : MSFT_StorageProvider
{
...
}
Una vez que cree estas clases de esqueleto, debe copiar todas las declaraciones de método para los métodos que planea implementar. Todos los métodos que no se copian (independientemente de si se implementan o no) devolverán MI_RESULT_NOT_SUPPORTED. No es necesario copiar las propiedades de clase. Para minimizar los errores de compilación de MOF, mantenga todos los calificadores de los métodos y parámetros.
Por último, asegúrese de incluir estas líneas al principio del MOF:
#pragma include("storagewmi_provider.mof")
#pragma include("msft_qualifiers.mof")
Cuando termine el paso 1, ya está listo para generar los códigos auxiliares del proveedor mediante Convert-MofToProvider.exe. Al proporcionar la entrada a este comando, asegúrese de especificar solo las clases derivadas. Los encabezados de las clases base se generan implícitamente.
Consulte MOFs de ejemplo de SMP.
Generación del esqueleto del proveedor
Los desarrolladores de SMP pueden usar la herramienta Convert-MofToProvider.exe del SDK de WMI para generar un proyecto de esqueleto del proveedor. Este proyecto incluye una lista de archivos de origen de encabezado y C rellenados previamente con métodos de proveedor WMI. Al proporcionar implementaciones para estos métodos, los desarrolladores pueden proporcionar soporte técnico a su hardware de almacenamiento.
Coloque todos los MOF en la sección "Lista de comprobación de recursos de desarrollo" y los MOF que creó en una carpeta. A continuación, use el siguiente comando en un símbolo del sistema para generar el esqueleto del proveedor (consulte el texto de ayuda de las opciones más actualizadas):
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
Por último, incluya el archivo de encabezado mi.h en el proyecto de desarrollo.
Secuencia de desarrollo recomendada
StorageProvider, StorageSubSystem y VirtualDisk son clases obligatorias. Según las funcionalidades de la matriz de almacenamiento, StoragePool, ResiliencSetting, PhysicalDisk, MaskingSet, InitiatorId, TargetPort, TargetPortal, OffloadDataTransferSetting y StorageJob son opcionales.
Para facilitar el proceso de desarrollo y pruebas, sigue una secuencia recomendada de implementación:
- EnumerateInstances: admite consultas básicas para las clases necesarias StorageProvider, StorageSubSystem, VirtualDisk.
- GetInstance: GetInstance es necesario para muchas operaciones WMI, incluida la invocación de método.
- Create*/DeleteObject: implemente todos los métodos de creación y eliminación para los objetos que admite el proveedor.
- Asociaciones de objetos: las asociaciones permiten un recorrido rápido y sencillo entre los objetos de matriz. Se requieren EnumerateInstances, AssociatorsOf y ReferencesOf en la clase asociadora para la implementación. GetInstance en el asociador no es necesario, pero GetInstance en los objetos de origen y destino son.
- Indicaciones: las indicaciones permiten al proveedor notificar a las aplicaciones de administración sobre un cambio.
- Resto de métodos.
Registro de proveedor
Inicie un símbolo del sistema. Registre el proveedor con el siguiente comando:
Register-CimProvider.exe
–Namespace root\Microsoft\Windows\Storage\Providers
–ProviderName <name of your provider>
–Path <path to your provider’s dll file>