Compartir a través de


Método IVdsSubSystem2::CreateLun2 (vdshwprv.h)

[A partir de Windows 8 y Windows Server 2012, la interfaz COM del servicio de disco virtual se sustituye por la API de administración de almacenamiento de Windows.]

Crea un LUN. Este método es idéntico al método IVdsSubSystem::CreateLun , salvo que se proporcionan sugerencias de automagic mediante una estructura de VDS_HINTS2 en lugar de una estructura de VDS_HINTS .

Sintaxis

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
);

Parámetros

[in] type

Valor de enumeración VDS_LUN_TYPE que especifica el tipo LUN. El nuevo LUN puede ser un tipo automagic o un tipo RAID específico, pero no ambos. Si el autor de la llamada especifica un tipo automagic, se deben especificar una o varias sugerencias de automagic en el parámetro pHints .

El puntero de interfaz para el nuevo objeto LUN se puede recuperar llamando al método IVdsAsync::Wait en el puntero de interfaz devuelto en el parámetro ppAsync . La estructura VDS_ASYNC_OUTPUT devuelta por Wait contiene el puntero de interfaz de objeto LUN en el miembro cl.pLunUnk .

[in] ullSizeInBytes

Tamaño, en bytes, del nuevo LUN. El proveedor puede redondear el tamaño hacia arriba o hacia abajo para cumplir los requisitos de alineación u otras restricciones. (En la mayoría de los casos, el proveedor redondea, lo que garantiza que, con excepciones poco frecuentes, el LUN sea al menos tan grande como se solicite).

Una vez creado el LUN, el llamador puede determinar el tamaño real del LUN llamando al método IVdsLun::GetProperties .

[in] pDriveIdArray

Puntero a una matriz que contiene un VDS_OBJECT_ID para cada una de las unidades que se van a usar para crear el LUN. Al especificar un valor distinto de NULL para este parámetro, el autor de la llamada solicita que el proveedor use todas las unidades, en el orden proporcionado, usando todas las extensiones de una unidad antes de pasar a la siguiente y detenerse cuando el LUN haya alcanzado el tamaño solicitado.

Como alternativa, el autor de la llamada puede dirigir al proveedor para seleccionar las unidades automáticamente pasando NULL en este parámetro y 0 en lNumberOfDrives. (Pase NULL si y solo si lNumberOfDrives es 0).

Si el parámetro type especifica un tipo automagic, este parámetro debe ser NULL.

[in] lNumberOfDrives

Número de unidades especificadas en pDriveIdArray. Si el autor de la llamada pasa 0, el proveedor selecciona las unidades.

Si el parámetro type especifica un tipo automagic, este parámetro debe ser 0.

Una vez creado el LUN, el autor de la llamada puede determinar qué unidades están en uso llamando al método IVdsLunPlex::QueryExtents .

[in] pwszUnmaskingList

Lista que especifica los equipos a los que se va a conceder acceso al LUN. La lista es una cadena delimitada por punto y coma, terminada en NULL y legible por personas.

Si el valor es "", todos los equipos que tienen un puerto HBA conectado al subsistema de almacenamiento tendrán acceso al LUN. Si el valor es "", no se concederá acceso a ningún equipo al LUN.

Nota En la práctica, si el valor es "", la mayoría de los proveedores de hardware solo conceden los puertos e iniciadores en el equipo local acceso al LUN.

 

Si se especifica "*" o "", no se puede especificar ningún otro valor.

En el caso de las redes de canal de fibra y las redes SCSI (SAS) conectadas en serie, cada entrada es un nombre mundial de 64 bits (WWN) de cada puerto al que el LUN está sin máscara, con formato de cadena hexadecimal (16 caracteres de longitud), primero el byte más significativo. Por ejemplo, una dirección WWN de 01:23:45:67:89:AB:CD:EF se representa como "0123456789ABCDEF". Para obtener más información, consulte las especificaciones T10 para Canal de fibra y SAS.

En el caso de las redes iSCSI, cada entrada es un nombre completo iSCSI (IQN) de cada iniciador al que el LUN está desenmascarado. Un LUN sin máscara a un iniciador determinado se considera que está asociado a ese iniciador.

Nota La lista de desenmascarado puede contener el mismo WWN o IQN más de una vez. No se espera que el autor de la llamada quite duplicados de la lista o que valide el formato de WWN o IQN.
 
Una vez creado el LUN, el llamador puede determinar la lista de desenmascarado real llamando al método IVdsLun::GetProperties .

[in] pHints2

Puntero a una estructura de VDS_HINTS2 que especifica las sugerencias que se usarán para crear el LUN. El proveedor no es necesario para aplicar las sugerencias al LUN. Las sugerencias especificadas en la estructura VDS_HINTS2 son solo una solicitud al proveedor.

Una vez creado el LUN, el autor de la llamada puede determinar las sugerencias que el proveedor aplicó llamando al método IVdsLun2::QueryHints2 .

Si el parámetro de tipo especifica un tipo no automático, este parámetro debe ser NULL.

[out] ppAsync

