VSS 操作の中止
中止 イベントは、次のいずれかの場合にバックアップ操作中に生成できます。
- リクエスターは、IVssBackupComponents::AbortBackup を呼び出すことによって Abort イベントを明示的に生成します。
- ライターの Freeze イベント ハンドラーと Thaw イベント ハンドラー (CVssWriter::OnFreeze および CVssWriter::OnThaw) は false を返すか、 CVssWriter::Initialize で指定された時間枠で完了できません。
- PrepareForSnapshot イベントの後のシャドウ コピーの作成中に、プロバイダーまたは VSS に障害が発生しました。
復元操作では中止はサポートされていません。
要求者の処理と中止イベントの作成
IVSSBackupComponents インターフェイスのインスタンスは 1 つのバックアップにのみ使用できるため、バックアップの処理中にエラーが発生した場合は、通常、現在のインスタンスを解放してやり直すのが最善です。
リクエスターは、( IVssBackupComponents::AbortBackup を使用して) バックアップ操作を中止していることを明示的に通知する必要があります。これは、ライターを含むバックアップの実際の準備、またはシャドウ コピーの作成が行われた後だけです。
実質的には、リクエスターが IVssBackupComponents::P repareForBackup を呼び出して PrepareForBackup イベントを生成した後にバックアップ操作を停止する必要がある場合は常に、IVssBackupComponents::AbortBackup を呼び出し、現在の IVSSBackupComponents インスタンスを解放する前にその戻りを待つ必要があることを意味します。
たとえば、ライターがバックアップ操作を拒否した場合、リクエスターは IVssBackupComponents::AbortBackup を使用して、バックアップ操作が完了しないことを他のすべてのライターに通知する必要があります。
PrepareForBackup を呼び出す前、または PrepareForBackup の呼び出しが失敗した場合、要求元は Abort イベントを生成しなくても IVSSBackupComponents インターフェイスの現在のインスタンスを解放できます。
たとえば、 現在の IVSSBackupComponents インスタンスを使用して 、IVssBackupComponents::GatherWriterMetadata を呼び出して Identify イベントを生成するだけで情報を取得している場合、情報が返されると 、IVSSBackupComponents のインスタンスを解放するだけで済みます。
要求者は、IVssBackupComponents::D oSnapshotSet を呼び出すと、多数のイベント (PrepareForSnapshot、Freeze、Thaw、PostSnapshot) を生成します。 Freeze イベントと Thaw イベントの処理中に、ライターが失敗し、Abort イベントを単独で生成できます。 PrepareForSnapshot イベントと PostSnapshot イベントの処理に失敗しても、Abort イベントは生成されません。
IVssBackupComponents::D oSnapshotSet がエラーを示したときに Abort イベントが生成されたかどうかを要求者が認識できるわけではありません。 そのため、 IVssBackupComponents::D oSnapshotSet の状態は、問題が引き続き IVssBackupComponents::AbortBackup を呼び出す必要があることを示しているため、バックアップ操作を終了する必要があるリクエスター。
要求者が IVssBackupComponents::AbortBackup を呼び出した場合、IVSSBackupComponents のインスタンスを解放する前に IVssBackupComponents::BackupComplete を呼び出す必要はありません。
中止イベントのライター処理と作成
前に説明したように、ライターは要求元から Abort イベントを受け取ることができます。または、プロバイダーがそれ自体をトリガーすることもできます。 また、ライターが特定の状況下で複数の Abort イベントを受信することもできます。 ライター開発者は、これを念頭に置いて 、CVssWriter::OnAbort の実装をコーディングする必要があります。
Abort イベントを処理する場合、ライターは、管理されているプロセスを通常の実行状態に復元し、エラー処理とログ記録を実行する必要があります。
これは、 CsvsWriter::OnAbort の実装で、Thaw イベント ハンドラー (CVssWriter::OnThaw) と PostSnapshot イベント ハンドラー (CVssWriter::OnPostSnapshot) と同じタスクの多くを実行する必要がある場合があり、これらのハンドラーは CVssWriter::OnAbort 内から呼び出すことができます。