Método IVdsSubSystem::CreateLun (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.]

El método CreateLun crea un número de unidad lógica (LUN).

Sintaxis

HRESULT CreateLun(
  [in]  VDS_LUN_TYPE  type,
  [in]  ULONGLONG     ullSizeInBytes,
  [in]  VDS_OBJECT_ID *pDriveIdArray,
  [in]  LONG          lNumberOfDrives,
  [in]  LPWSTR        pwszUnmaskingList,
  [in]  VDS_HINTS     *pHints,
  [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] pHints

Puntero a una estructura de VDS_HINTS 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_HINTS 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 IVdsLun::QueryHints o al método IVdsLunPlex::QueryHints .

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
Este valor devuelto indica 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
Se puede devolver desde cualquier método que tome una constante VDS_OBJECT_ID . Este valor devuelto indica que el identificador no hace referencia a un objeto existente.
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 pHints , 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_HINTS a la que apunta el parámetro pHints .

Si el proveedor de VDS solo admite configuraciones de destino simples, el subsistema debe asociar automáticamente el objeto LUN recién creado con un objeto de destino iSCSI. Vea el valor VDS_SF_SUPPORTS_SIMPLE_TARGET_CONFIG de la enumeración VDS_SUB_SYSTEM_FLAG .

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.

El proveedor de hardware es responsable de quitar la información de partición del LUN para que se pueda reutilizar el LUN. Si el LUN es un disco MBR, esto se logra escribiendo ceros en el primer y último MB del disco. Para un disco GPT, se deben escribir ceros en el primer y último 16 KB del disco.

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

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.

Requisitos

Requisito Value
Cliente mínimo compatible Windows Vista [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2003 [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado vds.h
Library Uuid.lib

Consulte también

IVdsAsync

IVdsAsync::Wait

IVdsHwProvider::Reenumerate

IVdsHwProvider::Refresh

IVdsLun

IVdsLun::GetProperties

IVdsLun::QueryHints

IVdsLunPlex::QueryExtents

IVdsLunPlex::QueryHints

IVdsSubSystem

IVdsSubSystem::QueryLuns

VDS_ASYNC_OUTPUT

VDS_HINTS

VDS_LUN_TYPE