Freigeben über


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

Weitere Informationen

DllMain

ImageHlp-Funktionen