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.
[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 |
---|---|
|
Il volume è stato creato correttamente. |
|
Non è stata ricevuta alcuna notifica di arrivo del volume. Potrebbe essere necessario chiamare IVdsService::Refresh. |
|
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. |
|
I dischi specificati non appartengono allo stesso pacchetto. |
|
Il servizio LDM ha avuto esito negativo su un metodo. |
|
Le dimensioni dell'estensione passate sono troppo piccole. |
|
Il numero di dischi specificati non è valido per questa operazione. |
|
Il numero di membri per il volume deve essere maggiore di zero. |
|
Gli indici membro devono aumentare monotonicamente e iniziare con zero. |
|
Il disco passato è un dispositivo CD-ROM o DVD. |
|
Questa operazione non è consentita in questo pacchetto di dischi. |
|
Il numero di plex per il volume deve essere maggiore di zero. |
|
Gli indici plex devono aumentare monotonicamente e iniziare con zero. |
|
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. |
|
Il disco specificato è mancante. |
|
Non è presente alcun supporto in un'unità rimovibile passata attraverso la matrice di dischi. |
|
Non è disponibile spazio sufficiente su uno dei dischi. |
|
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. |
|
Non viene trovato almeno uno dei dischi passati. |
|
Un singolo disco non può contribuire a più membri o più plessi dello stesso volume. |
|
Il pacchetto di destinazione non è accessibile. |
|
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. |
|
La cache del provider dinamico è danneggiata. |
|
Non sono consentiti più di 32 dischi per volume. |
|
Le dimensioni del volume sono troppo piccole. |
Commenti
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 |