Partager via


Méthode IVdsSubSystem2 ::CreateLun2 (vdshwprv.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 numéro d’unité logique. Cette méthode est identique à la méthode IVdsSubSystem ::CreateLun , à ceci près que les indicateurs automagiques sont fournis à l’aide d’une structure VDS_HINTS2 au lieu d’une structure VDS_HINTS .

Syntaxe

HRESULT CreateLun2(
  [in]  VDS_LUN_TYPE  type,
  [in]  ULONGLONG     ullSizeInBytes,
  [in]  VDS_OBJECT_ID *pDriveIdArray,
  [in]  LONG          lNumberOfDrives,
  [in]  LPWSTR        pwszUnmaskingList,
  [in]  VDS_HINTS2    *pHints2,
  [out] IVdsAsync     **ppAsync
);

Paramètres

[in] type

Valeur d’énumération VDS_LUN_TYPE qui spécifie le type de lun. Le nouveau LUN peut être un type automagic ou un type RAID spécifique, mais pas les deux. Si l’appelant spécifie un type automagique, un ou plusieurs indicateurs automagiques doivent être spécifiés dans le paramètre pHints .

Le pointeur d’interface pour le nouvel objet LUN peut être récupéré en appelant la méthode IVdsAsync ::Wait sur le pointeur d’interface retourné dans le paramètre ppAsync . La structure VDS_ASYNC_OUTPUT retournée par Wait contient le pointeur d’interface d’objet LUN dans le membre cl.pLunUnk .

[in] ullSizeInBytes

Taille, en octets, du nouveau numéro d’unité logique. Le fournisseur peut arrondir la taille vers le haut ou vers le bas pour répondre aux exigences d’alignement ou à d’autres restrictions. (Dans la plupart des cas, le fournisseur arrondit, en s’assurant que, à de rares exceptions près, le numéro d’unité logique est au moins aussi volumineux que demandé.)

Une fois le numéro d’unité logique créé, l’appelant peut déterminer la taille réelle du numéro d’unité logique en appelant la méthode IVdsLun ::GetProperties .

[in] pDriveIdArray

Pointeur vers un tableau qui contient un VDS_OBJECT_ID pour chacun des lecteurs à utiliser pour créer le numéro d’unité logique. En spécifiant une valeur non NULL pour ce paramètre, l’appelant demande au fournisseur d’utiliser tous les lecteurs, dans l’ordre fourni, en utilisant toutes les extensions sur un lecteur avant de passer au suivant, et de s’arrêter lorsque le numéro d’unité logique a atteint la taille demandée.

L’appelant peut également demander au fournisseur de sélectionner automatiquement les lecteurs en passant NULL dans ce paramètre et 0 dans lNumberOfDrives. (Passez NULL si et uniquement si lNumberOfDrives a la valeur 0.)

Si le paramètre type spécifie un type automagic, ce paramètre doit être NULL.

[in] lNumberOfDrives

Nombre de lecteurs spécifiés dans pDriveIdArray. Si l’appelant passe 0, le fournisseur sélectionne les lecteurs.

Si le paramètre type spécifie un type automagic, ce paramètre doit être 0.

Une fois le numéro d’unité logique créé, l’appelant peut déterminer les lecteurs utilisés en appelant la méthode IVdsLunPlex ::QueryExtents .

[in] pwszUnmaskingList

Liste spécifiant les ordinateurs auxquels l’accès au numéro d’unité logique doit être accordé. La liste est une chaîne délimitée par des points-virgules, terminée par NULL et lisible par l’homme.

Si la valeur est « », tous les ordinateurs qui ont un port HBA attaché au sous-système de stockage doivent avoir accès au numéro d’unité logique. Si la valeur est « », aucun ordinateur ne doit avoir accès au numéro d’unité logique.

Note Dans la pratique, si la valeur est « », la plupart des fournisseurs de matériel accordent uniquement aux ports et aux initiateurs de l’ordinateur local l’accès au numéro d’unité logique.

 

Si « * » ou « » est spécifié, aucune autre valeur ne peut être spécifiée.

Pour les réseaux Fibre Channel et les réseaux SAS (Serial Attached SCSI), chaque entrée est un nom WWN (World-Wide Name) 64 bits de chaque port sur lequel le numéro d’unité logique est non masqué, mis en forme sous la forme d’une chaîne hexadécimale (16 caractères de long), octet le plus significatif en premier. Par exemple, une adresse WWN de 01 :23 :45 :67 :89 :AB :CD :EF est représentée par « 0123456789ABCDEF ». Pour plus d’informations, consultez les spécifications T10 pour Fibre Channel et SAS.

Pour les réseaux iSCSI, chaque entrée est un nom qualifié iSCSI (IQN) de chaque initiateur auquel le numéro d’unité logique est masqué. Un numéro d’unité logique non masqué à un initiateur particulier est considéré comme associé à cet initiateur.

Note La liste de démasquage peut contenir le même WWN ou IQN plusieurs fois. L’appelant n’est pas censé supprimer des doublons de la liste ou valider le format du WWN ou IQN.
 
Une fois le numéro d’unité logique créé, l’appelant peut déterminer la liste de démasquage réelle en appelant la méthode IVdsLun ::GetProperties .

[in] pHints2

Pointeur vers une structure VDS_HINTS2 qui spécifie les indicateurs à utiliser lors de la création du numéro d’unité logique. Le fournisseur n’est pas tenu d’appliquer les indicateurs au numéro d’unité logique. Les indicateurs spécifiés dans la structure VDS_HINTS2 sont uniquement une requête adressée au fournisseur.

Une fois le numéro d’unité logique créé, l’appelant peut déterminer les indicateurs appliqués par le fournisseur en appelant la méthode IVdsLun2 ::QueryHints2 .

Si le paramètre type spécifie un type non automagique, ce paramètre doit être NULL.

[out] ppAsync

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

Si IVdsAsync ::Wait est appelé sur le pointeur d’interface retourné et qu’une valeur HRESULT de réussite est retournée, les interfaces retournées dans la structure VDS_ASYNC_OUTPUT doivent être libérées 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
VDS_E_PROVIDER_CACHE_CORRUPT
0x8004241FL
Il existe un problème logiciel ou de communication à l’intérieur d’un fournisseur qui met en cache des informations sur le tableau. Utilisez la méthode IVdsHwProvider ::Reenumerate suivie de la méthode IVdsHwProvider ::Refresh pour restaurer le cache.
VDS_E_OBJECT_DELETED
0x8004240BL
L’objet de sous-système n’est plus présent.
VDS_E_OBJECT_STATUS_FAILED
0x80042431L
Le sous-système est dans un état d’échec et ne peut pas effectuer l’opération demandée.
VDS_E_ANOTHER_CALL_IN_PROGRESS
0x80042404L
Une autre opération est en cours ; cette opération ne peut pas continuer tant que l’opération ou les opérations précédentes ne sont pas terminées.
VDS_E_OBJECT_NOT_FOUND
0x80042405L
L’identificateur ne fait pas référence à un objet existant. Cette valeur peut être retournée à partir de n’importe quelle méthode qui prend une constante VDS_OBJECT_ID .
VDS_E_NOT_SUPPORTED
0x80042400L
Cette opération ou cette combinaison de paramètres n’est pas prise en charge par ce fournisseur.
VDS_E_NOT_ENOUGH_SPACE
0x8004240FL
Il n’y a pas assez d’espace utilisable pour cette opération.
VDS_E_NOT_ENOUGH_DRIVE
0x80042410L
Trop peu de lecteurs gratuits sont présents dans le sous-système pour effectuer cette opération.

Remarques

En choisissant les valeurs appropriées pour les paramètres type et pHints2 , l’appelant peut spécifier les attributs du numéro d’unité logique entièrement, partiellement ou au minimum. Le fournisseur peut inclure automatiquement des attributs non spécifiés, en fonction des indicateurs automagiques spécifiés dans la structure VDS_HINTS2 vers laquelle pointe le paramètre pHints .

Remarques aux implémenteurs : Le fournisseur doit retourner un pointeur d’interface IVdsAsync dans le paramètre ppAsync , même si l’appel à cette méthode ne lance pas d’opération asynchrone.

La liste des noms WWN et IQN dans le paramètre pwszUnmaskingList peut contenir des noms en double. Il incombe au fournisseur de valider tous les noms de la liste et de supprimer les doublons si nécessaire.

En réponse à la méthode CreateLun2 et avant de démasquer le nouveau LUN sur n’importe quel hôte, le fournisseur doit remplir le premier et le dernier mégaoctets de zéros, laissant le numéro d’unité logique non initialisé.

Il existe une différence subtile entre les valeurs de retour E_INVALIDARG et VDS_E_NOT_SUPPORTED . Les fournisseurs ne sont pas censés implémenter toutes les fonctionnalités que l’API VDS peut présenter à un client. Par exemple, la méthode CreateLun2 expose la possibilité de créer de nombreux types différents de lun (par exemple, simple, miroir, à bandes et à parité). Toutefois, les fournisseurs ne sont pas tenus de prendre en charge tous les types de LUN. Si l’appelant spécifie une valeur pour le paramètre type qui n’est pas une valeur d’énumération VDS_LUN_TYPE valide, le fournisseur doit retourner E_INVALIDARG. Si l’appelant spécifie une valeur de type valide que le fournisseur ne prend pas en charge, le fournisseur doit retourner VDS_E_NOT_SUPPORTED.

Configuration requise

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

Voir aussi

IVdsAsync

IVdsAsync ::Wait

IVdsHwProvider ::Réenumerate

IVdsHwProvider ::Refresh

IVdsLun

IVdsLun2 ::QueryHints2

IVdsLun ::GetProperties

IVdsLunPlex ::QueryExtents

IVdsSubSystem2

IVdsSubSystem ::CreateLun

IVdsSubSystem ::QueryLuns

VDS_ASYNC_OUTPUT

VDS_HINTS2

VDS_LUN_TYPE