Condividi tramite


Metodo IVdsPack::CreateVolume (vds.h)

[A partire da Windows 8 e Windows Server 2012, l'interfaccia COM del servizio disco virtuale viene sostituita dall'API gestione archiviazione di Windows.

Crea un volume all'interno del pacchetto. Il puntatore dell'interfaccia per il nuovo oggetto volume può essere recuperato chiamando IVdsAsync::Wait tramite il parametro ppAsync . La struttura VDS_ASYNC_OUTPUT restituita contiene il puntatore dell'interfaccia dell'oggetto volume nel membro cv.pVolumeUnk .

Sintassi

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

Parametri

[in] type

Tipo di volume enumerato da VDS_VOLUME_TYPE. I volumi nei dischi di base possono avere un solo extent e solo il flag di VDS_VT_SIMPLE è valido.

[in] pInputDiskArray

Puntatore a una matrice di strutture VDS_INPUT_DISK ; una struttura per ogni disco. Un disco può essere incluso nella matrice una sola volta. Tutti i dischi nella matrice devono essere usati o il metodo ha esito negativo. I chiamanti devono allocare e inizializzare la matrice e liberare la memoria quando viene restituita la chiamata.

[in] lNumberOfDisks

Numero totale di dischi che contribuiscono al volume.

Nota Il VDS impone un limite di 32 dischi su volumi con intervalli, striping e striping con volumi RAID-5.
 

[in] ulStripeSize

Se il volume viene stripato, le dimensioni di ogni striscia in byte. Passare zero byte per VDS_VT_SIMPLE, VDS_VT_SPAN e VDS_VT_MIRROR; 64 kilobyte per VDS_VT_STRIPE e VDS_VT_PARITY.

[out] ppAsync

Indirizzo di un puntatore dell'interfaccia IVdsAsync , che il VDS inizializza sul ritorno. I chiamanti devono rilasciare l'interfaccia. Usare questo puntatore per annullare, attendere o eseguire query sullo stato dell'operazione.

Se si chiama IVdsAsync::Wait su questo metodo e viene restituito un valore HRESULT riuscito, è necessario rilasciare le interfacce restituite nella struttura VDS_ASYNC_OUTPUT chiamando il metodo IUnknown::Release su ogni puntatore dell'interfaccia. Tuttavia, se Wait restituisce un valore HRESULT non riuscito o se il parametro pHrResultdiWait riceve un valore HRESULT non riuscito, i puntatori di interfaccia nella struttura VDS_ASYNC_OUTPUT sono NULL e non devono essere rilasciati. È possibile testare i valori HRESULT di esito positivo o negativo usando le macro SUCCESSED e FAILED definite in Winerror.h.

Valore restituito

Questo metodo può restituire valori HRESULT standard, ad esempio E_INVALIDARG o E_OUTOFMEMORY e valori restituiti specifici di VDS. Può anche restituire codici di errore di sistema convertiti usando la macro HRESULT_FROM_WIN32 . Gli errori possono derivare da VDS stesso o dal provider VDS sottostante usato. I valori restituiti possibili includono quanto segue.

Codice/valore restituito Descrizione
S_OK
Il volume è stato creato correttamente.
VDS_S_NO_NOTIFICATION
0x00042517L
Non è stata ricevuta alcuna notifica di arrivo del volume. Potrebbe essere necessario chiamare IVdsService::Refresh.
VDS_S_UPDATE_BOOTFILE_FAILED
0x00042434L
Il volume viene creato correttamente, ma VDS non è riuscito ad aggiornare le opzioni di avvio nell'archivio dati di configurazione di avvio (BCD).

Windows Server 2003: Le opzioni di avvio vengono archiviate nel file boot.ini in un sistema x86 o x64 o NVRAM in un sistema Itanium.

VDS_E_DISK_NOT_FOUND_IN_PACK
0x8004252DL
I dischi specificati non appartengono allo stesso pacchetto.
VDS_E_DMADMIN_METHOD_CALL_FAILED
0x80042420L
Il servizio LDM ha avuto esito negativo su un metodo.
VDS_E_EXTENT_SIZE_LESS_THAN_MIN
0x80042433L
Le dimensioni dell'estensione passate sono troppo piccole.
VDS_E_INVALID_DISK_COUNT
0x80042526L
Il numero di dischi specificati non è valido per questa operazione.
VDS_E_INVALID_MEMBER_COUNT
0x80042522L
Il numero di membri per il volume deve essere maggiore di zero.
VDS_E_INVALID_MEMBER_ORDER
0x80042524L
Gli indici membro devono aumentare monotonicamente e iniziare con zero.
VDS_E_INVALID_OPERATION
0x80042415L
Il disco passato è un dispositivo CD-ROM o DVD.
VDS_E_INVALID_PACK
0x8004251AL
Questa operazione non è consentita in questo pacchetto di dischi.
VDS_E_INVALID_PLEX_COUNT
0x80042521L
Il numero di plex per il volume deve essere maggiore di zero.
VDS_E_INVALID_PLEX_ORDER
0x80042523L
Gli indici plex devono aumentare monotonicamente e iniziare con zero.
VDS_E_INVALID_STRIPE_SIZE
0x80042525L
Le dimensioni di striping in byte devono essere una potenza di 2 per i tipi di volume con striping e RAID-5 e devono essere zero per tutti gli altri tipi di volume.
VDS_E_MISSING_DISK
0x80042454L
Il disco specificato è mancante.
VDS_E_NO_MEDIA
0x80042412L
Non è presente alcun supporto in un'unità rimovibile passata attraverso la matrice di dischi.
VDS_E_NOT_ENOUGH_SPACE
0x8004240FL
Non è disponibile spazio sufficiente su uno dei dischi.
VDS_E_NOT_SUPPORTED
0x80042400L
Il tipo di volume non è supportato o un volume esiste già nel disco rimovibile passato al metodo. Un disco rimovibile può avere un solo volume.
VDS_E_OBJECT_NOT_FOUND
0x80042405L
Non viene trovato almeno uno dei dischi passati.
VDS_E_ONE_EXTENT_PER_DISK
0x80042531L
Un singolo disco non può contribuire a più membri o più plessi dello stesso volume.
VDS_E_PACK_OFFLINE
0x8004244L
Il pacchetto di destinazione non è accessibile.
VDS_E_PARTITION_LIMIT_REACHED
0x80042407L
Il numero massimo di partizioni (partizioni primarie o partizioni primarie con una partizione estesa) esiste già quando il chiamante tenta di creare una partizione primaria aggiuntiva o una partizione estesa.
VDS_E_PROVIDER_CACHE_CORRUPT
0x8004241FL
La cache del provider dinamico è danneggiata.
VDS_E_VOLUME_DISK_COUNT_MAX_EXCEEDED
0x80042529L
Non sono consentiti più di 32 dischi per volume.
VDS_E_VOLUME_TOO_SMALL
0x8004242CL
Le dimensioni del volume sono troppo piccole.

Commenti

Nota Questo metodo non può essere utilizzato per creare un volume su un disco rimovibile.
 
I chiamanti usano questo metodo per creare un nuovo volume semplice, esteso, con striping, con mirroring o con striping con parità (RAID-5) nel pacchetto corrente. I volumi semplici e con estensione hanno esattamente un plex e un membro. I volumi con striping e RAID-5 hanno più colonne e membri. I volumi con mirroring sono costituiti da più plessi.

I dischi di base possono contenere solo volumi semplici. I dischi dinamici possono contenere volumi di tutti i tipi purché il sistema operativo supporti l'operazione di associazione; le piattaforme non server non supportano operazioni di associazione a tolleranza di errore. Tutti i volumi appena creati non hanno una lettera di unità.

In un disco di base, questo metodo crea una partizione primaria. Se sul disco sono già presenti tre partizioni primarie, crea una partizione estesa per coprire l'extent di spazio libero contiguo più grande lasciato sul disco e quindi crea un'unità logica all'interno della partizione estesa.

Un disco non può contribuire a più di un plex dello stesso volume; Tuttavia, un singolo disco può contribuire a più volumi. Un volume semplice ha una sola struttura VDS_INPUT_DISK , mentre, per ogni disco che contribuisce, è disponibile un solo volume esteso, con striping, con mirroring e RAID-5.

Le dimensioni del disco specificato nella struttura VDS_INPUT_DISK possono essere il disco completo o una parte del disco. Quando due dischi formano un volume con mirroring, VDS usa il disco più piccolo per calcolare le dimensioni del mirror. I criteri del provider determinano l'offset, la lunghezza e il numero effettivi di extent del disco allocati in un determinato disco di input. Utilizzare il metodo IVdsPack::QueryVolumes per determinare le dimensioni esatte del volume creato.

Per creare un volume logico con un parametro di allineamento facoltativo, usare il metodo IVdsPack2::CreateVolume2 oppure usare la chiave del Registro di sistema HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\vds\Alignment per specificare il valore di allineamento in byte.

Windows 7, Windows Server 2008 R2, Windows Vista e Windows Server 2008: In un disco di base, il metodo CreateVolume ignora la chiave del Registro di sistema HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\vds\Alignment . Si tratta di un problema noto che viene risolto. Come soluzione alternativa, usare il metodo IVdsAdvancedDisk::CreatePartition o IVdsCreatePartitionEx::CreatePartitionEx per creare partizioni sul disco di base in modo che siano allineate correttamente.

Le partizioni dinamiche e i volumi vengono allineati usando i valori nella seguente chiave del Registro di sistema:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\vds\Alignment

L'allineamento predefinito è 1 MB se il disco è di 4 GB o superiore o 64 KB se il disco è inferiore a 4 GB.

Gli implementatori devono restituire un puntatore all'interfaccia IVdsAsync per questo metodo, indipendentemente dal fatto che la chiamata avvii un'operazione asincrona.

Requisiti

Requisito Valore
Client minimo supportato Windows Vista [solo app desktop]
Server minimo supportato Windows Server 2003 [solo app desktop]
Piattaforma di destinazione Windows
Intestazione vds.h
Libreria Uuid.lib

Vedi anche

IVdsAsync

IVdsAsync::Wait

IVdsPack

IVdsPack2::CreateVolume2

IVdsPack::QueryVolumes

VDS_ASYNC_OUTPUT

VDS_INPUT_DISK

VDS_VOLUME_TYPE