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
。 保留其他值以供将来使用。 但是,应始终验证返回的值,因为其他值可能在将来的版本或服务版本中启用。
返回值
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 的未来版本或给定版本的未来服务版本中可能会更改。 应始终检查 pdwMappingType
中返回的值,因为不同的类型具有不同的布局和偏移量。
不支持为三个参数中的任意一个传递 NULL。 方法返回 E_INVALIDARG
,并且未填充任何输出。 忽略映射类型或区域大小可能会导致程序异常终止。
要求
平台:请参阅系统要求。
标头:Cor.h
库:用作 MsCorEE.dll 中的资源
.NET Framework 版本:自 4 起可用