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

IVssProviderCreateSnapshotSet

COM
IID5f894e5b-1e39-4778-8e23-9abad9f0e08c継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

IVssProviderCreateSnapshotSet インターフェイスは、シャドウコピーの作成時に使用されるメソッドを提供します。

メソッド 7

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

vtbl 3 HRESULT EndPrepareSnapshots(GUID SnapshotSetId)

最後の IVssHardwareSnapshotProvider::BeginPrepareSnapshot 呼び出しの後に、シャドウコピーセット全体に対して 1 回だけ呼び出されます。

SnapshotSetIdGUIDinシャドウコピーセットの VSS_ID です。

戻り値

リターンコード/値 説明
S_OK
0x00000000L
操作は正常に完了しました。
E_OUTOFMEMORY
0x8007000EL
メモリまたはその他のシステムリソースが不足しています。
E_INVALIDARG
0x80070057L
パラメーター値のいずれかが有効ではありません。
VSS_E_INSUFFICIENT_STORAGE
0x8004231FL
シャドウコピーを作成するためのディスク領域が不足しています。ディスク領域の不足は、 VSS_E_PROVIDER_VETOVSS_E_OBJECT_NOT_FOUND というエラーの 戻り値を発生させることもあります。
VSS_E_OBJECT_NOT_FOUND
0x80042308L
SnapshotSetId パラメーターが、見つからないオブジェクトを参照しています。
VSS_E_PROVIDER_VETO
0x80042306L
予期しないプロバイダーエラーが発生しました。これが返された場合、プロバイダーはアプリケーションイベントログのエントリに エラーの内容を記録し、問題の解決方法をユーザーに示す必要があります。

これら以外の値が返された場合、VSS はイベントログにイベントを書き込み、そのエラーを VSS_E_UNEXPECTED_PROVIDER_ERROR に変換します。

vtbl 4 HRESULT PreCommitSnapshots(GUID SnapshotSetId)

準備済みの LUN を短時間でコミットできる状態にプロバイダーを整えます。

SnapshotSetIdGUIDinシャドウコピーセットを識別する VSS_ID です。

戻り値

リターンコード/値 説明
S_OK
0x00000000L
操作は正常に完了しました。
E_OUTOFMEMORY
0x8007000EL
メモリまたはその他のシステムリソースが不足しています。
E_INVALIDARG
0x80070057L
パラメーター値のいずれかが有効ではありません。
VSS_E_OBJECT_NOT_FOUND
0x80042308L
SnapshotSetId パラメーターが、見つからないオブジェクトを参照しています。
VSS_E_PROVIDER_VETO
0x80042306L
予期しないプロバイダーエラーが発生しました。これが返された場合、プロバイダーはアプリケーションイベントログのエントリに エラーの内容を記録し、問題の解決方法をユーザーに示す必要があります。

これら以外の値が返された場合、VSS はイベントログにイベントを書き込み、そのエラーを VSS_E_UNEXPECTED_PROVIDER_ERROR に変換します。

vtbl 5 HRESULT CommitSnapshots(GUID SnapshotSetId)

このプロバイダー内のすべての LUN を短時間でコミットします。

SnapshotSetIdGUIDinシャドウコピーセットを識別する VSS_ID です。

戻り値

リターンコード/値 説明
S_OK
0x00000000L
操作は正常に完了しました。
E_OUTOFMEMORY
0x8007000EL
メモリまたはその他のシステムリソースが不足しています。
E_INVALIDARG
0x80070057L
パラメーター値のいずれかが有効ではありません。
VSS_E_OBJECT_NOT_FOUND
0x80042308L
SnapshotSetId パラメーターが、見つからないオブジェクトを参照しています。
VSS_E_PROVIDER_VETO
0x80042306L
予期しないプロバイダーエラーが発生しました。プロバイダーは、このエラーの詳細をアプリケーションイベントログに 記録する必要があります。

これら以外の値が返された場合、VSS はイベントログにイベントを書き込み、そのエラーを VSS_E_UNEXPECTED_PROVIDER_ERROR に変換します。

解説(Remarks)

