Win32 API 日本語リファレンス
ホームStorage.VirtualDiskService › IVdsVolumeShrink

IVdsVolumeShrink

COM
IIDd68168c9-82a2-4f85-b6e9-74707c49a58f継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

ボリュームの縮小をサポートするメソッドを提供します。

メソッド 2

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT QueryMaxReclaimableBytes(ULONGLONG* pullMaxNumberOfReclaimableBytes)

現在のボリュームから解放できる最大バイト数を取得します。

pullMaxNumberOfReclaimableBytesULONGLONG*out正常に完了すると、現在のボリュームから解放できる最大バイト数を受け取る変数へのポインター。この数値は常にファイルシステムのクラスターサイズの倍数となり、クラスターサイズはさらにディスクのセクターサイズの倍数となります。このパラメーターは必須であり、null にすることはできません。

戻り値

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

リターンコード/値 説明
S_OK
メソッドは正常に完了しました。
VDS_E_CANNOT_SHRINK
0x8004251EL
ファイルシステムがサポートしていないため、ボリュームを縮小できません。
VDS_E_DISK_REMOVEABLE
0x8004255AL
この操作はリムーバブルメディアではサポートされていません。
RPX_X_NULL_REF_POINTER
0x800706F4
pullMaxNumberOfReclaimableBytes パラメーターが入力時に null でした。

解説(Remarks)

このメソッドは、実際に利用可能なバイト数よりも多くの解放可能なバイト数を返すことがあります。

vtbl 4 HRESULT Shrink(ULONGLONG ullDesiredNumberOfReclaimableBytes, ULONGLONG ullMinNumberOfReclaimableBytes, IVdsAsync** ppAsync)

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

ullDesiredNumberOfReclaimableBytesULONGLONGinボリュームのサイズを縮小する最大バイト数。このパラメーターの値は、ullMinNumberOfReclaimableBytes パラメーターの値以上でなければなりません。指定されたバイト数がファイルシステムのクラスターサイズの倍数でない場合、Shrink メソッドはこの値をファイルシステムのクラスターサイズの次の倍数に切り上げます。
ullMinNumberOfReclaimableBytesULONGLONGinボリュームのサイズを縮小する最小バイト数。ボリュームサイズを少なくともこのバイト数だけ縮小できない場合、Shrink メソッドは失敗します。指定されたバイト数がファイルシステムのクラスターサイズの倍数でない場合、Shrink メソッドはこの値をファイルシステムのクラスターサイズの次の倍数に切り上げます。Shrink メソッドが成功するために必要な解放可能バイト数の最小値がないことを示すには、ゼロを指定します。
ppAsyncIVdsAsync**outIVdsAsync インターフェイスポインターのアドレス。VDS は復帰時にこのインターフェイスを初期化します。呼び出し元はこのインターフェイスを解放する必要があります。このインターフェイスを使用して、操作のキャンセル、完了待機、または状態の照会を行います。IVdsAsync::Wait が呼び出されて成功を示す HRESULT 値が返された場合、VDS_ASYNC_OUTPUT 構造体で返されたインターフェイスは、各インターフェイスポインターに対して IUnknown::Release メソッドを呼び出して解放する必要があります。ただし、Wait が失敗を示す HRESULT 値を返した場合、または WaitpHrResult パラメーターが失敗を示す HRESULT 値を受け取った場合、VDS_ASYNC_OUTPUT 構造体内のインターフェイスポインターは NULL であり、解放する必要はありません。成功または失敗の HRESULT 値は、Winerror.h で定義されている SUCCEEDED マクロおよび FAILED マクロを使用して判定できます。

戻り値

このメソッドは、E_INVALIDARGE_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
この操作はシンプルボリュームまたはスパンボリュームでのみサポートされています。

解説(Remarks)

Shrink メソッドは、ボリュームの末尾に空き領域を集約するために、ファイルをできるだけボリュームの先頭に近づけて移動します。(ボリュームの末尾に集約できる空き領域の量によって、ボリュームをどれだけ縮小できるかが決まります。) 次に、ファイルシステムボリュームを切り詰めてサイズを縮小し、その後パーティションまたはダイナミックボリュームを切り詰めます。

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

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

ファイルが一時的に移動できない状態になることもあります。このため、アプリケーションが同じパラメーターでこのメソッドを再度呼び出すと、追加の領域を回収できる場合があります。

ullDesiredNumberOfReclaimableBytes パラメーターと ullMinNumberOfReclaimableBytes パラメーターの両方がゼロの場合、Shrink メソッドはボリュームを可能な限り縮小します。

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

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

各ボリュームでは、一度に 1 つの縮小操作またはデフラグ操作のみを実行できます。Windows Server 2008 および Windows Vista: コンピューターでは、一度に 1 つの縮小操作またはデフラグ操作のみを実行できます。

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

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

IVdsVolumeShrink::QueryMaxReclaimableBytes メソッドを使用して、縮小操作によって解放されるバイト数を見積もることができます。ただし、QueryMaxReclaimableBytes は実際に利用可能なバイト数よりも多くのバイト数を返すことがあります。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

出力引数:
#define global IID_IVdsVolumeShrink "{D68168C9-82A2-4F85-B6E9-74707C49A58F}"
#usecom global IVdsVolumeShrink IID_IVdsVolumeShrink "{}"
#comfunc global IVdsVolumeShrink_QueryMaxReclaimableBytes  3 var
#comfunc global IVdsVolumeShrink_Shrink                    4 int64,int64,sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。