ReBaseImage-Funktion (imagehlp.h)
Ändert die Ladeadresse für das angegebene Image, wodurch die erforderliche Ladezeit für eine DLL reduziert wird.
Alternativ können Sie das Rebase-Tool verwenden. Dieses Tool ist in Visual Studio und im Windows SDK verfügbar.
Beachten Sie, dass diese Funktion als Aufruf der ReBaseImage64-Funktion implementiert wird.
Syntax
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
);
Parameter
[in] CurrentImageName
Der Name der datei, die neu zu erstellen ist. Sie müssen den vollständigen Pfad zur Datei angeben, es sei denn, das Modul befindet sich im aktuellen Arbeitsverzeichnis des aufrufenden Prozesses.
[in] SymbolPath
Der Pfad, der zum Suchen der entsprechenden Symboldatei verwendet wird. Geben Sie diesen Pfad für ausführbare Images an, die symbolische Informationen enthalten, da bei einer Änderung der Bildadressen möglicherweise auch die entsprechende Symboldatenbankdatei (PDB) geändert werden muss. Beachten Sie, dass die Funktion erfolgreich ist, auch wenn der Symbolpfad ungültig ist, wenn sie ihr Image neu erstellen kann.
[in] fReBase
Wenn dieser Wert TRUE ist, wird das Image neu basiert. Andernfalls wird das Image nicht neu erstellt.
[in] fRebaseSysfileOk
Wenn dieser Wert TRUE ist, wird das Systemimage neu basiert. Andernfalls wird das Systemimage nicht neu erstellt.
[in] fGoingDown
Wenn dieser Wert TRUE ist, kann das Bild unter der angegebenen Basis neu erstellt werden. andernfalls nicht.
[in] CheckImageSize
Die maximale Größe, auf die das Image wachsen kann, in Bytes oder 0, wenn kein Limit vorhanden ist.
[out] OldImageSize
Ein Zeiger auf eine Variable, die die ursprüngliche Bildgröße in Bytes empfängt.
[out] OldImageBase
Ein Zeiger auf eine Variable, die die ursprüngliche Bildbasis empfängt.
[out] NewImageSize
Ein Zeiger auf eine Variable, die die neue Bildgröße nach dem Rebasevorgang in Bytes empfängt.
[in, out] NewImageBase
Die Basisadresse, die zum erneutenBasieren des Images verwendet werden soll. Wenn die Adresse nicht verfügbar ist und der fGoingDown-Parameter auf TRUE festgelegt ist, findet die Funktion eine neue Basisadresse und legt diesen Parameter auf die neue Basisadresse fest. Wenn fGoingDownFALSE ist, findet die Funktion eine neue Basisadresse, legt diesen Parameter jedoch nicht auf die neue Basisadresse fest.
[in] TimeStamp
Der neue Zeitstempel für den Header der Bilddatei. Der Wert muss in der Anzahl der Sekunden dargestellt werden, die seit Mitternacht (00:00:00: 00:00), 1. Januar 1970, Universelle koordinierte Zeit, gemäß der Systemuhr verstrichen sind.
Wenn dieser Parameter 0 ist, wird der aktuelle Zeitstempel der Dateiheader um 1 Sekunde erhöht.
Rückgabewert
Wenn die Funktion erfolgreich ist, ist der Rückgabewert TRUE.
Wenn die Funktion fehlschlägt, ist der Rückgabewert FALSE. Rufen Sie GetLastError auf, um erweiterte Fehlerinformationen abzurufen.
Hinweise
Die ReBaseImage-Funktion ändert die gewünschte Ladeadresse für das angegebene Bild. Dieser Vorgang umfasst das Lesen des gesamten Images und das Aktualisieren aller Korrekturen, Debuginformationen und Prüfsummen. Sie können ein Image neu erstellen, um die erforderliche Ladezeit für die DLLs zu reduzieren. Wenn sich eine Anwendung darauf verlassen kann, dass eine DLL an der gewünschten Ladeadresse geladen wird, muss das Systemladeprogramm das Image nicht verschieben. Das Image wird einfach in den virtuellen Adressraum der Anwendung geladen, und die DllMain-Funktion wird aufgerufen, wenn eine vorhanden ist.
Alle ImageHlp-Funktionen, z. B. diese, sind single threaded. Daher führen an diese Funktion gerichtete Aufrufe mehrerer Threads wahrscheinlich zu unerwartetem Verhalten oder einer Beschädigung des Speichers. Um dies zu vermeiden, müssen Sie alle an diese Funktion gerichteten gleichzeitigen Aufrufe mehrerer Threads synchronisieren.
Sie können keine DLLs neu erstellen, die mit /DYNAMICBASE verknüpft sind oder sich in geschützten Verzeichnissen wie dem Ordner System32 befinden.
Alternativ zur Verwendung dieser Funktion finden Sie die Option /BASE-Linker .
Anforderungen
Unterstützte Mindestversion (Client) | Windows XP [nur Desktop-Apps] |
Unterstützte Mindestversion (Server) | Windows Server 2003 [nur Desktop-Apps] |
Zielplattform | Windows |
Kopfzeile | imagehlp.h |
Bibliothek | Imagehlp.lib |
DLL | Imagehlp.dll |