IMetaDataInfo::GetFileMapping 方法

获取映射文件和映射类型的内存区域。

HRESULT GetFileMapping (
    [out] const void           **ppvData, 
    [out] ULONGLONG            *pcbData, 
    [out] DWORD                *pdwMappingType
);

参数

  • ppvData
    [out] 指向映射文件的开头的指针。

  • pcbData
    [out] 映射区域的大小。 如果 pdwMappingType 为 fmFlat,则为文件的大小。

  • pdwMappingType
    [out] 指示映射类型的 CorFileMapping 值。 公共语言运行时 (CLR) 的当前实现始终返回 fmFlat。 保留其他值以供将来使用。 但是,应始终确认返回的值,因为未来版本或 service releases 中可能启用了其他值。

返回值

HRESULT

说明

S_OK

填充所有输出。

E_INVALIDARG

NULL 作为参数值传递。

COR_E_NOTSUPPORTED

CLR 实现不能提供有关内存区域的信息。 发生这种情况的原因如下:

  • 元数据范围使用 ofWrite 或 ofCopyMemory 标志打开。

  • 元数据范围无需 ofReadOnly 标志打开。

  • IMetaDataDispenser::OpenScopeOnMemory 方法用于只打开文件的元数据部分。

  • 文件不是可迁移可执行 (PE) 文件。

注意注意
这些条件取决于 CLR 实现,并可在 CLR 的未来版本中变弱。

备注

ppvData 指向的内存只有在基础元数据范围打开时才有效。

为使此方法正常工作,当您通过调用 IMetaDataDispenser::OpenScope 方法将磁盘文件中的元数据映射到内存中时,您必须指定 ofReadOnly 标志,并且不能指定 ofWrite 或 ofCopyMemory 标志。

为每个范围选择文件映射类型是特定于给定的 CLR 实现的。 它不能由用户设置。 CLR 的当前实现在 pdwMappingType 中始终返回 fmFlat,但此情况将在 CLR 的未来版本或给定版本的未来 Service Release 中更改。 您应该始终检查 pdwMappingType 中的返回值,因为不同的类型将具有不同的布局和偏移量。

不支持为这三个参数中的任何一个传递 NULL。 方法返回 E_INVALIDARG,并且未填充任何输出。 忽略映射类型或区域的大小可能会导致异常程序终止。

要求

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

**头文件:**Cor.h

**库:**在 MsCorEE.dll 中用作资源

**.NET Framework 版本:**4

请参见

其他资源

IMetaDataInfo 接口

CorFileMapping 枚举