Compartilhar via


Método IVdsPack::CreateVolume (vds.h)

[Começando com Windows 8 e Windows Server 2012, a interface COM do Serviço de Disco Virtual é substituída pela API de Gerenciamento de Armazenamento do Windows.]

Cria um volume dentro do pacote. O ponteiro de interface para o novo objeto de volume pode ser recuperado chamando IVdsAsync::Wait por meio do parâmetro ppAsync . A estrutura VDS_ASYNC_OUTPUT retornada contém o ponteiro da interface do objeto de volume no membro cv.pVolumeUnk .

Sintaxe

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

Um tipo de volume enumerado por VDS_VOLUME_TYPE. Volumes em discos básicos podem ter apenas uma extensão e apenas o sinalizador VDS_VT_SIMPLE é válido.

[in] pInputDiskArray

Ponteiro para uma matriz de estruturas VDS_INPUT_DISK ; uma estrutura para cada disco. Um disco pode ser incluído na matriz apenas uma vez. Todos os discos na matriz devem ser usados ou o método falha. Os chamadores devem alocar e inicializar a matriz e liberar a memória quando a chamada retornar.

[in] lNumberOfDisks

O número total de discos que contribuem para o volume.

Nota O VDS impõe um limite de 32 discos em volumes estendidos, distribuídos e distribuídos com volumes de paridade (RAID-5).
 

[in] ulStripeSize

Se o volume for distribuído, o tamanho de cada faixa em bytes. Passe zero bytes para VDS_VT_SIMPLE, VDS_VT_SPAN e VDS_VT_MIRROR; 64 quilobytes para VDS_VT_STRIPE e VDS_VT_PARITY.

[out] ppAsync

O endereço de um ponteiro de interface IVdsAsync , que o VDS inicializa no retorno. Os chamadores devem liberar a interface . Use esse ponteiro para cancelar, aguardar ou consultar o status da operação.

Se você chamar IVdsAsync::Wait nesse método e um valor HRESULT bem-sucedido for retornado, você deverá liberar as interfaces retornadas na estrutura VDS_ASYNC_OUTPUT chamando o método IUnknown::Release em cada ponteiro de interface. No entanto, se Wait retornar um valor HRESULT de falha ou se o parâmetro pHrResult de Wait receber um valor HRESULT de falha, os ponteiros de interface na estrutura VDS_ASYNC_OUTPUT serão NULL e não precisarão ser liberados. Você pode testar valores HRESULT com êxito ou falha usando as macros SUCCEEDED e FAILED definidas em Winerror.h.

Retornar valor

Esse método pode retornar valores HRESULT padrão, como E_INVALIDARG ou E_OUTOFMEMORY e valores retornados específicos do VDS. Ele também pode retornar códigos de erro do sistema convertidos usando a macro HRESULT_FROM_WIN32 . Os erros podem ser originados do próprio VDS ou do provedor de VDS subjacente que está sendo usado. Os possíveis valores retornados incluem o seguinte.

Valor/código retornado Descrição
S_OK
O volume foi criado com êxito.
VDS_S_NO_NOTIFICATION
0x00042517L
Nenhuma notificação de chegada do volume foi recebida. Talvez seja necessário chamar IVdsService::Refresh.
VDS_S_UPDATE_BOOTFILE_FAILED
0x00042434L
O volume foi criado com êxito, mas o VDS não conseguiu atualizar as opções de inicialização no repositório BCD (Dados de Configuração de Inicialização).

Windows Server 2003: As opções de inicialização são armazenadas no arquivo boot.ini em um sistema x86 ou x64 ou NVRAM em um sistema Itanium.