Dirección de un puntero de interfaz IVdsAsync , que VDS inicializa al devolver. Los autores de llamadas deben liberar la interfaz. Use esta interfaz para cancelar, esperar o consultar el estado de la operación.

Si se llama a IVdsAsync::Wait en el puntero de interfaz devuelto y se devuelve un valor HRESULT correcto, las interfaces devueltas en la estructura VDS_ASYNC_OUTPUT deben liberarse llamando al método IUnknown::Release en cada puntero de interfaz. Sin embargo, si Wait devuelve un valor HRESULT de error o si el parámetro pHrResult de Wait recibe un valor HRESULT de error, los punteros de interfaz de la estructura VDS_ASYNC_OUTPUT son NULL y no es necesario liberar. Puede probar los valores HRESULT correctos o erróneos mediante las macros SUCCEEDED y FAILED definidas en Winerror.h.

Valor devuelto

Este método puede devolver valores HRESULT estándar, como E_INVALIDARG o E_OUTOFMEMORY, y valores devueltos específicos de VDS. También puede devolver códigos de error del sistema convertidos mediante la macro HRESULT_FROM_WIN32 . Los errores se pueden originar en VDS en sí o en el proveedor de VDS subyacente que se está usando. Entre los posibles valores devueltos se incluyen los siguientes.

Código o valor devuelto Descripción
VDS_E_PROVIDER_CACHE_CORRUPT
0x8004241FL
Hay un problema de software o comunicación dentro de un proveedor que almacena en caché información sobre la matriz. Use el método IVdsHwProvider::Reenumerate seguido del método IVdsHwProvider::Refresh para restaurar la memoria caché.
VDS_E_OBJECT_DELETED
0x8004240BL
El objeto del subsistema ya no está presente.
VDS_E_OBJECT_STATUS_FAILED
0x80042431L
El subsistema está en estado de error y no puede realizar la operación solicitada.
VDS_E_ANOTHER_CALL_IN_PROGRESS
0x80042404L
Otra operación está en curso; esta operación no puede continuar hasta que se completen las operaciones o operaciones anteriores.
VDS_E_OBJECT_NOT_FOUND
0x80042405L
El identificador no hace referencia a un objeto existente. Este valor se puede devolver desde cualquier método que tome una constante VDS_OBJECT_ID .
VDS_E_NOT_SUPPORTED
0x80042400L
Este proveedor no admite esta operación o combinación de parámetros.
VDS_E_NOT_ENOUGH_SPACE
0x8004240FL
No hay suficiente espacio utilizable para esta operación.
VDS_E_NOT_ENOUGH_DRIVE
0x80042410L
Hay demasiadas unidades libres en el subsistema para completar esta operación.

Comentarios

Al elegir los valores adecuados para los parámetros type y pHints2 , el autor de la llamada puede especificar los atributos del LUN de forma total, parcial o mínima. El proveedor puede incluir automáticamente atributos no especificados, en función de las sugerencias automagic especificadas en la estructura VDS_HINTS2 a la que apunta el parámetro pHints .

Notas para los implementadores: El proveedor debe devolver un puntero de interfaz IVdsAsync en el parámetro ppAsync , incluso si la llamada a este método no inicia una operación asincrónica.

La lista de WWN y IQN del parámetro pwszUnmaskingList puede contener nombres duplicados. Es responsabilidad del proveedor validar todos los nombres de la lista y quitar duplicados si es necesario.

En respuesta al método CreateLun2 y antes de desenmascarar el nuevo LUN en cualquier host, el proveedor debe rellenar los megabytes primero y último con ceros, dejando el LUN sin inicializar.

Hay una diferencia sutil entre los valores devueltos E_INVALIDARG y VDS_E_NOT_SUPPORTED . No se espera que los proveedores implementen todas las características que la API de VDS puede presentar a un cliente. Por ejemplo, el método CreateLun2 expone la capacidad de crear muchos tipos diferentes de LUN (por ejemplo, simple, reflejo, seccionado y paridad). Sin embargo, los proveedores no son necesarios para admitir todos los tipos de LUN. Si el autor de la llamada especifica un valor para el parámetro de tipo que no es un valor de enumeración de VDS_LUN_TYPE válido, el proveedor debe devolver E_INVALIDARG. Si el autor de la llamada especifica un valor de tipo válido que el proveedor no admite, el proveedor debe devolver VDS_E_NOT_SUPPORTED.

Requisitos

Requisito Value
Cliente mínimo compatible Windows 7 [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2008 R2 [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado vdshwprv.h
Library Uuid.lib

Consulte también

IVdsAsync

IVdsAsync::Wait

IVdsHwProvider::Reenumerate

IVdsHwProvider::Refresh

IVdsLun

IVdsLun2::QueryHints2

IVdsLun::GetProperties

IVdsLunPlex::QueryExtents

IVdsSubSystem2

IVdsSubSystem::CreateLun

IVdsSubSystem::QueryLuns

VDS_ASYNC_OUTPUT

VDS_HINTS2

VDS_LUN_TYPE