IMetaDataInfo::GetFileMapping Method

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

Syntax

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

Parameters

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

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

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

Return Value

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

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

Remarks

仅当基础元数据范围处于打开状态时, ppvData 指向的内存才有效。

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

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

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

Requirements

平台: 请参阅 .NET 支持的作系统

Header: Cor.h

Library: CorGuids.lib

.NET 版本: 自 .NET Framework 4.0 起可用

See also