ReBaseImage 関数 (imagehlp.h)

指定したイメージの読み込みアドレスを変更します。これにより、DLL に必要な読み込み時間が短縮されます。

または、リベース ツールを使用することもできます。 このツールは、Visual Studio と Windows SDK で使用できます。

この関数は ReBaseImage64 関数の呼び出しとして実装されることに注意してください。

構文

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

パラメーター

[in] CurrentImageName

リベースするファイルの名前。 モジュールが呼び出し元プロセスの現在の作業ディレクトリにある場合を除き、ファイルへの完全パスを指定する必要があります。

[in] SymbolPath

対応するシンボル ファイルを検索するために使用されるパス。 イメージ アドレスが変更されると、対応するシンボル データベース ファイル (PDB) も変更する必要があるため、シンボリック情報を持つ実行可能イメージにこのパスを指定します。 シンボル パスが有効でない場合でも、イメージをリベースできる場合、関数は成功します。

[in] fReBase

この値が TRUE の場合、イメージはリベースされます。 それ以外の場合、イメージはリベースされません。

[in] fRebaseSysfileOk

この値が TRUE の場合、システム イメージはリベースされます。 それ以外の場合、システム イメージはリベースされません。

[in] fGoingDown

この値が TRUE の場合は、指定されたベースの下にイメージをリベースできます。それ以外の場合はできません。

[in] CheckImageSize

制限がない場合は、イメージが拡大できる最大サイズ (バイト単位)、またはゼロ。

[out] OldImageSize

元のイメージ サイズを受け取る変数へのポインター (バイト単位)。

[out] OldImageBase

元のイメージ ベースを受け取る変数へのポインター。

[out] NewImageSize

リベース操作の後に新しいイメージ サイズを受け取る変数へのポインター (バイト単位)。

[in, out] NewImageBase

イメージのリベースに使用するベース アドレス。 アドレスが使用できなく、 fGoingDown パラメーターが TRUE に設定されている場合、関数は新しいベース アドレスを検索し、このパラメーターを新しいベース アドレスに設定します。 fGoingDownFALSE の場合、関数は新しいベース アドレスを検索しますが、このパラメーターを新しいベース アドレスに設定しません。

[in] TimeStamp

イメージ ファイル ヘッダーの新しい日時スタンプ。 値は、システム クロックに従って、1970 年 1 月 1 日午前 0 時 (00:00:00)、世界協定時刻から経過した秒数で表す必要があります。

このパラメーターが 0 の場合、現在のファイル ヘッダーの時刻の日付スタンプは 1 秒ずつインクリメントされます。

戻り値

関数が成功した場合、戻り値は TRUE になります

関数が失敗した場合、戻り値は FALSE になります。 拡張エラー情報を取得するには、 GetLastError を呼び出します。

解説

ReBaseImage 関数は、指定されたイメージの目的の読み込みアドレスを変更します。 この操作には、イメージ全体の読み取りと、すべての修正、デバッグ情報、チェックサムの更新が含まれます。 イメージをリベースして、DLL に必要な読み込み時間を短縮できます。 アプリケーションが目的の読み込みアドレスで読み込まれている DLL に依存できる場合、システム ローダーはイメージを再配置する必要はありません。 イメージは単にアプリケーションの仮想アドレス空間に読み込まれ、 DllMain 関数が存在する場合は呼び出されます。

この関数など、すべての ImageHlp 関数はシングル スレッドです。 そのため、複数のスレッドからこの関数を呼び出すと、予期しない動作やメモリ破損が発生する可能性があります。 これを回避するには、複数のスレッドからのすべての同時呼び出しをこの関数に同期する必要があります。

/DYNAMICBASE とリンクする DLL や、System32 フォルダーなどの保護されたディレクトリに存在する DLL をリベースすることはできません。

この関数を使用する代わりに、 /BASE リンカー オプションを参照してください。

要件

   
サポートされている最小のクライアント Windows XP (デスクトップ アプリのみ)
サポートされている最小のサーバー Windows Server 2003 (デスクトップ アプリのみ)
対象プラットフォーム Windows
ヘッダー imagehlp.h
Library Imagehlp.lib
[DLL] Imagehlp.dll

関連項目

DllMain

ImageHlp 関数