このメソッドは、シャドウコピーを取得すべき時点として定められたタイミングで呼び出されます。プロバイダーは、このシャドウコピーセット内で 準備済みの各 LUN について、その時点の LUN の内容を永続化するために必要な処理を行います。 このメソッドの実行中は、アプリケーションと I/O サブシステムの大部分が静止した状態になります。そのため、プロバイダーは このメソッドに費やす時間を最小限に抑える必要があります。原則として、このメソッドは 1 秒未満で完了すべきです。 このメソッドは Flush and Hold のウィンドウ内で呼び出され、VSS カーネルサポートは 10 秒以内に解放が 行われない場合に Flush and Hold をキャンセルします。その結果、VSS はシャドウコピーの作成処理を失敗させます。 各プロバイダーがこの呼び出しの完了に 1 ~ 2 秒を超える時間を要する場合、シャドウコピーの作成全体が失敗する可能性が 高くなります。

I/O システムが静止しているため、プロバイダーは I/O を一切発行しないよう注意する必要があります。I/O を発行すると システムがデッドロックするおそれがあります。たとえば、このメソッド内やこのメソッドから呼び出される処理でのデバッグ出力や トレース用の I/O が該当します。なお、メモリマップトファイルおよびページング I/O は、この時点では凍結されません。

I/O システムが静止しているのは、このメソッドの実行中だけである点に注意してください。最後のプロバイダーの CommitSnapshots メソッドが戻った直後に、VSS サービスはソース LUN に対する保留中の書き込みをすべて解放します。プロバイダーがソース LUN とシャドウコピー LUN の同期処理を行う場合、その同期はプロバイダーの CommitSnapshots メソッドが戻る前に完了していなければならず、非同期に実行することはできません。

vtbl 6 HRESULT PostCommitSnapshots(GUID SnapshotSetId, INT lSnapshotsCount)

シャドウコピーセットに関与するすべてのプロバイダーが CommitSnapshots に成功した後に呼び出されます。

SnapshotSetIdGUIDinシャドウコピーセットを識別する VSS_ID です。
lSnapshotsCountINTinシャドウコピーセット内のシャドウコピーの数です。

戻り値

リターンコード/値 説明
S_OK
0x00000000L
操作は正常に完了しました。
E_OUTOFMEMORY
0x8007000EL
メモリまたはその他のシステムリソースが不足しています。
E_INVALIDARG
0x80070057L
パラメーター値のいずれかが有効ではありません。
VSS_E_OBJECT_NOT_FOUND
0x80042308L
SnapshotSetId パラメーターが、見つからないオブジェクトを参照しています。
VSS_E_PROVIDER_VETO
0x80042306L
予期しないプロバイダーエラーが発生しました。これが返された場合、プロバイダーはアプリケーションイベントログのエントリに エラーの内容を記録し、問題の解決方法をユーザーに示す必要があります。

これら以外の値が返された場合、VSS はイベントログにイベントを書き込み、そのエラーを VSS_E_UNEXPECTED_PROVIDER_ERROR に変換します。

vtbl 7 HRESULT PreFinalCommitSnapshots(GUID SnapshotSetId)

プロバイダーが自動回復 (auto-recover) シャドウコピーをサポートできるようにします。

SnapshotSetIdGUIDinシャドウコピーセットを識別する VSS_ID です。

戻り値

リターンコード/値 説明
S_OK
0x00000000L
操作は正常に完了しました。
E_OUTOFMEMORY
0x8007000EL
メモリまたはその他のシステムリソースが不足しています。
E_INVALIDARG
0x80070057L
パラメーター値のいずれかが有効ではありません。
VSS_E_PROVIDER_VETO
0x80042306L
予期しないプロバイダーエラーが発生しました。これが返された場合、プロバイダーはアプリケーションイベントログのエントリに エラーの内容を記録し、問題の解決方法をユーザーに示す必要があります。

これら以外の値が返された場合、VSS はイベントログにイベントを書き込み、そのエラーを VSS_E_UNEXPECTED_PROVIDER_ERROR に変換します。

解説(Remarks)

このメソッドは、Windows Server 2003 Service Pack 1 (SP1) で 自動回復 (auto-recover) 機能が導入された際に、 バイナリ互換性を確保する目的で追加されました。

注意 Windows Server 2003 では、ハードウェアプロバイダーは次の例のようにこのメソッドを実装することが 推奨されます。
HRESULT PreFinalCommitSnapshots(
VSS_ID     /* SnapshotSetId */
)
{
    return S_OK;
}
vtbl 8 HRESULT PostFinalCommitSnapshots(GUID SnapshotSetId)

