Share via


Funzione ReBaseImage (imagehlp.h)

Modifica l'indirizzo di caricamento per l'immagine specificata, riducendo il tempo di caricamento necessario per una DLL.

In alternativa, è possibile usare lo strumento Rebase. Questo strumento è disponibile in Visual Studio e Windows SDK.

Si noti che questa funzione viene implementata come chiamata alla funzione ReBaseImage64 .

Sintassi

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
);

Parametri

[in] CurrentImageName

Nome del file da ribasare. È necessario specificare il percorso completo del file, a meno che il modulo non si trovi nella directory di lavoro corrente del processo chiamante.

[in] SymbolPath

Percorso utilizzato per trovare il file di simboli corrispondente. Specificare questo percorso per le immagini eseguibili con informazioni simboliche perché quando cambiano gli indirizzi dell'immagine, potrebbe essere necessario modificare anche il file di database dei simboli (PDB) corrispondente. Si noti che anche se il percorso del simbolo non è valido, la funzione avrà esito positivo se è in grado di ribasere l'immagine.

[in] fReBase

Se questo valore è TRUE, l'immagine viene ribasata. In caso contrario, l'immagine non è ribasata.

[in] fRebaseSysfileOk

Se questo valore è TRUE, l'immagine di sistema viene ribasata. In caso contrario, l'immagine di sistema non è ribasata.

[in] fGoingDown

Se questo valore è TRUE, l'immagine può essere ribasata sotto la base specificata; in caso contrario, non può.

[in] CheckImageSize

Dimensioni massime che l'immagine può raggiungere, in byte, o zero se non è previsto alcun limite.

[out] OldImageSize

Puntatore a una variabile che riceve le dimensioni originali dell'immagine, in byte.

[out] OldImageBase

Puntatore a una variabile che riceve la base dell'immagine originale.

[out] NewImageSize

Puntatore a una variabile che riceve le nuove dimensioni dell'immagine dopo l'operazione di ribase, in byte.

[in, out] NewImageBase

Indirizzo di base da usare per ribasare l'immagine. Se l'indirizzo non è disponibile e il parametro fGoingDown è impostato su TRUE, la funzione trova un nuovo indirizzo di base e imposta questo parametro sul nuovo indirizzo di base. Se fGoingDown è FALSE, la funzione trova un nuovo indirizzo di base ma non imposta questo parametro sul nuovo indirizzo di base.

[in] TimeStamp

Nuovo indicatore di data e ora per l'intestazione del file di immagine. Il valore deve essere rappresentato nel numero di secondi trascorsi dalla mezzanotte (00:00:00), 1 gennaio 1970, ora coordinata universale, in base all'orologio di sistema.

Se questo parametro è 0, il timestamp dell'ora dell'intestazione del file corrente viene incrementato di 1 secondo.

Valore restituito

Se la funzione ha esito positivo, il valore restituito è TRUE.

Se la funzione ha esito negativo, il valore restituito è FALSE. Per recuperare informazioni sull'errore estese, chiamare GetLastError.

Commenti

La funzione ReBaseImage modifica l'indirizzo di caricamento desiderato per l'immagine specificata. Questa operazione comporta la lettura dell'intera immagine e l'aggiornamento di tutte le correzioni, le informazioni di debug e il checksum. È possibile ribasere un'immagine per ridurre il tempo di caricamento necessario per le DLL. Se un'applicazione può basarsi su una DLL caricata nell'indirizzo di carico desiderato, il caricatore di sistema non deve rilocare l'immagine. L'immagine viene semplicemente caricata nello spazio indirizzi virtuale dell'applicazione e la funzione DllMain viene chiamata, se presente.

Tutte le funzioni ImageHlp, ad esempio questa, sono a thread singolo. Di conseguenza, le chiamate da più thread a questa funzione genereranno un comportamento imprevisto o un danneggiamento della memoria. Per evitare questo problema, è necessario sincronizzare tutte le chiamate simultanee da più thread a questa funzione.

Non è possibile ribasere le DLL che si collegano a /DYNAMICBASE o che si trovano in directory protette, ad esempio la cartella System32.

In alternativa all'uso di questa funzione, vedere l'opzione /BASE linker.

Requisiti

   
Client minimo supportato Windows XP [solo app desktop]
Server minimo supportato Windows Server 2003 [solo app desktop]
Piattaforma di destinazione Windows
Intestazione imagehlp.h
Libreria Imagehlp.lib
DLL Imagehlp.dll

Vedi anche

DllMain

Funzioni ImageHlp