BackupShutdown イベントの処理
バックアップ アプリケーション (リクエスター) が終了し、 BackupComplete イベントが生成されない可能性があります。 バックアップ アプリケーションがクラッシュしたり、(たとえばタスク マネージャーから) 終了したり、 IVssBackupComponents::BackupComplete を呼び出したりできない可能性があります。
したがって、VSS インフラストラクチャ (リクエスターではなく) は、バックアップに参加している IVssBackupComponents のインスタンスが解放されるたびに BackupShutdown イベントを生成します。これは、リクエスターによって解放されるか、システムによって解放されるかに関係なく発生します。
バックアップが正常に進行すると、ライターは BackupComplete イベントの後に BackupShutdown イベントを受け取ります。
操作が中止された場合 (リクエスターは IVssBackupComponents::AbortBackup を呼び出して Abort イベントを生成します)、または突然失敗した場合、ライターは BackupShutdown イベントのみを受信し、クリーンアップ操作を実行する他のイベントを受信しない可能性があります。 BackupShutdown イベントが適切な一連のイベントに従っているか、バックアップ操作の予期しないエラーを表すのかを判断するのはライターの責任です。
BackupShutdown イベント ハンドラー CVssWriter::OnBackupShutdown は、シャットダウン中のバックアップ操作のシャドウ コピー セットのVSS_ID (GUID) を受け取ります。 ライターは、CVssWriter::GetCurrentSnapshotSetId を使用して、シャドウ コピー セット ID をバックアップ シーケンス中 (たとえば、CVssWriter::OnFreeze、CVssWriter::OnThaw、または CVssWriter::OnPostSnapshot 内から) 格納している場合に、シャットダウンするバックアップ操作を判断できます。
ただし、ライターは、CVssWriter::OnBackupShutdown 内から CVssWriter::GetCurrentSnapshotSetId を呼び出さないでください。 また、 CVssWriter::GetCurrentSnapshotSetId は、 CVssWriter::OnPostSnapshot が返された後に呼び出すことはできません。
ライターが複数のバックアップ操作に関与する可能性があり、リクエスターの突然のシャットダウンのために BackupShutdown イベントが呼び出された場合、返されるVSS_IDは、ライターが参加していた別のバックアップ操作の場合があります。