Método IVdsHwProviderStoragePools::CreateLunInStoragePool (vds.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 en un bloque de almacenamiento.

Sintaxis

HRESULT CreateLunInStoragePool(
  [in]  VDS_LUN_TYPE  type,
  [in]  ULONGLONG     ullSizeInBytes,
  [in]  VDS_OBJECT_ID StoragePoolId,
  [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 de LUN que se va a crear. 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 pHints2 .

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] StoragePoolId

Valor de VDS_OBJECT_ID que identifica el bloque de almacenamiento donde se va a crear el LUN. Este parámetro es necesario y no se puede GUID_NULL.

[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 calificado por 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

Puntero a una interfaz IVdsAsync que, tras la finalización correcta, recibe la interfaz IVdsAsync para supervisar y controlar esta operación. Los autores de llamadas deben liberar la interfaz recibida cuando terminen con ella. Si se llama al método IVdsAsync::Wait en la interfaz y se devuelve un valor HRESULT correcto, las interfaces devueltas en la estructura de 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 devuelto Descripción
S_OK
El método se completó correctamente.

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 pHints2 .

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 CreateLunInStoragePool 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 CreateLunInStoragePool expone la capacidad de crear muchos tipos diferentes de LUN (por ejemplo, simples, reflejados, seccionados 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 vds.h
Library Uuid.lib

Consulte también

IVdsHwProviderStoragePools

IVdsLun2::QueryHints2

IVdsLun::GetProperties

VDS_HINTS2

VDS_LUN_TYPE