ReBaseImage64 関数 (imagehlp.h)
指定したイメージの読み込みアドレスを変更します。これにより、DLL の必要な読み込み時間が短縮されます。
または、リベース ツールを使用することもできます。 このツールは、Visual Studio と Windows SDK で使用できます。
構文
BOOL IMAGEAPI ReBaseImage64(
[in] PCSTR CurrentImageName,
[in] PCSTR SymbolPath,
[in] BOOL fReBase,
[in] BOOL fRebaseSysfileOk,
[in] BOOL fGoingDown,
[in] ULONG CheckImageSize,
[out] ULONG *OldImageSize,
[out] ULONG64 *OldImageBase,
[out] ULONG *NewImageSize,
[in, out] ULONG64 *NewImageBase,
[in] ULONG TimeStamp
);
パラメーター
[in] CurrentImageName
リベースするファイルの名前。 モジュールが呼び出し元プロセスの現在の作業ディレクトリ内にある場合を除き、ファイルへの完全パスを指定する必要があります。
[in] SymbolPath
対応するシンボル ファイルの検索に使用されるパス。 イメージ アドレスが変更されると、対応するシンボル データベース ファイル (PDB) も変更する必要があるため、シンボリック情報を持つ実行可能イメージにこのパスを指定します。 シンボル パスが有効でない場合でも、イメージをリベースできる場合、関数は成功します。
[in] fReBase
この値が TRUE の場合、イメージはリベースされます。 それ以外の場合、イメージはリベースされません。
[in] fRebaseSysfileOk
この値が TRUE の場合、システム イメージはリベースされます。 それ以外の場合、システム イメージはリベースされません。
[in] fGoingDown
この値が TRUE の場合、イメージは指定されたベースの下にリベースできます。それ以外の場合はできません。
[in] CheckImageSize
イメージが拡張できる最大サイズ (バイト単位)、または制限がない場合は 0。
[out] OldImageSize
元のイメージ サイズを受け取る変数へのポインター (バイト単位)。
[out] OldImageBase
元のイメージ ベースを受け取る変数へのポインター。
[out] NewImageSize
リベース操作の後に新しいイメージ サイズを受け取る変数へのポインター (バイト単位)。
[in, out] NewImageBase
イメージのリベースに使用するベース アドレス。 アドレスが使用できなく、 fGoingDown パラメーターが TRUE に設定されている場合、関数は新しいベース アドレスを検索し、このパラメーターを新しいベース アドレスに設定します。 fGoingDown が FALSE の場合、関数は新しいベース アドレスを検索しますが、このパラメーターを新しいベース アドレスに設定しません。
[in] TimeStamp
イメージ ファイル ヘッダーの新しい日時スタンプ。 この値は、システム クロックに従って、1970 年 1 月 1 日の午前 0 時 (00:00:00) から経過した秒数で表す必要があります。
このパラメーターが 0 の場合、現在のファイル ヘッダーの日時スタンプは 1 秒ずつインクリメントされます。
戻り値
関数が成功した場合、戻り値は TRUE になります。
関数が失敗した場合、戻り値は FALSE になります。 拡張エラー情報を取得するには、 GetLastError を呼び出します。
解説
ReBaseImage64 関数は、指定されたイメージの目的の読み込みアドレスを変更します。 この操作には、イメージ全体の読み取りと、すべての修正、デバッグ情報、チェックサムの更新が含まれます。 イメージをリベースして、DLL に必要な読み込み時間を短縮できます。 アプリケーションが目的の読み込みアドレスで読み込まれている DLL に依存できる場合、システム ローダーはイメージを再配置する必要はありません。 イメージは単にアプリケーションの仮想アドレス空間に読み込まれ、 DllMain 関数が存在する場合は呼び出されます。
ImageHlp 関数 (この関数など) はすべてシングル スレッドです。 そのため、複数のスレッドからこの関数を呼び出すと、予期しない動作やメモリ破損が発生する可能性があります。 これを回避するには、複数のスレッドからのすべての同時呼び出しをこの関数に同期する必要があります。
/DYNAMICBASE とリンクする DLL や、System32 フォルダーなどの保護されたディレクトリに存在する DLL をリベースすることはできません。
この関数を使用する代わりに、 /BASE リンカー オプションを参照してください。
要件
サポートされている最小のクライアント | Windows XP (デスクトップ アプリのみ) |
サポートされている最小のサーバー | Windows Server 2003 (デスクトップ アプリのみ) |
対象プラットフォーム | Windows |
ヘッダー | imagehlp.h |
Library | Imagehlp.lib |
[DLL] | Imagehlp.dll |