Partager via


Méthode IVdsPack ::CreateVolume (vds.h)

[À 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.]

Crée un volume dans le pack. Le pointeur d’interface pour le nouvel objet de volume peut être récupéré en appelant IVdsAsync ::Wait via le paramètre ppAsync . La structure VDS_ASYNC_OUTPUT retournée contient le pointeur d’interface d’objet volume dans le membre cv.pVolumeUnk .

Syntaxe

HRESULT CreateVolume(
  [in]  VDS_VOLUME_TYPE type,
  [in]  VDS_INPUT_DISK  *pInputDiskArray,
  [in]  LONG            lNumberOfDisks,
  [in]  ULONG           ulStripeSize,
  [out] IVdsAsync       **ppAsync
);

Paramètres

[in] type

Type de volume énuméré par VDS_VOLUME_TYPE. Les volumes sur les disques de base ne peuvent avoir qu’une seule étendue, et seul l’indicateur VDS_VT_SIMPLE est valide.

[in] pInputDiskArray

Pointeur vers un tableau de structures VDS_INPUT_DISK ; une structure pour chaque disque. Un disque ne peut être inclus dans le tableau qu’une seule fois. Tous les disques du tableau doivent être utilisés, sinon la méthode échoue. Les appelants doivent allouer et initialiser le tableau, et libérer la mémoire lorsque l’appel est retourné.

[in] lNumberOfDisks

Nombre total de disques contribuant au volume.

Note VDS impose une limite de 32 disques sur les volumes étendues, entrelacées et entrelacées avec parité (RAID-5).
 

[in] ulStripeSize

Si le volume est rayé, la taille de chaque bande en octets. Transmettez zéro octet pour VDS_VT_SIMPLE, VDS_VT_SPAN et VDS_VT_MIRROR ; 64 kilo-octets pour VDS_VT_STRIPE et VDS_VT_PARITY.

[out] ppAsync

Adresse d’un pointeur d’interface IVdsAsync , que VDS initialise au retour. Les appelants doivent libérer l’interface. Utilisez ce pointeur pour annuler, attendre ou interroger le status de l’opération.

Si vous appelez IVdsAsync ::Wait sur cette méthode et qu’une valeur HRESULT de réussite est retournée, vous devez libérer les interfaces retournées dans la structure VDS_ASYNC_OUTPUT en appelant la méthode IUnknown ::Release sur chaque pointeur d’interface. Toutefois, si Wait renvoie une valeur HRESULT d’échec, ou si le paramètre pHrResult de Wait reçoit une valeur HRESULT d’échec, les pointeurs d’interface dans la structure VDS_ASYNC_OUTPUT sont NULL et n’ont pas besoin d’être libérés. Vous pouvez tester les valeurs HRESULT de réussite ou d’échec à l’aide des macros SUCCEEDED et FAILED définies dans Winerror.h.

Valeur retournée

Cette méthode peut retourner des valeurs HRESULT standard, telles que E_INVALIDARG ou E_OUTOFMEMORY, et des valeurs de retour spécifiques à VDS. Il peut également retourner des codes d’erreur système convertis à l’aide de la macro HRESULT_FROM_WIN32 . Les erreurs peuvent provenir de VDS lui-même ou du fournisseur VDS sous-jacent utilisé. Les valeurs de retour possibles sont les suivantes.

Code/valeur de retour Description
S_OK
Le volume a été créé avec succès.
VDS_S_NO_NOTIFICATION
0x00042517L
Aucune notification d’arrivée de volume n’a été reçue. Vous devrez peut-être appeler IVdsService ::Refresh.
VDS_S_UPDATE_BOOTFILE_FAILED
0x00042434L
Le volume est créé correctement, mais VDS n’a pas pu mettre à jour les options de démarrage dans le magasin de données de configuration de démarrage (BCD).

Windows Server 2003 : Les options de démarrage sont stockées dans le fichier boot.ini sur un système x86 ou x64 ou nvRAM sur un système Itanium.

