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 |