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.
[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 |
---|---|
|
O volume foi criado com êxito. |
|
Nenhuma notificação de chegada do volume foi recebida. Talvez seja necessário chamar IVdsService::Refresh. |
|
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. |
|
Os discos especificados não pertencem ao mesmo pacote. |
|
Falha no serviço LDM em um método . |
|
O tamanho da extensão passada é muito pequeno. |
|
O número de discos especificados não é válido para esta operação. |
|
A contagem de membros para o volume deve ser maior que zero. |
|
Os índices de membro devem estar aumentando monotonicamente e começar com zero. |
|
O disco passado é um dispositivo CD-ROM ou DVD. |
|
Essa operação não é permitida neste pacote de discos. |
|
A contagem de plex para o volume deve ser maior que zero. |
|
Os índices plex devem estar aumentando monotonicamente e começar com zero. |
|
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. |
|
O disco especificado está ausente. |
|
Não há mídia em uma unidade removível passada pela matriz de disco. |
|
Não há espaço suficiente em um dos discos. |
|
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. |
|
Pelo menos um dos discos passados não foi encontrado. |
|
Um único disco não pode contribuir com vários membros ou vários plexes do mesmo volume. |
|
O pacote de destino está inacessível. |
|
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. |
|
O cache do provedor dinâmico está corrompido. |
|
Não são permitidos mais de 32 discos por volume. |
|
O tamanho do volume é muito pequeno. |
Comentários
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 |