Trabalhando com destinos direcionados
O mecanismo de destino direcionado permite que os gravadores remapeem arquivos no momento da restauração. Isso permite que os gravadores façam o seguinte:
- Especifique novos locais de destino (análogos a IVssBackupComponents::AddNewTarget de um solicitante).
- Recupere o espaço em disco restaurando apenas as partes necessárias de um arquivo para o disco, especialmente quando um arquivo foi submetido a backup usando o mecanismo de arquivo parcial .
- Altere o formato do arquivo para atender às necessidades atuais.
Qualquer arquivo a ser usado com uma operação de destino direcionada deve ter um destino de restauração de VSS_RT_DIRECTED.
Depois de ter sido estabelecido que um solicitante pode dar suporte a uma operação de destino direcionada, um gravador (ao manipular o evento PreRestore ) usa o IVssComponent::AddDirectedTarget para a instância de IVssComponent correspondente ao componente que gerencia o arquivo (ou o componente que define o conjunto de componentes que contém o arquivo) para definir como o arquivo deve ser remapeado na restauração.
Ao usar IVssComponent::AddDirectedTarget, os gravadores especificam o nome e o caminho do arquivo usados para fazer backup do arquivo, o nome do arquivo e o caminho de seu destino de restauração (esses valores podem ser os mesmos que o nome e o caminho do arquivo original) e os intervalos de arquivos de origem e destino.
Assim como acontece com as operações de arquivo parciais, as listas de intervalos são pares de deslocamentos no arquivo a serem copiados em backup (em bytes) e o comprimento da seção a ser restaurada (em bytes), o deslocamento e o comprimento separados por dois-pontos e cada par separado por uma vírgula: Offset1**:Length1,** Offset2**:**Length2. Cada valor é um inteiro de 64 bits no formato hexadecimal ou decimal.
Se um gravador precisar usar o mecanismo de destino direcionado para que o solicitante restaure um arquivo em um novo local, ele teria chamado IVssComponent::AddDirectedTarget com o nome e o caminho do arquivo original e o novo nome e caminho do arquivo e especificaria intervalos de destino de origem com um deslocamento zero e um comprimento igual ao de todo o tamanho do arquivo.
Por exemplo, se um gravador precisar ter um arquivo de 200 mil, C:\WriterData\Index.dat, restaurado como C:\WriterData\OldIndex.dat, a cadeia de caracteres de intervalo de origem e destino será "0:204880".
Para remapear um arquivo de backup grande parcialmente, o solicitante usaria o intervalo de origem usado para fazer backup do arquivo e um intervalo de destino que reduzirá o tamanho do arquivo. As informações do intervalo de origem podem ser obtidas usando IVssComponent::GetPartialFile para a instância de IVssComponent correspondente ao componente que gerencia o arquivo (ou o componente que define o conjunto de componentes que contém o arquivo).
Se o arquivo de backup parcial era inicialmente um arquivo grande cujo cabeçalho, bytes 64-512, contém uma contagem de registros e outras informações atualizadas com frequência e cujos dados mais recentes devem ser encontrados nos últimos 65536 bytes do arquivo — bytes 0x1239E8577A para 0x1239E7577A, um gravador poderia especificar uma lista de intervalo de origem como a cadeia de caracteres "64:448,0x1239E8577A:65536".
Se o gravador quisesse remapear o arquivo restaurado para conter apenas o cabeçalho e os dados mais recentes, a lista de intervalos poderia ser a cadeia de caracteres "0:488.488:65536".
Antes de realmente executar uma operação de restauração, um solicitante deve marcar para ver se algum arquivo requer suporte de destino direcionado.
Para fazer isso, o solicitante primeiro itera sobre os gravadores com componentes armazenados em seu Documento de Componentes de Backup usando IVssBackupComponents::GetWriterComponentsCount e IVssBackupComponents::GetWriterComponents.
A interface IVssBackupComponents::GetWriterComponents é usada para retornar instâncias da interface IVssWriterComponentsExt , que fornece métodos IVssWriterComponentsExt::GetComponent e IVssWriterComponentsExt::GetComponentCount que permitem ao solicitante obter instâncias IVssComponent .
Isso permite que um solicitante obtenha candidatos de destino direcionados usando IVssComponent::GetDirectedTargetCount e IVssComponent::GetDirectedTarget para a instância de IVssComponent correspondente ao componente que gerencia o arquivo (ou o componente que define o conjunto de componentes que contém o arquivo).