IMetaDataInfo::GetFileMapping 方法

获取映射文件的内存区域,以及映射的种类。

语法

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

参数

ppvData
[out] 指向映射文件的起始位置的指针。

pcbData
[out] 映射区域的大小。 如果 pdwMappingTypefmFlat,则这是文件的大小。

pdwMappingType
[out] 一个 CorFileMapping 值,指示映射的类型。 当前的公共语言运行时 (CLR) 始终返回 fmFlat。 保留其他值以供将来使用。 但是,应始终验证返回的值,因为其他值可能在将来的版本或服务版本中启用。

返回值

HRESULT 说明
S_OK 将填充所有输出。
E_INVALIDARG NULL 作为参数值传递。
COR_E_NOTSUPPORTED CLR 实现无法提供有关内存区域的信息。 这可能是由以下原因引起的:

- 元数据范围已打开,带有 ofWriteofCopyMemory 标志。
- 元数据范围已打开,不带 ofReadOnly 标志。
- IMetaDataDispenser::OpenScopeOnMemory 方法仅用于打开文件的元数据部分。
- 该文件不是可移植的可执行 (PE) 文件格式。 注意:这些条件取决于 CLR 实现,在 CLR 的未来版本中可能会降低。

注解

ppvData 指向的内存仅在基础元数据作用域打开时有效。

若要使此方法正常工作,在通过调用 IMetaDataDispenser::OpenScope 方法将磁盘上文件的元数据映射到内存中时,必须指定 ofReadOnly 标志,并且不得指定 ofWriteofCopyMemory 标志。

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

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

要求

平台:请参阅系统要求

标头:Cor.h

库:用作 MsCorEE.dll 中的资源

.NET Framework 版本:自 4 起可用

另请参阅