Partager via


Développement SMP

Un fournisseur WMI

Les interfaces SMP (Storage Management Provider) sont basées sur WMI. Bien que vous puissiez écrire un SMP à l’aide de WMI v1, nous vous recommandons vivement d’écrire un fournisseur WMI v2 à l’aide de C/C++. Nous vous déconseillons d’utiliser .NET Framework pour le développement SMP, car certaines fonctionnalités importantes peuvent ne pas être disponibles via la plateforme .NET. De plus :

  • WMI v1 a une dépendance lourde sur COM qui peut être difficile et fastidieux à apprendre.
  • WMI v2 s’aligne plus près des normes du secteur que WMI v1 ; WMI v2 utilise WS-Management au lieu de DCOM.
  • Les fournisseurs peuvent utiliser de meilleures erreurs/événements dans WMI v2.
  • Les fournisseurs peuvent utiliser des extensions PowerShell et une intégration dans WMI v2.

Liste de contrôle des ressources de développement

Article Emplacement Remarque
Fichiers MOF de la classe de base : Storagewmi_provider.mof et tous les fichiers MOF commençant par « msft_ » dans le nom de fichier. Kit de développement logiciel Windows Sous %SDK_Installed_Location%\Windows Kits\x.x\Include\um
Autres fichiers MOF requis : qualificateurs.mof et CIM_Error.mof Groupe de travail de gestion distribuée : http://dmtf.org/standards/cim Ces fichiers ne sont pas définis par Microsoft.
Fichier d’en-tête : mi.h SDK Windows Sous %SDK_Installed_Location%\Windows Kits\x.x\Include\um
Outil de génération de squelette du fournisseur et fichier .dll : Convert-MofToProvider.exe SDK Windows Sous %SDK_Installed_Location%\Windows Kits\x.x\bin\x64\ ou ...\bin\x86
Outil d’inscription du fournisseur : Register-CimProvider.exe %OS_Install_Path%\Windows\System32\

Définition MOF

Le développement SMP initial est effectué en trois étapes simples :

  1. Étendez le MOF du fournisseur.
  2. Générer un squelette de fournisseur (ou stubs).
  3. Implémentez des stubs.

Extension du MOF du fournisseur

Les moFs SMP se trouvent dans le dossier du Kit de développement logiciel (SDK) Windows. Ils sont précédés de MSFT_*. Copiez ces fichiers dans votre répertoire de développement, ainsi que CIM_Error.mof et qualificateurs.mof. Chaque MOF définit une ou plusieurs classes abstraites qui forment la base de votre SMP.

Comme pour d’autres langages, une classe abstraite ne peut pas être implémentée directement. Elle doit être dérivée et implémentée dans une classe d’implémentation distincte. Créez votre propre MOF et incluez tous les moFs de fournisseur appropriés. Ensuite, créez une classe dérivée pour chacune des classes de base que votre fournisseur implémentera. Veillez à choisir un préfixe unique pour vos classes. Par exemple, une société nommée « Contoso Storage Inc ». peut préfixer leurs classes avec CONTOSO_* ou CSI_*. Par exemple, pour MSFT_StorageProvider, un préfixe de « CONTOSO_ » génère CONTOSO_StorageProvider. La classe doit maintenant ressembler à ceci :

    class CONTOSO_StorageProvider : MSFT_StorageProvider
    {
        ...
    }

Une fois que vous avez créé ces classes squelettes, vous devez ensuite copier toutes les déclarations de méthode pour les méthodes que vous prévoyez d’implémenter. Toutes les méthodes qui ne sont pas copiées (qu’elles soient implémentées ou non) retournent MI_RESULT_NOT_SUPPORTED. Vous n’avez pas besoin de copier les propriétés de classe. Pour réduire les erreurs de compilation MOF, conservez tous les qualificateurs des méthodes et paramètres.

Enfin, veillez à inclure ces lignes au début de votre MOF :

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

Lorsque vous avez terminé l’étape 1, vous êtes maintenant prêt à générer les stubs de fournisseur à l’aide de Convert-MofToProvider.exe. Lorsque vous fournissez une entrée à cette commande, veillez à spécifier uniquement les classes dérivées. Les en-têtes des classes de base sont générés implicitement.

Consultez les exemples de moFs SMP.

Génération de squelette du fournisseur

Les développeurs SMP peuvent utiliser l’outil Convert-MofToProvider.exe à partir du Kit de développement logiciel (SDK) WMI pour générer un projet squelette de fournisseur. Ce projet inclut une liste d’en-têtes et de fichiers sources C préremplis avec les méthodes du fournisseur WMI. En fournissant des implémentations pour ces méthodes, les développeurs peuvent prendre en charge leur matériel de stockage.

Placez tous les moFs à partir de la section « Liste de contrôle des ressources de développement » et des moFs que vous avez créés dans un dossier. Ensuite, utilisez la commande suivante dans une invite de commandes pour générer le squelette du fournisseur (reportez-vous au texte d’aide pour connaître les options les plus mises à jour à jour) :

    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

Enfin, incluez le fichier d’en-tête mi.h dans votre projet de développement.

StorageProvider, StorageSubSystem et VirtualDisk sont des classes obligatoires. Selon les fonctionnalités de votre tableau de stockage, StoragePool, ResiliencSetting, PhysicalDisk, MaskingSet, InitiatorId, TargetPortal, OffloadDataTransferSetting et StorageJob sont facultatives.

Pour faciliter le processus de développement et de test, une séquence recommandée d’implémentation suit :

  1. EnumerateInstances : prend en charge les requêtes de base pour les classes requises StorageProvider, StorageSubSystem, VirtualDisk.
  2. GetInstance : GetInstance est requis pour de nombreuses opérations WMI, notamment l’appel de méthode.
  3. Create*/DeleteObject : implémentez toutes les méthodes de création et de suppression pour les objets pris en charge par votre fournisseur.
  4. Associations d’objets : les associations permettent un parcours rapide et facile entre vos objets de tableau. EnumerateInstances, AssociatorsOf et ReferencesOf sur la classe d’association sont nécessaires pour l’implémentation. GetInstance sur l’associateur n’est pas obligatoire, mais GetInstance sur les objets source et de destination sont.
  5. Indications : Les indications permettent à votre fournisseur d’informer les applications de gestion d’un changement.
  6. Reste des méthodes.

Inscription du fournisseur

Démarrez une invite de commandes. Inscrivez votre fournisseur avec la commande suivante :

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