Compartilhar via


Função ReBaseImage (imagehlp.h)

Altera o endereço de carga da imagem especificada, o que reduz o tempo de carga necessário para uma DLL.

Como alternativa, você pode usar a ferramenta Rebase. Essa ferramenta está disponível no Visual Studio e no SDK do Windows.

Observe que essa função é implementada como uma chamada para a função ReBaseImage64 .

Sintaxe

BOOL IMAGEAPI ReBaseImage(
  [in]      PCSTR     CurrentImageName,
  [in]      PCSTR     SymbolPath,
  [in]      BOOL      fReBase,
  [in]      BOOL      fRebaseSysfileOk,
  [in]      BOOL      fGoingDown,
  [in]      ULONG     CheckImageSize,
  [out]     ULONG     *OldImageSize,
  [out]     ULONG_PTR *OldImageBase,
  [out]     ULONG     *NewImageSize,
  [in, out] ULONG_PTR *NewImageBase,
  [in]      ULONG     TimeStamp
);

Parâmetros

[in] CurrentImageName

O nome do arquivo a ser rebasado. Você deve especificar o caminho completo para o arquivo, a menos que o módulo esteja no diretório de trabalho atual do processo de chamada.

[in] SymbolPath

O caminho usado para localizar o arquivo de símbolo correspondente. Especifique esse caminho para imagens executáveis que tenham informações simbólicas porque, quando os endereços de imagem são alterados, o PDB (arquivo de banco de dados de símbolo) correspondente também pode precisar ser alterado. Observe que, mesmo que o caminho do símbolo não seja válido, a função terá êxito se for capaz de rebasear sua imagem.

[in] fReBase

Se esse valor for TRUE, a imagem será rebased. Caso contrário, a imagem não será rebasada.

[in] fRebaseSysfileOk

Se esse valor for TRUE, a imagem do sistema será rebasada. Caso contrário, a imagem do sistema não será rebasada.

[in] fGoingDown

Se esse valor for TRUE, a imagem poderá ser rebased abaixo da base fornecida; caso contrário, não pode.

[in] CheckImageSize

O tamanho máximo para o qual a imagem pode crescer, em bytes ou zero, se não houver limite.

[out] OldImageSize

Um ponteiro para uma variável que recebe o tamanho da imagem original, em bytes.

[out] OldImageBase

Um ponteiro para uma variável que recebe a base de imagem original.

[out] NewImageSize

Um ponteiro para uma variável que recebe o novo tamanho da imagem após a operação de rebase, em bytes.

[in, out] NewImageBase

O endereço base a ser usado para rebasar a imagem. Se o endereço não estiver disponível e o parâmetro fGoingDown estiver definido como TRUE, a função localizará um novo endereço base e definirá esse parâmetro como o novo endereço base. Se fGoingDown for FALSE, a função encontrará um novo endereço base, mas não definirá esse parâmetro como o novo endereço base.

[in] TimeStamp

O novo carimbo de data/hora para o cabeçalho do arquivo de imagem. O valor deve ser representado no número de segundos decorridos desde a meia-noite (00:00:00), 1º de janeiro de 1970, Hora Coordenada Universal, de acordo com o relógio do sistema.

Se esse parâmetro for 0, o carimbo de data de data do cabeçalho do arquivo atual será incrementado em 1 segundo.

Valor retornado

Se a função for bem-sucedida, o valor retornado será TRUE.

Se a função falhar, o valor retornado será FALSE. Para recuperar informações de erro estendidas, chame GetLastError.

Comentários

A função ReBaseImage altera o endereço de carga desejado para a imagem especificada. Essa operação envolve ler a imagem inteira e atualizar todas as correções, informações de depuração e soma de verificação. Você pode rebasear uma imagem para reduzir o tempo de carga necessário para suas DLLs. Se um aplicativo puder contar com uma DLL sendo carregada no endereço de carga desejado, o carregador do sistema não precisará realocar a imagem. A imagem é simplesmente carregada no espaço de endereço virtual do aplicativo e a função DllMain é chamada, se houver.

Todas as funções ImageHlp, como esta, são threaded único. Portanto, chamadas de mais de um thread para essa função provavelmente resultarão em comportamento inesperado ou corrupção de memória. Para evitar isso, você deve sincronizar todas as chamadas simultâneas de mais de um thread para essa função.

Não é possível rebasear DLLs vinculadas a /DYNAMICBASE ou que residem em diretórios protegidos, como a pasta System32.

Como alternativa ao uso dessa função, consulte a opção /BASE linker.

Requisitos

   
Cliente mínimo com suporte Windows XP [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2003 [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho imagehlp.h
Biblioteca Imagehlp.lib
DLL Imagehlp.dll

Confira também

DllMain

Funções ImageHlp