IDebugHostSymbols::FindModuleByName 方法 (dbgmodel.h)

FindModuleByName 方法将浏览给定的主机上下文,找到具有指定名称的模块,并返回该模块的接口。 使用或不带文件扩展名按名称搜索模块是合法的。

语法

HRESULT FindModuleByName(
  IDebugHostContext *context,
  PCWSTR            moduleName,
  IDebugHostModule  **module
);

参数

context

将在此主机上下文中搜索与给定名称匹配的已加载模块。

moduleName

要搜索的模块的名称。 可以使用或不带文件扩展名指定名称。

module

如果找到模块,则会在此处返回模块的接口。

返回值

此方法返回指示成功或失败的 HRESULT。

注解

示例代码

ComPtr<IDebugHost> spHost; /* get the host */

ComPtr<IDebugHostSymbols> spSym;
if (SUCCEEDED(spHost.As(&spSym)))
{
    // Find the "notepad.exe" module in the current UI context (process) 
    // of the debug host:
    ComPtr<IDebugHostModule> spModule;
    if (SUCCEEDED(spSym->FindModuleByName(USE_CURRENT_HOST_CONTEXT, 
                                          L"notepad.exe", 
                                          &spModule)))
    {
        // spModule is the module "notepad.exe"
    }
}

FindModuleByName、CreateTypeSignature 和 CreateTypeSignatureForModuleRange 中的符号模块匹配的差异

FindModuleByName 将允许传递的模块名称是模块的真实映像名称(例如 My Module.dll),或者可以在调试器引擎 (引用它的名称,例如:MyModule 或 MyModule_<hex_base>) 。

调用 CreateTypeSignatureForModuleRange 并传递 name/nullptr/nullptr 将创建一个签名,该签名将与任何版本的名称匹配的任何模块匹配。

传递给 CreateTypeSignature 函数的模块名称将仅接受模块的真实图像名称 (,例如:MyModule.dll) 。

调用 FindModuleByName,然后使用该模块调用 CreateTypeSignature 将创建仅匹配传递给它的模块的特定实例的签名。 如果在 64 位 Windows) 上运行的 32 位进程中有两个模块副本加载 (ntdll,则只会匹配传递的特定实例。 如果卸载并重新加载该 DLL,该 DLL 也将不再匹配。 签名与调试器所称的模块的特定实例相关联。

要求

要求
Header dbgmodel.h

另请参阅

IDebugHostSymbols 接口

CreateTypeSignature

CreateTypeSignatureForModuleRange