Fonction ReBaseImage (imagehlp.h)

Modifie l’adresse de chargement de l’image spécifiée, ce qui réduit le temps de chargement requis pour une DLL.

Vous pouvez également utiliser l’outil Rebaser. Cet outil est disponible dans Visual Studio et le Kit de développement logiciel (SDK) Windows.

Notez que cette fonction est implémentée en tant qu’appel à la fonction ReBaseImage64 .

Syntaxe

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

Paramètres

[in] CurrentImageName

Nom du fichier à rebaser. Vous devez spécifier le chemin d’accès complet au fichier, sauf si le module se trouve dans le répertoire de travail actuel du processus appelant.

[in] SymbolPath

Chemin utilisé pour rechercher le fichier de symboles correspondant. Spécifiez ce chemin pour les images exécutables qui ont des informations symboliques, car lorsque les adresses d’image changent, le fichier de base de données de symboles (PDB) correspondant peut également avoir besoin d’être modifié. Notez que même si le chemin du symbole n’est pas valide, la fonction réussit si elle est en mesure de rebaser votre image.

[in] fReBase

Si cette valeur est TRUE, l’image est redéployée. Sinon, l’image n’est pas rebasée.

[in] fRebaseSysfileOk

Si cette valeur est TRUE, l’image système est rebasée. Sinon, l’image système n’est pas rebasée.

[in] fGoingDown

Si cette valeur est TRUE, l’image peut être rebasée sous la base donnée ; sinon, il ne peut pas.

[in] CheckImageSize

Taille maximale à laquelle l’image peut atteindre, en octets, ou zéro s’il n’y a aucune limite.

[out] OldImageSize

Pointeur vers une variable qui reçoit la taille d’image d’origine, en octets.

[out] OldImageBase

Pointeur vers une variable qui reçoit la base d’image d’origine.

[out] NewImageSize

Pointeur vers une variable qui reçoit la nouvelle taille d’image après l’opération de rebasement, en octets.

[in, out] NewImageBase

Adresse de base à utiliser pour rebasiser l’image. Si l’adresse n’est pas disponible et que le paramètre fGoingDown a la valeur TRUE, la fonction recherche une nouvelle adresse de base et définit ce paramètre sur la nouvelle adresse de base. Si fGoingDown a la valeur FALSE, la fonction recherche une nouvelle adresse de base, mais ne définit pas ce paramètre sur la nouvelle adresse de base.

[in] TimeStamp

Nouvel horodatage de l’en-tête du fichier image. La valeur doit être représentée dans le nombre de secondes écoulées depuis minuit (00:00:00), le 1er janvier 1970, heure universelle coordonnée, selon l’horloge système.

Si ce paramètre est 0, l’horodatage de l’en-tête du fichier actuel est incrémenté de 1 seconde.

Valeur retournée

Si la fonction réussit, la valeur de retour est TRUE.

Si la fonction échoue, la valeur de retour est FALSE. Pour récupérer des informations d’erreur étendues, appelez GetLastError.

Notes

La fonction ReBaseImage modifie l’adresse de charge souhaitée pour l’image spécifiée. Cette opération implique la lecture de l’image entière et la mise à jour de tous les correctifs, des informations de débogage et de la somme de contrôle. Vous pouvez rebaser une image pour réduire le temps de chargement requis pour ses DLL. Si une application peut s’appuyer sur le chargement d’une DLL à l’adresse de charge souhaitée, le chargeur système n’a pas besoin de déplacer l’image. L’image est simplement chargée dans l’espace d’adressage virtuel de l’application et la fonction DllMain est appelée, le cas échéant.

Toutes les fonctions ImageHlp, telles que celle-ci, sont à thread unique. Par conséquent, les appels de plusieurs threads à cette fonction entraîneront probablement un comportement inattendu ou une altération de la mémoire. Pour éviter cela, vous devez synchroniser tous les appels simultanés de plusieurs threads vers cette fonction.

Vous ne pouvez pas rebasier les DLL qui sont liées à /DYNAMICBASE ou qui résident dans des répertoires protégés, tels que le dossier System32.

En guise d’alternative à l’utilisation de cette fonction, consultez l’option de l’éditeur de liens /BASE .

Configuration requise

   
Client minimal pris en charge Windows XP [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2003 [applications de bureau uniquement]
Plateforme cible Windows
En-tête imagehlp.h
Bibliothèque Imagehlp.lib
DLL Imagehlp.dll

Voir aussi

DllMain

Fonctions ImageHlp