Win32 API 日本語リファレンス
ホーム › System.Diagnostics.Debug › PIMAGEHLP_STATUS_ROUTINE

PIMAGEHLP_STATUS_ROUTINE

コールバック

シグネチャ

BOOL PIMAGEHLP_STATUS_ROUTINE(
    IMAGEHLP_STATUS_REASON Reason,
    LPSTR ImageName,
    LPSTR DllName,
    UINT_PTR Va,
    UINT_PTR Parameter
);

パラメーター

フィールド型説明
ReasonIMAGEHLP_STATUS_REASON

バインド操作の現在の状態です。このパラメーターには、次のいずれかの値を指定できます。

値 意味
BindOutOfMemory
0
メモリが不足しています。Parameter の値は、割り当てを試みたバイト数です。
BindRvaToVaFailed
1
相対仮想アドレスがイメージに対して無効です。Parameter の値は使用されません。
BindNoRoomInImage
2
新しい形式のインポートテーブルを格納する領域がイメージ内にありません。Parameter の値は使用されません。
BindImportModuleFailed
3
モジュールのインポートに失敗しました。Parameter の値は使用されません。
BindImportProcedureFailed
4
プロシージャのインポートに失敗しました。Parameter の値は関数の名前です。
BindImportModule
5
モジュールのインポートを開始します。Parameter の値は使用されません。
BindImportProcedure
6
プロシージャのインポートを開始します。Parameter の値は関数の名前です。
BindForwarder
7
Parameter の値は、転送(フォワード)された関数の名前です。
BindForwarderNOT
8
Parameter の値は、転送(フォワード)されなかった関数の名前です。
BindImageModified
9
イメージが変更されました。Parameter の値は使用されません。
BindExpandFileHeaders
10
ファイルヘッダーが拡張されました。Parameter の値はバイト数です
BindImageComplete
11
バインドが完了しました。Parameter の値の詳細については、次の「解説」セクションを参照してください。
BindMismatchedSymbols
12
チェックサムが一致しませんでした。Parameter の値はシンボルファイルの名前です。
BindSymbolsNotUpdated
13
シンボルファイルは更新されませんでした。Parameter の値は、更新されなかったシンボルファイルの名前です。
ImageNameLPSTRバインド対象のファイルの名前です。この値には、ファイル名、部分的なパス、またはフルパスを指定できます。
DllNameLPSTRDLL の名前です。
VaUINT_PTR計算された仮想アドレスです。
ParameterUINT_PTR追加の状態情報です。この値は Reason パラメーターの値によって異なります。詳細については、次の「解説」セクションにあるコード断片を参照してください。

公式ドキュメント

アプリケーション定義のコールバック関数であり、 BindImageEx 関数と共に使用されます。このステータスルーチンは、イメージのバインド処理の途中で呼び出されます。

PIMAGEHLP_STATUS_ROUTINE 型は、このコールバック関数へのポインターを定義します。 StatusRoutine は、アプリケーション定義の関数名のプレースホルダーです。

戻り値

関数が成功した場合、戻り値は TRUE です。

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

解説(Remarks)

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

次のコード断片は、状態が BindImageComplete のときに Va の値をどのように使用するかを示しています。

case BindImageComplete:
    if (fVerbose) {
        fprintf(stderr, "BIND: Details of binding %s\n", ImageName );
        NewImports = (PIMAGE_BOUND_IMPORT_DESCRIPTOR)Va;
        NewImport = NewImports;
        while (NewImport->OffsetModuleName) {
            fprintf( stderr, "    Import from %s [%x]",
                     (LPSTR)NewImports + NewImport->OffsetModuleName,
                     NewImport->TimeDateStamp
                   );
            if (NewImport->NumberOfModuleForwarderRefs != 0) {
                fprintf( stderr, " with %u forwarders", NewImport-> 
                         NumberOfModuleForwarderRefs );
            }
            fprintf( stderr, "\n" );
            NewForwarder = (PIMAGE_BOUND_FORWARDER_REF)(NewImport+1);
            for (i=0; i<NewImport->NumberOfModuleForwarderRefs; i++) 
            {
                fprintf( stderr, "        Forward to %s [%x]\n",
                   (LPSTR)NewImports + NewForwarder->OffsetModuleName,
                   NewForwarder->TimeDateStamp);
                NewForwarder += 1;
            }
            NewImport = (PIMAGE_BOUND_IMPORT_DESCRIPTOR)NewForwarder;
        }
    }
    break;
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)