ICorProfilerInfo3::GetModuleInfo2 方法

给定一个模块 ID,返回该模块的文件名、模块的父程序集的 ID,以及说明该模块属性的位屏蔽。

HRESULT GetModuleInfo2(
    [in]  ModuleID   moduleId,
    [out] LPCBYTE    *ppBaseLoadAddress,
    [in]  ULONG      cchName,
    [out] ULONG      *pcchName,
    [out, annotation("__out_ecount_part(cchName, *pcchName)")]
          WCHAR      szName[] ,
    [out] AssemblyID *pAssemblyId);
    [out] DWORD                 *pdwModuleFlags);

参数

  • moduleId
    [in] 将检索其信息的模块的 ID。

  • ppBaseLoadAddress
    [out] 加载模块时所处的基址。

  • cchName
    [in] szName 返回缓冲区的长度(以字符为单位)。

  • pcchName
    [out] 一个指向所返回的模块文件名总字符数长度的指针。

  • szName
    [out] 调用方提供的宽字符缓冲区。 当此方法返回时,此缓冲区包含模块的文件名。

  • pAssemblyId
    [out] 一个指向模块父程序集 ID 的指针。

  • pdwModuleFlags
    [out] 从COR_PRF_MODULE_FLAGS 枚举得到的值的掩码,用于指定模块属性。

备注

对于动态模块,szName 参数为模块的元数据名称,其基址为 0(零)。 元数据名称是元数据内部模块表中的名称列中的值。 这也被公开作为托管代码的 Module.ScopeName,并作为 IMetaDataImport::GetScopeProps 方法的 szName 参数,用于非托管元数据客户端代码。

只要模块的 ID 存在,便可以调用 GetModuleInfo2 方法,但是只有在探查器收到 ICorProfilerCallback::ModuleAttachedToAssembly 回调后,才能使用其父程序集的 ID。

GetModuleInfo2 返回后,您必须验证 szName 缓冲区的大小是否足以包含模块的完整文件名。 为此,请将 pcchName 指向的值与 cchName 参数的值进行比较。 如果 pcchName 指向大于 cchName 的值,请分配更大的 szName 缓冲区,用新的、更大的大小更新 cchName,然后再次调用 GetModuleInfo2

或者,您可以首先用长度为零的 szName 缓冲区调用 GetModuleInfo2,以获取正确的缓冲区大小。 然后,您可以将缓冲区大小设置为 pcchName 中返回的值,然后再次调用 GetModuleInfo2

有关这两种方法的详细信息,请参见分析 API 方法约定 中的“Caller-Allocated 缓冲区”。

要求

**平台:**请参见 .NET Framework 系统要求

**头文件:**CorProf.idl、CorProf.h

**库:**CorGuids.lib

**.NET Framework 版本:**4

请参见

参考

ICorProfilerInfo 接口

其他资源

分析接口

分析(非托管 API 参考)