VDS_E_DISK_NOT_FOUND_IN_PACK
0x8004252DL
Os discos especificados não pertencem ao mesmo pacote.
VDS_E_DMADMIN_METHOD_CALL_FAILED
0x80042420L
Falha no serviço LDM em um método .
VDS_E_EXTENT_SIZE_LESS_THAN_MIN
0x80042433L
O tamanho da extensão passada é muito pequeno.
VDS_E_INVALID_DISK_COUNT
0x80042526L
O número de discos especificados não é válido para esta operação.
VDS_E_INVALID_MEMBER_COUNT
0x80042522L
A contagem de membros para o volume deve ser maior que zero.
VDS_E_INVALID_MEMBER_ORDER
0x80042524L
Os índices de membro devem estar aumentando monotonicamente e começar com zero.
VDS_E_INVALID_OPERATION
0x80042415L
O disco passado é um dispositivo CD-ROM ou DVD.
VDS_E_INVALID_PACK
0x8004251AL
Essa operação não é permitida neste pacote de discos.
VDS_E_INVALID_PLEX_COUNT
0x80042521L
A contagem de plex para o volume deve ser maior que zero.
VDS_E_INVALID_PLEX_ORDER
0x80042523L
Os índices plex devem estar aumentando monotonicamente e começar com zero.
VDS_E_INVALID_STRIPE_SIZE
0x80042525L
O tamanho da faixa em bytes deve ser uma potência de 2 para tipos de volume distribuídos e RAID-5 e deve ser zero para todos os outros tipos de volume.
VDS_E_MISSING_DISK
0x80042454L
O disco especificado está ausente.
VDS_E_NO_MEDIA
0x80042412L
Não há mídia em uma unidade removível passada pela matriz de disco.
VDS_E_NOT_ENOUGH_SPACE
0x8004240FL
Não há espaço suficiente em um dos discos.
VDS_E_NOT_SUPPORTED
0x80042400L
Não há suporte para o tipo de volume ou já existe um volume no disco removível passado para o método . Um disco removível pode ter apenas um volume.
VDS_E_OBJECT_NOT_FOUND
0x80042405L
Pelo menos um dos discos passados não foi encontrado.
VDS_E_ONE_EXTENT_PER_DISK
0x80042531L
Um único disco não pode contribuir com vários membros ou vários plexes do mesmo volume.
VDS_E_PACK_OFFLINE
0x80042444L
O pacote de destino está inacessível.
VDS_E_PARTITION_LIMIT_REACHED
0x80042407L
O número máximo de partições (partições primárias ou partições primárias com uma partição estendida) já existe quando o chamador tenta criar uma partição primária adicional ou uma partição estendida.
VDS_E_PROVIDER_CACHE_CORRUPT
0x8004241FL
O cache do provedor dinâmico está corrompido.
VDS_E_VOLUME_DISK_COUNT_MAX_EXCEEDED
0x80042529L
Não são permitidos mais de 32 discos por volume.
VDS_E_VOLUME_TOO_SMALL
0x8004242CL
O tamanho do volume é muito pequeno.

Comentários

Nota Esse método não pode ser usado para criar um volume em um disco removível.
 
Os chamadores usam esse método para criar um novo volume simples, estendido, distribuído, espelhado ou distribuído com paridade (RAID-5) no pacote atual. Volumes simples e estendidos têm exatamente um plexe e um membro. Os volumes distribuídos e RAID-5 têm várias colunas e membros. Os volumes espelhados consistem em vários plexes.

Os discos básicos podem conter apenas volumes simples. Os discos dinâmicos podem conter volumes de todos os tipos, desde que o sistema operacional dê suporte à operação de associação; As plataformas que não são de servidor não dão suporte a operações de associação tolerantes a falhas. Todos os volumes recém-criados não têm uma letra da unidade.

Em um disco básico, esse método cria uma partição primária. Se já houver três partições primárias no disco, ele criará uma partição estendida para cobrir a maior extensão contígua de espaço livre em disco restante no disco e, em seguida, criará uma unidade lógica dentro da partição estendida.

Um disco não pode contribuir para mais de um plex do mesmo volume; no entanto, um único disco pode contribuir para vários volumes. Um volume simples tem apenas uma estrutura VDS_INPUT_DISK , enquanto os volumes estendidos, distribuídos, espelhados e RAID-5 têm uma estrutura para cada disco contribuinte.

O tamanho do disco especificado na estrutura VDS_INPUT_DISK pode ser o disco completo ou uma parte do disco. Quando dois discos formam um volume espelhado, o VDS usa o menor disco para calcular o tamanho do espelho. (A política do provedor determina o deslocamento real, o comprimento e o número de extensões de disco alocadas em um determinado disco de entrada.) Use o método IVdsPack::QueryVolumes para determinar o tamanho exato do volume criado.

Para criar um volume lógico com um parâmetro de alinhamento opcional, use o método IVdsPack2::CreateVolume2 ou use a HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\vds\Alignment chave do Registro para especificar o valor de alinhamento em bytes.

Windows 7, Windows Server 2008 R2, Windows Vista e Windows Server 2008: Em um disco básico, o método CreateVolume ignora o HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\vds\Alignment chave do Registro. Esse é um problema conhecido e está sendo resolvido. Como alternativa, use o método IVdsAdvancedDisk::CreatePartition ou IVdsCreatePartitionEx::CreatePartitionEx para criar partições no disco básico para que elas sejam alinhadas corretamente.

Partições dinâmicas e volumes são alinhados usando os valores na seguinte chave do Registro:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\vds\Alignment

O alinhamento padrão será de 1 MB se o disco for 4 GB ou maior ou 64 KB se o disco for menor que 4 GB.

Os implementadores devem retornar um ponteiro para a interface IVdsAsync para esse método, independentemente de a chamada iniciar uma operação assíncrona.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows Vista [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2003 [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho vds.h
Biblioteca Uuid.lib

Confira também

IVdsAsync

IVdsAsync::Wait

IVdsPack

IVdsPack2::CreateVolume2

IVdsPack::QueryVolumes

VDS_ASYNC_OUTPUT

VDS_INPUT_DISK

VDS_VOLUME_TYPE