次の方法で共有


IVdsVolumeShrink::Shrink メソッド (vds.h)

[Windows 8とWindows Server 2012以降、仮想ディスク サービス COM インターフェイスは Windows Storage Management API に置き換えられます。

ボリュームとすべてのプレックスを縮小し、解放されたエクステントを返します。

構文

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

パラメーター

[in] ullDesiredNumberOfReclaimableBytes

ボリュームのサイズを縮小する最大バイト数。 このパラメーターの値は、 ullMinNumberOfReclaimableBytes パラメーターの値以上である必要があります。 指定されたバイト数がファイル システム クラスター サイズの倍数でない場合、 Shrink メソッドは、この値を次のファイル システム クラスター サイズの倍数に切り上げします。

[in] ullMinNumberOfReclaimableBytes

ボリュームのサイズを縮小する最小バイト数。 ボリューム サイズをこのバイト数以上縮小できない場合、 Shrink メソッドは失敗します。 指定されたバイト数がファイル システム クラスター サイズの倍数でない場合、 Shrink メソッドは、この値を次のファイル システム クラスター サイズの倍数に切り上げします。 Shrink メソッドを成功させるために再利用可能な最小バイト数が必要ないことを示すには、0 を指定します。

[out] ppAsync

IVdsAsync インターフェイス ポインターのアドレス。 VDS は、リターン時にインターフェイスを初期化します。 呼び出し元はインターフェイスを解放する必要があります。 このインターフェイスを使用して、操作の状態を取り消す、待機する、またはクエリを実行します。 IVdsAsync::Wait が呼び出され、成功した HRESULT 値が返された場合、VDS_ASYNC_OUTPUT構造体で返されるインターフェイスは、各インターフェイス ポインターで IUnknown::Release メソッドを呼び出して解放する必要があります。 ただし、Wait がエラー HRESULT 値を返す場合、または WaitpHrResult パラメーターがエラー HRESULT 値を受け取る場合、VDS_ASYNC_OUTPUT構造体のインターフェイス ポインターは NULL であり、解放する必要はありません。 成功または失敗の HRESULT 値をテストするには、Winerror.h で定義 されている SUCCEEDED マクロと FAILED マクロを使用します。

戻り値

このメソッドは、E_INVALIDARGやE_OUTOFMEMORYなどの標準の HRESULT 値と、 VDS 固有の戻り値を返すことができます。 また、HRESULT_FROM_WIN32 マクロを使用して、変換されたシステム エラー コードを返すこともできます。 エラーは、VDS 自体または使用されている基になる VDS プロバイダー から発生する可能性があります。 可能な戻り値は次のとおりです。

リターン コード/値 説明
S_OK
メソッドは正常に完了しました。
VDS_E_CANNOT_SHRINK
0x8004251EL
ボリュームは、ファイル システムでサポートされていないため、圧縮できません。
VDS_E_DISK_REMOVEABLE
0x8004255AL
この操作は、リムーバブル メディアではサポートされていません。
VDS_E_INTERNAL_ERROR
0x80042448L
内部エラーが発生しました。 詳細については、イベント ログを確認してください。
VDS_S_NO_NOTIFICATION
0x00042517L
ボリューム到着通知が受信されませんでした。 IVdsService::Refresh を呼び出す必要がある場合があります。
VDS_E_SHRINK_SIZE_TOO_BIG
0x80042574L
指定した圧縮サイズが大きすぎて、ボリュームが最小ボリューム サイズよりも小さくなります。
VDS_E_SHRINK_SIZE_LESS_THAN_MIN
0x80042573L
指定した圧縮サイズが、許容される最小圧縮サイズより小さくなります。
VDS_E_VOLUME_NOT_HEALTHY
0x8004243EL
ボリュームが正常ではありません。
VDS_E_VOLUME_SIMPLE_SPANNED
0x80042589L
操作は、単純ボリュームまたはスパン ボリュームでのみサポートされます。

注釈

Shrink メソッドは、ボリュームの末尾に空き領域を統合するために、ファイルをボリュームの先頭にできるだけ近づけるようにファイルを移動します。 (ボリュームの末尾に統合できる空き領域の量によって、ボリュームを圧縮できる量が決まります)。その後、ファイル システム ボリュームが切り捨てられ、サイズが小さくなり、パーティションまたは動的ボリュームが切り捨てられます。

ほとんどの場合、移動できないファイル (つまり、移動できないファイル) が存在します。 たとえば、ファイル システムとストレージ ドライバーのメタデータ ファイルは移動できない可能性があります。 このため、ボリュームを圧縮できる量は、通常、ボリューム上の空き領域の合計量よりも小さくなります。

両方のコンピューターが同じように構成されている場合でも、移動できないファイルの数と配置は、1 台のコンピューターごとに異なる場合があります。

ファイルを一時的に移動できない可能性があります。 このため、アプリケーションは、同じパラメーターを使用してこのメソッドを 2 回目に呼び出すと、追加の領域を回復できる場合があります。

ullDesiredNumberOfReclaimableBytes パラメーターと ullMinNumberOfReclaimableBytes パラメーターの両方が 0 の場合、Shrink メソッドはボリュームをできるだけ縮小します。

圧縮操作と 拡張 操作は、NTFS ボリュームと RAW ボリュームでのみサポートされます。

ファイル システムとボリュームを圧縮するには、このメソッドを使用します。 VDS がボリュームの圧縮に失敗した場合、ファイル システムを圧縮せずに操作を停止します。

各ボリュームで一度に実行できる圧縮または最適化操作は 1 つだけです。Windows Server 2008 と Windows Vista: 1 台のコンピューターで一度に実行できる圧縮または最適化操作は 1 つだけです。

実装者は、呼び出しで非同期操作が開始されない場合でも、このメソッドの IVdsAsync インターフェイスへのポインターを返す必要があります。

このメソッドは、 IVdsVolume::Shrink メソッドと同じです。

IVdsVolumeShrink::QueryMaxReclaimableBytes メソッドを使用して、圧縮操作によって再利用されるバイト数を見積もることができます。 ただし、 QueryMaxReclaimableBytes は、実際に使用できるバイト数を超えるバイト数を返すことができます。

要件

要件
サポートされている最小のクライアント Windows Vista [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows Server 2008 [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー vds.h
Library Uuid.lib

こちらもご覧ください

IVdsVolume::Extend

IVdsVolumeShrink