自動回復 (auto-recover) シャドウコピーをサポートします。

SnapshotSetIdGUIDinシャドウコピーセットを識別する VSS_ID です。

戻り値

リターンコード/値 説明
S_OK
0x00000000L
操作は正常に完了しました。
E_OUTOFMEMORY
0x8007000EL
メモリまたはその他のシステムリソースが不足しています。
E_INVALIDARG
0x80070057L
パラメーター値のいずれかが有効ではありません。
VSS_E_PROVIDER_VETO
0x80042306L
予期しないプロバイダーエラーが発生しました。これが返された場合、プロバイダーはアプリケーションイベントログのエントリに エラーの内容を記録し、問題の解決方法をユーザーに示す必要があります。

これら以外の値が返された場合、VSS はイベントログにイベントを書き込み、そのエラーを VSS_E_UNEXPECTED_PROVIDER_ERROR に変換します。

解説(Remarks)

このメソッドは、Windows Server 2003 Service Pack 1 (SP1) で 自動回復 (auto-recover) 機能が導入された際に、 バイナリ互換性を確保する目的で Windows Server 2003 に追加されました。

注意 Windows Server 2003 では、ハードウェアプロバイダーは次の例のようにこのメソッドを実装することが 推奨されます。
HRESULT PostFinalCommitSnapshots(
    VSS_ID     /* SnapshotSetId */
)
{
    return S_OK;
}
vtbl 9 HRESULT AbortSnapshots(GUID SnapshotSetId)

このプロバイダー内で準備済みのシャドウコピーを中止します。

SnapshotSetIdGUIDinシャドウコピーセットを識別する VSS_ID です。

戻り値

このメソッドは、次のいずれかの値を返すことがあります。

リターンコード/値 説明
S_OK
0x00000000L
操作は正常に完了しました。
E_OUTOFMEMORY
0x8007000EL
メモリまたはその他のシステムリソースが不足しています。
E_INVALIDARG
0x80070057L
パラメーター値のいずれかが有効ではありません。
VSS_E_OBJECT_NOT_FOUND
0x80042308L
SnapshotSetId パラメーターが、見つからないオブジェクトを参照しています。
VSS_E_PROVIDER_VETO
0x80042306L
予期しないプロバイダーエラーが発生しました。プロバイダーは、問題の解決方法をユーザーに示すメッセージを アプリケーションイベントログに記録する必要があります。

解説(Remarks)

VSS が AbortSnapshots を呼び出すのは、 リクエスターが IVssBackupComponents::DoSnapshotSet を 呼び出した後だけです。これは、その時点より前にシャドウコピーが失敗または中止された場合でも同様です。つまり、プロバイダーが AbortSnapshots の呼び出しを受け取るのは、 EndPrepareSnapshots が 呼び出された後に限られます。それより前にシャドウコピーが中止または失敗した場合、プロバイダーには新しいシャドウコピーが 開始されるまで何の通知も行われません。このため、プロバイダーは順序どおりでない IVssHardwareSnapshotProvider::BeginPrepareSnapshot の 呼び出しを、任意のタイミングで処理できるようにしておく必要があります。この順序どおりでない呼び出しは、新しいシャドウコピー作成シーケンスの 開始を表し、新しいシャドウコピーセット ID を伴います。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IVssProviderCreateSnapshotSet "{5F894E5B-1E39-4778-8E23-9ABAD9F0E08C}"
#usecom global IVssProviderCreateSnapshotSet IID_IVssProviderCreateSnapshotSet "{}"
#comfunc global IVssProviderCreateSnapshotSet_EndPrepareSnapshots       3 int
#comfunc global IVssProviderCreateSnapshotSet_PreCommitSnapshots        4 int
#comfunc global IVssProviderCreateSnapshotSet_CommitSnapshots           5 int
#comfunc global IVssProviderCreateSnapshotSet_PostCommitSnapshots       6 int,int
#comfunc global IVssProviderCreateSnapshotSet_PreFinalCommitSnapshots   7 int
#comfunc global IVssProviderCreateSnapshotSet_PostFinalCommitSnapshots  8 int
#comfunc global IVssProviderCreateSnapshotSet_AbortSnapshots            9 int
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。