Прерывание операций VSS

События прерывания могут создаваться во время операции резервного копирования в любом из следующих случаев:

Прерывания не поддерживаются для операций восстановления.

Обработка и создание событий прерывания запроса

Экземпляр интерфейса IVSSBackupComponents можно использовать только для одной резервной копии, поэтому если при обработке резервной копии возникает ошибка, лучше всего освободить текущий экземпляр и начать заново.

Инициатор запроса должен явно сообщить, что операция резервного копирования прерывается (с помощью IVssBackupComponents::AbortBackup) только после фактической подготовки к резервной копии с использованием средств записи или создания теневой копии.

Фактически это означает, что каждый раз, когда инициатору запроса требуется остановить операцию резервного копирования после создания события PrepareForBackup путем вызова IVssBackupComponents::P repareForBackup, он должен вызывать IVssBackupComponents::AbortBackup и ожидать возврата перед освобождением текущего экземпляра IVSSBackupComponents .

Например, если модуль записи наложил вето на операцию резервного копирования, инициатор запроса должен использовать IVssBackupComponents::AbortBackup , чтобы уведомить всех остальных модулей записи о том, что операция резервного копирования не будет завершена.

Перед вызовом PrepareForBackup или в случае сбоя вызова PrepareForBackup инициатор запроса может освободить текущий экземпляр интерфейса IVSSBackupComponents без необходимости создавать событие Abort.

Например, если текущий экземпляр IVSSBackupComponents используется только для получения сведений путем вызова IVssBackupComponents::GatherWriterMetadata и создания события Identify , после возврата сведений экземпляр IVSSBackupComponents можно просто освободить.

Инициатор запроса создает ряд событий (PrepareForSnapshot, Freeze, Thaw и PostSnapshot) при вызове IVssBackupComponents::D oSnapshotSet. При обработке событий заморозки и оттепели модуль записи может завершиться ошибкой и может создать событие Abort самостоятельно. Сбой обработки событий PrepareForSnapshot и PostSnapshot не приводит к возникновению события Abort.

Инициатор запроса не всегда может узнать, было ли создано событие Abort, когда IVssBackupComponents::D oSnapshotSet указывает на сбой. Таким образом, инициатор запроса, который должен завершить операцию резервного копирования, так как состояние IVssBackupComponents::D oSnapshotSet указывает на проблему, по-прежнему должен вызывать IVssBackupComponents::AbortBackup.

Если инициатор запроса вызвал IVssBackupComponents::AbortBackup, нет необходимости вызывать IVssBackupComponents::BackupComplete перед выпуском экземпляра IVSSBackupComponents.

Обработка и создание событий прерывания записи

Как отмечалось ранее, модуль записи может получить событие Abort от инициатора запроса, или поставщик может активировать событие самостоятельно. Кроме того, при определенных обстоятельствах модуль записи может получить несколько событий прерывания. Разработчики средств записи должны запрограммировать любую реализацию CVssWriter::OnAbort с учетом этого.

При обработке события Abort модуль записи должен попытаться восстановить любой процесс, которым он управлял, до нормального состояния выполнения, а также выполнить обработку ошибок и ведение журнала.

Это может означать, что реализация CVssWriter::OnAbort может выполнять много, если не все, те же задачи, что и обработчик событий Thaw (CVssWriter::OnThaw) и обработчик событий PostSnapshot (CVssWriter::OnPostSnapshot), и эти обработчики можно вызывать из CVssWriter::OnAbort.