PIMAGEHLP_STATUS_ROUTINE回调函数 (imagehlp.h)

BindImageEx 函数一起使用的应用程序定义的回调函数。 在映像绑定过程中调用状态例程。

PIMAGEHLP_STATUS_ROUTINE类型定义指向此回调函数的指针。 StatusRoutine 是应用程序定义的函数名称的占位符。

语法

PIMAGEHLP_STATUS_ROUTINE PimagehlpStatusRoutine;

BOOL PimagehlpStatusRoutine(
  [in] IMAGEHLP_STATUS_REASON Reason,
  [in] PCSTR ImageName,
  [in] PCSTR DllName,
  [in] ULONG_PTR Va,
  [in] ULONG_PTR Parameter
)
{...}

参数

[in] Reason

绑定操作的当前状态。 此参数的取值可为下列值之一:

含义
BindOutOfMemory
0
内存不足。 参数值是分配尝试中的字节数。
BindRvaToVaFailed
1
相对虚拟地址对于映像无效。 不使用 参数 值。
BindNoRoomInImage
2
新格式导入表的图像中没有空间。 不使用 参数 值。
BindImportModuleFailed
3
模块导入失败。 不使用 参数 值。
BindImportProcedureFailed
4
过程导入失败。 Parameter 值是函数的名称。
BindImportModule
5
模块导入正在启动。 不使用 参数 值。
BindImportProcedure
6
过程导入正在启动。 Parameter 值是函数的名称。
BindForwarder
7
Parameter 值是转发的函数的名称。
BindForwarderNOT
8
Parameter 值是未转发的函数的名称。
BindImageModified
9
图像已修改。 不使用 参数 值。
BindExpandFileHeaders
10
文件标头已展开。 参数值是字节数
BindImageComplete
11
绑定已完成。 有关 参数 值的详细信息,请参阅以下备注部分。
BindMismatchedSymbols
12
校验和不匹配。 Parameter 值是符号文件的名称。
BindSymbolsNotUpdated
13
符号文件未更新。 参数值是未更新的符号文件的名称。

[in] ImageName

要绑定的文件的名称。 此值可以是文件名、部分路径或完整路径。

[in] DllName

DLL 的名称。

[in] Va

计算的虚拟地址。

[in] Parameter

任何其他状态信息。 此值取决于 Reason 参数的值。 有关详细信息,请参阅以下“备注”部分中的代码片段。

返回值

如果函数成功,则返回值为 TRUE

如果函数失败,则返回值为 FALSE。 若要检索扩展的错误信息,请调用 GetLastError

注解

所有 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;

要求

要求
最低受支持的客户端 Windows XP [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
目标平台 Windows
标头 imagehlp.h

另请参阅

BindImageEx

ImageHlp 函数