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.
[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 |
---|---|
|
El volumen se creó correctamente. |
|
No se recibió ninguna notificación de llegada de volumen. Es posible que tenga que llamar a IVdsService::Refresh. |
|
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. |
|
Los discos especificados no pertenecen al mismo paquete. |
|
Error en el servicio LDM de un método. |
|
El tamaño de extensión pasado es demasiado pequeño. |
|
El número de discos especificados no es válido para esta operación. |
|
El número de miembros del volumen debe ser mayor que cero. |
|
Los índices de miembro deben aumentarse de forma monotónica y comenzar con cero. |
|
El disco pasado es un dispositivo CD-ROM o DVD. |
|
Esta operación no se permite en este paquete de discos. |
|
El recuento de plex para el volumen debe ser mayor que cero. |
|
Los índices de plex deben aumentar de forma monotónica y comenzar con cero. |
|
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. |
|
Falta el disco especificado. |
|
No hay ningún medio en una unidad extraíble que se pasa a través de la matriz de discos. |
|
No hay suficiente espacio en uno de los discos. |
|
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. |
|
No se encuentra al menos uno de los discos pasados. |
|
Un único disco no puede contribuir a varios miembros o a varios plexos del mismo volumen. |
|
No se puede acceder al paquete de destino. |
|
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. |
|
La caché del proveedor dinámico está dañada. |
|
No se permiten más de 32 discos por volumen. |
|
El tamaño del volumen es demasiado pequeño. |
Comentarios
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 |