Condividi tramite


Metodo IVdsVolumeShrink::Shrink (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.]

Riduce il volume e tutti iplexes e restituisce gli extent rilasciati.

Sintassi

HRESULT Shrink(
  [in]  ULONGLONG ullDesiredNumberOfReclaimableBytes,
  [in]  ULONGLONG ullMinNumberOfReclaimableBytes,
  [out] IVdsAsync **ppAsync
);

Parametri

[in] ullDesiredNumberOfReclaimableBytes

Numero massimo di byte per cui ridurre le dimensioni del volume. Il valore di questo parametro deve essere maggiore o uguale al valore del parametro ullMinNumberOfReclaimableBytes . Se il numero di byte specificato non è un multiplo delle dimensioni del cluster del file system, il metodo Shrink arrotonda questo valore fino al multiplo successivo delle dimensioni del cluster del file system.

[in] ullMinNumberOfReclaimableBytes

Numero minimo di byte per cui ridurre le dimensioni del volume. Se le dimensioni del volume non possono essere ridotte di almeno questo numero di byte, il metodo Shrink ha esito negativo. Se il numero di byte specificato non è un multiplo delle dimensioni del cluster del file system, il metodo Shrink arrotonda questo valore fino al multiplo successivo delle dimensioni del cluster del file system. Specificare zero per indicare che non è necessario alcun numero minimo di byte recuperabili affinché il metodo Shrink abbia esito positivo.

[out] ppAsync

Indirizzo di un puntatore all'interfaccia IVdsAsync . VDS inizializza l'interfaccia in caso di restituzione. I chiamanti devono rilasciare l'interfaccia. Usare questa interfaccia per annullare, attendere o eseguire una query sullo stato dell'operazione. Se viene chiamato IVdsAsync::Wait e viene restituito un valore HRESULT riuscito, le interfacce restituite nella struttura VDS_ASYNC_OUTPUT devono essere rilasciate chiamando il metodo IUnknown::Release su ogni puntatore di interfaccia. Tuttavia, se Wait restituisce un valore HRESULT non riuscito o se il parametro pHrResult di Wait riceve un valore HRESULT non riuscito, i puntatori di interfaccia nella struttura VDS_ASYNC_OUTPUT sono NULL e non devono essere rilasciati. È possibile verificare l'esito positivo o negativo dei valori HRESULT usando le macro SUCCEEDED 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 provenire dal VDS stesso o dal provider VDS sottostante in uso. I valori restituiti possibili includono quanto segue.

Codice/valore restituito Descrizione
S_OK
Metodo completato correttamente.
VDS_E_CANNOT_SHRINK
0x8004251EL
Impossibile compattare il volume perché il file system non lo supporta.
VDS_E_DISK_REMOVEABLE
0x8004255AL
L'operazione non è supportata nei supporti rimovibili.
VDS_E_INTERNAL_ERROR
0x80042448L
An internal error occurred. Per altri dettagli, vedere il registro eventi.
VDS_S_NO_NOTIFICATION
0x00042517L
Non è stata ricevuta alcuna notifica di arrivo del volume. Potrebbe essere necessario chiamare IVdsService::Refresh.
VDS_E_SHRINK_SIZE_TOO_BIG
0x80042574L
La dimensione di compattazione specificata è troppo grande e fa sì che il volume sia inferiore alla dimensione minima del volume.
VDS_E_SHRINK_SIZE_LESS_THAN_MIN
0x80042573L
Le dimensioni di compattazione specificate sono inferiori alle dimensioni minime di compattazione consentite.
VDS_E_VOLUME_NOT_HEALTHY
0x8004243EL
Il volume non è integro.
VDS_E_VOLUME_SIMPLE_SPANNED
0x80042589L
L'operazione è supportata solo su volumi semplici o con estensione.

Commenti

Il metodo Shrink sposta i file in modo che siano il più vicino possibile all'inizio del volume, per consolidare lo spazio disponibile alla fine del volume. La quantità di spazio disponibile che può essere consolidata alla fine del volume determina la quantità di volume che può essere ridotta. Quindi tronca il volume del file system, ne riduce le dimensioni e quindi tronca la partizione o il volume dinamico.

In quasi tutti i casi, ci saranno alcuni file che sono rimovibili (ovvero file che non possono essere spostati). Ad esempio, è probabile che i file di metadati del file system e del driver di archiviazione siano rimovibili. Per questo motivo, la quantità in base alla quale è possibile compattare un volume è in genere inferiore alla quantità totale di spazio disponibile nel volume.

Il numero e la posizione dei file rimovibili possono variare da un computer all'altro, anche se entrambi i computer sono configurati in modo identico.

È possibile che un file sia temporaneamente rimovibile. Per questo motivo, un'applicazione può essere in grado di recuperare spazio aggiuntivo se chiama questo metodo una seconda volta con gli stessi parametri.

Se i parametri ullDesiredNumberOfReclaimableBytes e ullMinNumberOfReclaimableBytes sono entrambi zero, il metodo Shrink ridurrà il volume il più possibile.

Le operazioni di compattazione ed estensione sono supportate solo nei volumi NTFS e RAW.

Utilizzare questo metodo per compattare il file system e il volume. Se il volume non riesce a compattare il volume, l'operazione viene arrestata senza compattare il file system.

È possibile eseguire una sola operazione di compattazione o deframmentazione alla volta in ogni volume. Windows Server 2008 e Windows Vista: È possibile eseguire una sola operazione di compattazione o deframmentazione alla volta in un computer.

Gli implementatori devono restituire un puntatore all'interfaccia IVdsAsync per questo metodo, anche se la chiamata non avvia un'operazione asincrona.

Questo metodo è identico al metodo IVdsVolume::Shrink .

È possibile utilizzare il metodo IVdsVolumeShrink::QueryMaxReclaimableBytes per stimare il numero di byte da recuperare dall'operazione di compattazione. Tuttavia, QueryMaxReclaimableBytes può restituire più byte di quelli effettivamente disponibili.

Requisiti

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

Vedi anche

IVdsVolume::Extend

IVdsVolumeShrink