Работа с целевыми объектами

Механизм направленного целевого объекта позволяет записи переназначить файлы во время восстановления. Это позволяет записи выполнять следующие действия:

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

Любой файл, используемый с целевой операцией, должен иметь целевой объект восстановления VSS_RT_DIRECTED.

После того как будет установлено, что инициатор запроса может поддерживать целевую операцию, модуль записи (при обработке события PreRestore ) использует IVssComponent::AddDirectedTarget для экземпляра IVssComponent , соответствующего компоненту, который управляет файлом (или компоненту, который определяет набор компонентов, содержащий файл), чтобы определить, как файл будет переопределен при восстановлении.

При использовании IVssComponent::AddDirectedTarget записи указывают имя файла и путь, используемые для резервного копирования файла, имя файла и путь к его назначению восстановления (эти значения могут совпадать с исходным именем и путем), а также исходный и целевой диапазоны файлов.

Как и в случае с частичными операциями с файлами, списки диапазонов представляют собой пары смещений в файле для резервного копирования (в байтах) и длину восстанавливаемого раздела (в байтах), смещение и длину, разделенные двоеточием, а каждая пара разделена запятой: Offset1**:Length1,**Offset2**:**Length2. Каждое значение является 64-разрядным целым числом в шестнадцатеричном или десятичном формате.

Если модуль записи должен использовать механизм целевого назначения, чтобы запрашивающий запрос восстанавливал файл в новом расположении, он вызвал бы IVssComponent::AddDirectedTarget с исходным именем файла и путем, а также новым именем и путем, а также указать исходные целевые диапазоны со смещением ноль и длиной, равной длине всего файла.

Например, если модуль записи должен иметь файл 200K, C:\WriterData\Index.dat, восстановленный как C:\WriterData\OldIndex.dat, строка исходного и целевого диапазонов будет "0:204880".

Чтобы повторно сопоставить большой файл с частичной резервной копией, инициатор запроса будет использовать исходный диапазон, используемый для резервного копирования файла, и диапазон назначения, который уменьшит размер файла. Сведения об исходном диапазоне можно получить с помощью IVssComponent::GetPartialFile для экземпляра IVssComponent , соответствующего компоненту, который управляет файлом (или компоненту, определяющему набор компонентов, содержащий файл).

Если файл с частичной резервной копией изначально был большим файлом, заголовок которого: байты 64–512, содержащие число записей и другие часто обновляемые сведения. Последние данные которых должны находиться в последних 65536 байтах файла, 0x1239E8577A 0x1239E7577A. Модуль записи может указать список исходных диапазонов в виде строки "64:448,0x1239E8577A:65536".

Если модуль записи хотел переназначить восстановленный файл, чтобы он содержал только заголовок и самые последние данные, список диапазонов может быть строкой "0:488,488:65536".

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

Для этого инициатор запроса сначала выполняет итерацию по записи с хранимыми компонентами в документе компонентов резервной копии с помощью IVssBackupComponents::GetWriterComponentsCount и IVssBackupComponents::GetWriterComponents.

Интерфейс IVssBackupComponents::GetWriterComponents затем используется для возврата экземпляров интерфейса IVssWriterComponentsExt , который предоставляет IVssWriterComponentsExt::GetComponents и IVssWriterComponentsExt::GetComponentCount , которые позволяют запрашивающей стороны получать экземпляры IVssComponent .

Это позволяет инициатору запроса получать целевые кандидаты с помощью IVssComponent::GetDirectedTargetCount и IVssComponent::GetDirectedTarget для экземпляра IVssComponent , соответствующего компоненту, который управляет файлом (или компоненту, определяющему набор компонентов, содержащий файл).