Método IVdsPack::CreateVolume (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 volumen dentro del paquete. El puntero de interfaz para el nuevo objeto de volumen se puede recuperar llamando a IVdsAsync::Wait a través del parámetro ppAsync . La estructura VDS_ASYNC_OUTPUT devuelta contiene el puntero de interfaz de objeto de volumen en el miembro cv.pVolumeUnk .

Sintaxis

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

Parámetros

[in] type

Tipo de volumen enumerado por VDS_VOLUME_TYPE. Los volúmenes de discos básicos solo pueden tener una extensión y solo la marca VDS_VT_SIMPLE es válida.

[in] pInputDiskArray

Puntero a una matriz de estructuras VDS_INPUT_DISK ; una estructura para cada disco. Un disco solo se puede incluir en la matriz una vez. Se deben usar todos los discos de la matriz o se produce un error en el método. Los autores de las llamadas deben asignar e inicializar la matriz y liberar la memoria cuando se devuelve la llamada.

[in] lNumberOfDisks

Número total de discos que contribuyen al volumen.

Nota VDS impone un límite de 32 discos en volúmenes distribuidos, seccionados y seccionados con volúmenes de paridad (RAID-5).
 

[in] ulStripeSize

Si el volumen está seccionado, el tamaño de cada franja en bytes. Pase cero bytes para VDS_VT_SIMPLE, VDS_VT_SPAN y VDS_VT_MIRROR; 64 kilobytes para VDS_VT_STRIPE y VDS_VT_PARITY.

[out] ppAsync

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

Si llama a IVdsAsync::Wait en este método y se devuelve un valor HRESULT correcto, debe liberar las interfaces devueltas en la estructura VDS_ASYNC_OUTPUT 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
S_OK
El volumen se creó correctamente.
VDS_S_NO_NOTIFICATION
0x00042517L
No se recibió ninguna notificación de llegada de volumen. Es posible que tenga que llamar a IVdsService::Refresh.
VDS_S_UPDATE_BOOTFILE_FAILED
0x00042434L
El volumen se crea correctamente, pero VDS no pudo actualizar las opciones de arranque en el almacén de datos de configuración de arranque (BCD).

Windows Server 2003: Las opciones de arranque se almacenan en el archivo boot.ini en un sistema x86 o x64 o NVRAM en un sistema Itanium.

VDS_E_DISK_NOT_FOUND_IN_PACK
0x8004252DL
Los discos especificados no pertenecen al mismo paquete.
VDS_E_DMADMIN_METHOD_CALL_FAILED
0x80042420L
Error en el servicio LDM de un método.
VDS_E_EXTENT_SIZE_LESS_THAN_MIN
0x80042433L
El tamaño de extensión pasado es demasiado pequeño.
VDS_E_INVALID_DISK_COUNT
0x80042526L
El número de discos especificados no es válido para esta operación.
VDS_E_INVALID_MEMBER_COUNT
0x80042522L
El número de miembros del volumen debe ser mayor que cero.
VDS_E_INVALID_MEMBER_ORDER
0x80042524L
Los índices de miembro deben aumentarse de forma monotónica y comenzar con cero.
VDS_E_INVALID_OPERATION
0x80042415L
El disco pasado es un dispositivo CD-ROM o DVD.
VDS_E_INVALID_PACK
0x8004251AL
Esta operación no se permite en este paquete de discos.
VDS_E_INVALID_PLEX_COUNT
0x80042521L
El recuento de plex para el volumen debe ser mayor que cero.
VDS_E_INVALID_PLEX_ORDER
0x80042523L
Los índices de plex deben aumentar de forma monotónica y comenzar con cero.
VDS_E_INVALID_STRIPE_SIZE
0x80042525L
El tamaño de franja en bytes debe ser una potencia de 2 para los tipos de volumen seccionados y RAID-5 y debe ser cero para todos los demás tipos de volumen.
VDS_E_MISSING_DISK
0x80042454L
Falta el disco especificado.
VDS_E_NO_MEDIA
0x80042412L
No hay ningún medio en una unidad extraíble que se pasa a través de la matriz de discos.
VDS_E_NOT_ENOUGH_SPACE
0x8004240FL
No hay suficiente espacio en uno de los discos.
VDS_E_NOT_SUPPORTED
0x80042400L
El tipo de volumen no se admite o ya existe un volumen en el disco extraíble pasado al método . Un disco extraíble solo puede tener un volumen.
VDS_E_OBJECT_NOT_FOUND
0x80042405L
No se encuentra al menos uno de los discos pasados.
VDS_E_ONE_EXTENT_PER_DISK
0x80042531L
Un único disco no puede contribuir a varios miembros o a varios plexos del mismo volumen.
VDS_E_PACK_OFFLINE
0x80042444L
No se puede acceder al paquete de destino.
VDS_E_PARTITION_LIMIT_REACHED
0x80042407L
El número máximo de particiones (particiones principales o particiones principales con una partición extendida) ya existe cuando el autor de la llamada intenta crear una partición principal adicional o una partición extendida.
VDS_E_PROVIDER_CACHE_CORRUPT
0x8004241FL
La caché del proveedor dinámico está dañada.
VDS_E_VOLUME_DISK_COUNT_MAX_EXCEEDED
0x80042529L
No se permiten más de 32 discos por volumen.
VDS_E_VOLUME_TOO_SMALL
0x8004242CL
El tamaño del volumen es demasiado pequeño.

Comentarios

Nota Este método no se puede usar para crear un volumen en un disco extraíble.
 
Los autores de llamadas usan este método para crear un nuevo volumen simple, distribuido, seccionado, reflejado o seccionado con paridad (RAID-5) en el paquete actual. Los volúmenes simples y distribuidos tienen exactamente un plex y un miembro. Los volúmenes seccionados y RAID-5 tienen varias columnas y miembros. Los volúmenes reflejados constan de varios plexos.

Los discos básicos solo pueden contener volúmenes simples. Los discos dinámicos pueden contener volúmenes de todos los tipos siempre que el sistema operativo admita la operación de enlace; Las plataformas que no son de servidor no admiten operaciones de enlace tolerantes a errores. Todos los volúmenes recién creados carecen de una letra de unidad.

En un disco básico, este método crea una partición principal. Si ya hay tres particiones principales en el disco, crea una partición extendida para cubrir la mayor extensión de espacio libre en disco contiguo que queda en el disco y, a continuación, crea una unidad lógica dentro de la partición extendida.

Un disco no puede contribuir a más de un plex del mismo volumen; sin embargo, un único disco puede contribuir a varios volúmenes. Un volumen simple tiene solo una estructura VDS_INPUT_DISK , mientras que, los volúmenes distribuidos, seccionados, reflejados y RAID-5 tienen una estructura para cada disco que contribuye.

El tamaño del disco especificado en la estructura VDS_INPUT_DISK puede ser el disco completo o una parte del disco. Cuando dos discos forman un volumen reflejado, VDS usa el disco más pequeño para calcular el tamaño del reflejo. (La directiva de proveedor determina el desplazamiento real, la longitud y el número de extensiones de disco asignadas en un disco de entrada determinado). Use el método IVdsPack::QueryVolumes para determinar el tamaño exacto del volumen creado.

Para crear un volumen lógico con un parámetro de alineación opcional, use el método IVdsPack2::CreateVolume2 o use la clave del Registro HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\vds\Alignment para especificar el valor de alineación en bytes.

Windows 7, Windows Server 2008 R2, Windows Vista y Windows Server 2008: En un disco básico, el método CreateVolume omite la clave del Registro HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\vds\Alignment . Se trata de un problema conocido y se está solucionando. Como solución alternativa, use el método IVdsAdvancedDisk::CreatePartition o IVdsCreatePartitionEx::CreatePartitionEx para crear particiones en el disco básico para que se alineen correctamente.

Las particiones dinámicas y los volúmenes se alinean mediante los valores de la siguiente clave del Registro:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\vds\Alignment

La alineación predeterminada es de 1 MB si el disco es de 4 GB o más, o 64 KB si el disco es inferior a 4 GB.

Los implementadores deben devolver un puntero a la interfaz IVdsAsync de este método, independientemente de si la llamada 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

IVdsPack

IVdsPack2::CreateVolume2

IVdsPack::QueryVolumes

VDS_ASYNC_OUTPUT

VDS_INPUT_DISK

VDS_VOLUME_TYPE