IVssProviderCreateSnapshotSet
COM公式ドキュメント
IVssProviderCreateSnapshotSet インターフェイスは、シャドウコピーの作成時に使用されるメソッドを提供します。
メソッド 7
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
最後の IVssHardwareSnapshotProvider::BeginPrepareSnapshot 呼び出しの後に、シャドウコピーセット全体に対して 1 回だけ呼び出されます。
| SnapshotSetId | GUID | in | シャドウコピーセットの VSS_ID です。 |
戻り値
| リターンコード/値 | 説明 |
|---|---|
|
操作は正常に完了しました。 |
|
メモリまたはその他のシステムリソースが不足しています。 |
|
パラメーター値のいずれかが有効ではありません。 |
|
シャドウコピーを作成するためのディスク領域が不足しています。ディスク領域の不足は、 VSS_E_PROVIDER_VETO や VSS_E_OBJECT_NOT_FOUND というエラーの 戻り値を発生させることもあります。 |
|
SnapshotSetId パラメーターが、見つからないオブジェクトを参照しています。 |
|
予期しないプロバイダーエラーが発生しました。これが返された場合、プロバイダーはアプリケーションイベントログのエントリに エラーの内容を記録し、問題の解決方法をユーザーに示す必要があります。 |
これら以外の値が返された場合、VSS はイベントログにイベントを書き込み、そのエラーを VSS_E_UNEXPECTED_PROVIDER_ERROR に変換します。
準備済みの LUN を短時間でコミットできる状態にプロバイダーを整えます。
| SnapshotSetId | GUID | in | シャドウコピーセットを識別する VSS_ID です。 |
戻り値
| リターンコード/値 | 説明 |
|---|---|
|
操作は正常に完了しました。 |
|
メモリまたはその他のシステムリソースが不足しています。 |
|
パラメーター値のいずれかが有効ではありません。 |
|
SnapshotSetId パラメーターが、見つからないオブジェクトを参照しています。 |
|
予期しないプロバイダーエラーが発生しました。これが返された場合、プロバイダーはアプリケーションイベントログのエントリに エラーの内容を記録し、問題の解決方法をユーザーに示す必要があります。 |
これら以外の値が返された場合、VSS はイベントログにイベントを書き込み、そのエラーを VSS_E_UNEXPECTED_PROVIDER_ERROR に変換します。
このプロバイダー内のすべての LUN を短時間でコミットします。
| SnapshotSetId | GUID | in | シャドウコピーセットを識別する VSS_ID です。 |
戻り値
| リターンコード/値 | 説明 |
|---|---|
|
操作は正常に完了しました。 |
|
メモリまたはその他のシステムリソースが不足しています。 |
|
パラメーター値のいずれかが有効ではありません。 |
|
SnapshotSetId パラメーターが、見つからないオブジェクトを参照しています。 |
|
予期しないプロバイダーエラーが発生しました。プロバイダーは、このエラーの詳細をアプリケーションイベントログに 記録する必要があります。 |
これら以外の値が返された場合、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 メソッドが戻る前に完了していなければならず、非同期に実行することはできません。
シャドウコピーセットに関与するすべてのプロバイダーが CommitSnapshots に成功した後に呼び出されます。
| SnapshotSetId | GUID | in | シャドウコピーセットを識別する VSS_ID です。 |
| lSnapshotsCount | INT | in | シャドウコピーセット内のシャドウコピーの数です。 |
戻り値
| リターンコード/値 | 説明 |
|---|---|
|
操作は正常に完了しました。 |
|
メモリまたはその他のシステムリソースが不足しています。 |
|
パラメーター値のいずれかが有効ではありません。 |
|
SnapshotSetId パラメーターが、見つからないオブジェクトを参照しています。 |
|
予期しないプロバイダーエラーが発生しました。これが返された場合、プロバイダーはアプリケーションイベントログのエントリに エラーの内容を記録し、問題の解決方法をユーザーに示す必要があります。 |
これら以外の値が返された場合、VSS はイベントログにイベントを書き込み、そのエラーを VSS_E_UNEXPECTED_PROVIDER_ERROR に変換します。
プロバイダーが自動回復 (auto-recover) シャドウコピーをサポートできるようにします。
| SnapshotSetId | GUID | in | シャドウコピーセットを識別する VSS_ID です。 |
戻り値
| リターンコード/値 | 説明 |
|---|---|
|
操作は正常に完了しました。 |
|
メモリまたはその他のシステムリソースが不足しています。 |
|
パラメーター値のいずれかが有効ではありません。 |
|
予期しないプロバイダーエラーが発生しました。これが返された場合、プロバイダーはアプリケーションイベントログのエントリに エラーの内容を記録し、問題の解決方法をユーザーに示す必要があります。 |
これら以外の値が返された場合、VSS はイベントログにイベントを書き込み、そのエラーを VSS_E_UNEXPECTED_PROVIDER_ERROR に変換します。
解説(Remarks)
このメソッドは、Windows Server 2003 Service Pack 1 (SP1) で 自動回復 (auto-recover) 機能が導入された際に、 バイナリ互換性を確保する目的で追加されました。
HRESULT PreFinalCommitSnapshots(
VSS_ID /* SnapshotSetId */
)
{
return S_OK;
}
自動回復 (auto-recover) シャドウコピーをサポートします。
| SnapshotSetId | GUID | in | シャドウコピーセットを識別する VSS_ID です。 |
戻り値
| リターンコード/値 | 説明 |
|---|---|
|
操作は正常に完了しました。 |
|
メモリまたはその他のシステムリソースが不足しています。 |
|
パラメーター値のいずれかが有効ではありません。 |
|
予期しないプロバイダーエラーが発生しました。これが返された場合、プロバイダーはアプリケーションイベントログのエントリに エラーの内容を記録し、問題の解決方法をユーザーに示す必要があります。 |
これら以外の値が返された場合、VSS はイベントログにイベントを書き込み、そのエラーを VSS_E_UNEXPECTED_PROVIDER_ERROR に変換します。
解説(Remarks)
このメソッドは、Windows Server 2003 Service Pack 1 (SP1) で 自動回復 (auto-recover) 機能が導入された際に、 バイナリ互換性を確保する目的で Windows Server 2003 に追加されました。
HRESULT PostFinalCommitSnapshots(
VSS_ID /* SnapshotSetId */
)
{
return S_OK;
}
このプロバイダー内で準備済みのシャドウコピーを中止します。
| SnapshotSetId | GUID | in | シャドウコピーセットを識別する VSS_ID です。 |
戻り値
このメソッドは、次のいずれかの値を返すことがあります。
| リターンコード/値 | 説明 |
|---|---|
|
操作は正常に完了しました。 |
|
メモリまたはその他のシステムリソースが不足しています。 |
|
パラメーター値のいずれかが有効ではありません。 |
|
SnapshotSetId パラメーターが、見つからないオブジェクトを参照しています。 |
|
予期しないプロバイダーエラーが発生しました。プロバイダーは、問題の解決方法をユーザーに示すメッセージを アプリケーションイベントログに記録する必要があります。 |
解説(Remarks)
VSS が AbortSnapshots を呼び出すのは、 リクエスターが IVssBackupComponents::DoSnapshotSet を 呼び出した後だけです。これは、その時点より前にシャドウコピーが失敗または中止された場合でも同様です。つまり、プロバイダーが AbortSnapshots の呼び出しを受け取るのは、 EndPrepareSnapshots が 呼び出された後に限られます。それより前にシャドウコピーが中止または失敗した場合、プロバイダーには新しいシャドウコピーが 開始されるまで何の通知も行われません。このため、プロバイダーは順序どおりでない IVssHardwareSnapshotProvider::BeginPrepareSnapshot の 呼び出しを、任意のタイミングで処理できるようにしておく必要があります。この順序どおりでない呼び出しは、新しいシャドウコピー作成シーケンスの 開始を表し、新しいシャドウコピーセット ID を伴います。
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が無いため "{}"(他メソッド/アクティベーションで取得)。