VDS_E_DISK_NOT_FOUND_IN_PACK
0x8004252DL
Les disques spécifiés n’appartiennent pas au même pack.
VDS_E_DMADMIN_METHOD_CALL_FAILED
0x80042420L
Le service LDM a échoué une méthode.
VDS_E_EXTENT_SIZE_LESS_THAN_MIN
0x80042433L
La taille d’extension passée est trop petite.
VDS_E_INVALID_DISK_COUNT
0x80042526L
Le nombre de disques spécifié n’est pas valide pour cette opération.
VDS_E_INVALID_MEMBER_COUNT
0x80042522L
Le nombre de membres pour le volume doit être supérieur à zéro.
VDS_E_INVALID_MEMBER_ORDER
0x80042524L
Les index membres doivent augmenter de façon monotone et commencer par zéro.
VDS_E_INVALID_OPERATION
0x80042415L
Le disque transmis est un cd-ROM ou un dvd.
VDS_E_INVALID_PACK
0x8004251AL
Cette opération n’est pas autorisée sur ce pack de disques.
VDS_E_INVALID_PLEX_COUNT
0x80042521L
Le nombre de plex pour le volume doit être supérieur à zéro.
VDS_E_INVALID_PLEX_ORDER
0x80042523L
Les index plex doivent augmenter de façon monotone et commencer par zéro.
VDS_E_INVALID_STRIPE_SIZE
0x80042525L
La taille de la bande en octets doit être une puissance de 2 pour les types de volumes à bandes et RAID-5, et doit être égale à zéro pour tous les autres types de volumes.
VDS_E_MISSING_DISK
0x80042454L
Le disque spécifié est manquant.
VDS_E_NO_MEDIA
0x80042412L
Il n’y a aucun média dans un lecteur amovible transmis via le tableau de disques.
VDS_E_NOT_ENOUGH_SPACE
0x8004240FL
L’espace est insuffisant sur l’un des disques.
VDS_E_NOT_SUPPORTED
0x80042400L
Le type de volume n’est pas pris en charge ou un volume existe déjà sur le disque amovible passé dans la méthode . Un disque amovible ne peut avoir qu’un seul volume.
VDS_E_OBJECT_NOT_FOUND
0x80042405L
Au moins l’un des disques passés est introuvable.
VDS_E_ONE_EXTENT_PER_DISK
0x80042531L
Un seul disque ne peut pas contribuer à plusieurs membres ou plusieurs plexes du même volume.
VDS_E_PACK_OFFLINE
0x80042444L
Le pack cible est inaccessible.
VDS_E_PARTITION_LIMIT_REACHED
0x80042407L
Le nombre maximal de partitions (partitions principales ou partitions primaires avec une partition étendue) existe déjà lorsque l’appelant tente de créer une partition principale ou une partition étendue supplémentaire.
VDS_E_PROVIDER_CACHE_CORRUPT
0x8004241FL
Le cache du fournisseur dynamique est endommagé.
VDS_E_VOLUME_DISK_COUNT_MAX_EXCEEDED
0x80042529L
Pas plus de 32 disques sont autorisés par volume.
VDS_E_VOLUME_TOO_SMALL
0x8004242CL
La taille du volume est trop petite.

Remarques

Note Cette méthode ne peut pas être utilisée pour créer un volume sur un disque amovible.
 
Les appelants utilisent cette méthode pour créer un volume simple, réparti, rayé, mis en miroir ou rayé avec parité (RAID-5) dans le pack actif. Les volumes simples et répartis ont exactement un plex et un membre. Les volumes à bandes et RAID-5 ont plusieurs colonnes et membres. Les volumes mis en miroir se composent de plusieurs plexes.

Les disques de base ne peuvent contenir que des volumes simples. Les disques dynamiques peuvent contenir des volumes de tous types tant que le système d’exploitation prend en charge l’opération de liaison ; Les plateformes non serveur ne prennent pas en charge les opérations de liaison à tolérance de panne. Tous les volumes nouvellement créés ne disposent pas d’une lettre de lecteur.

Sur un disque de base, cette méthode crée une partition principale. S’il existe déjà trois partitions principales sur le disque, il crée une partition étendue pour couvrir la plus grande étendue d’espace disque disponible contiguë restant sur le disque, puis crée un lecteur logique dans la partition étendue.

Un disque ne peut pas contribuer à plusieurs plex du même volume ; Toutefois, un seul disque peut contribuer à plusieurs volumes. Un volume simple n’a qu’une seule structure VDS_INPUT_DISK , tandis que les volumes répartis, entrelacés, mis en miroir et RAID-5 ont une structure pour chaque disque contributeur.

La taille du disque spécifiée dans la structure VDS_INPUT_DISK peut être le disque complet ou une partie du disque. Lorsque deux disques forment un volume mis en miroir, VDS utilise le plus petit disque pour calculer la taille de la miroir. (La stratégie du fournisseur détermine le décalage, la longueur et le nombre réels d’extensions de disque allouées sur un disque d’entrée donné.) Utilisez la méthode IVdsPack ::QueryVolumes pour déterminer la taille exacte du volume créé.

Pour créer un volume logique avec un paramètre d’alignement facultatif, utilisez la méthode IVdsPack2 ::CreateVolume2 ou utilisez la clé de RegistreHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\vds\Alignment pour spécifier la valeur d’alignement en octets.

Windows 7, Windows Server 2008 R2, Windows Vista et Windows Server 2008 : Sur un disque de base, la méthode CreateVolume ignore la clé de RegistreHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\vds\Alignment . Il s’agit d’un problème connu qui est en cours de résolution. Pour contourner ce problème, utilisez la méthode IVdsAdvancedDisk ::CreatePartition ou IVdsCreatePartitionEx ::CreatePartitionEx pour créer des partitions sur le disque de base afin qu’elles soient correctement alignées.

Les partitions et volumes dynamiques sont alignés à l’aide des valeurs sous la clé de Registre suivante :

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\vds\Alignment

L’alignement par défaut est de 1 Mo si le disque est de 4 Go ou plus, ou de 64 Ko si le disque est inférieur à 4 Go.

Les implémenteurs doivent retourner un pointeur vers l’interface IVdsAsync pour cette méthode, que l’appel lance ou non une opération asynchrone.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows Vista [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2003 [applications de bureau uniquement]
Plateforme cible Windows
En-tête vds.h
Bibliothèque Uuid.lib

Voir aussi

IVdsAsync

IVdsAsync ::Wait

IVdsPack

IVdsPack2 ::CreateVolume2

IVdsPack ::QueryVolumes

VDS_ASYNC_OUTPUT

VDS_INPUT_DISK

VDS_VOLUME_TYPE