Partager via


Modèle objet VDS

[À compter de Windows 8 et Windows Server 2012, l’interface COM du service de disque virtuel est remplacée par l’API Gestion du stockage Windows.]

VDS fournit un accès indirect aux périphériques de stockage basés sur l’hôte, tels que les disques et les périphériques CD-ROM, ainsi qu’aux groupes de disques gérés par des contrôleurs RAID matériels. Alors que certaines entités de stockage modélisent des appareils physiques, d’autres modélisent des constructions virtuelles : volumes, partitions, etc. Les objets décrits dans cette rubrique représentent à la fois les entités physiques et virtuelles de VDS.

Les applications appellent les méthodes exposées par ces objets et VDS appelle le fournisseur approprié pour effectuer les opérations de stockage demandées. Une application n’appelle jamais un programme fournisseur directement.

Classification des objets

Comme le montre l’illustration suivante, les programmes du fournisseur de logiciels implémentent des objets qui modélisent des entités basées sur l’hôte ; les programmes de fournisseur de matériel implémentent des objets qui modélisent des périphériques RAID matériels internes et externes ; les objets communs restants sont indépendants du fournisseur ou sont implémentés par VDS. Une broche, qui n’est pas un objet VDS, est un terme de support de stockage générique qui comprend des étendues de disque ou de lecteur.

Diagramme montrant une classification d’objets, définis comme « objets communs », « objets du fournisseur de logiciels » et « objets du fournisseur de matériel ».

Pour en savoir plus sur le comportement de chaque objet, sélectionnez l’une des rubriques suivantes :

Création d’objets

Les opérations de configuration et de requête associées à la création d’objets peuvent prendre beaucoup de temps ; par conséquent, VDS appelle toutes les méthodes de manière asynchrone. Le fournisseur de découverte retourne tous les événements d’achèvement, d’erreur ou de changement d’état. Les fournisseurs de logiciels consignent également toutes les erreurs et les changements d’état significatifs.

Suppression de l'objet

Plusieurs méthodes VDS suppriment ou transforment des objets VDS. Un appelant peut contenir une référence, par le biais d’un pointeur d’interface, à un objet supprimé après le retour de la méthode. Lorsque l’appelant libère l’interface, VDS supprime l’objet.

En ce qui concerne la suppression d’objets, les appelants doivent s’abstenir d’appeler quoi que ce soit à l’exception de la méthode IUnknown::Release sur ces interfaces. Le fournisseur doit être suffisamment robuste pour traiter les appelants errants; si un appelant appelle une méthode sur un objet supprimé, le fournisseur doit retourner VDS_E_OBJECT_DELETED.

Initialisation du service

VDS fournit un identificateur de classe (Clsid) pour le chargeur de service et les objets de service, mais seul le Clsid du chargeur de service est public. L’initialisation du service se produit lorsque les fournisseurs, une application appelante et le service effectuent les tâches suivantes :

  • Chaque nouveau fournisseur appelle la méthode IVdsAdmin::RegisterProvider pendant l’installation pour s’inscrire auprès de VDS. L’appel crée une clé de Registre sous la ruche SYSTEM, identifiée par le GUID d’objet du fournisseur. Sous cette clé se trouve le Clsid de l’objet fournisseur, le nom, la version et le GUID de version du fournisseur.

    Notes

    Les GUID d’objet fournisseur sont persistants ; les GUID d’objets logiciels et matériels ne le sont pas.

     

  • Une application appelle la fonction CoCreateInstance , en passant le clsid du chargeur de service comme argument. Avec un pointeur vers l’objet de chargeur de service, l’application peut démarrer VDS localement ou à distance en passant le nom d’ordinateur souhaité en tant que paramètre à la méthode IVdsServiceLoader::LoadService .

  • Lorsque l’application initiale est attachée au service, VDS appelle d’abord CoCreateInstance sur chaque Clsid trouvé sous la clé de Registre, puis appelle la méthode IVdsProviderPrivate::OnLoad sur chaque fournisseur pour initialiser les programmes.

À propos des VDS

IVdsAdmin::RegisterProvider

IVdsServiceLoader::LoadService

IVdsProviderPrivate::OnLoad