Método IMetaDataInfo::GetFileMapping
Obtém a região de memória do arquivo mapeado e o tipo de mapeamento.
Sintaxe
HRESULT GetFileMapping (
[out] const void **ppvData,
[out] ULONGLONG *pcbData,
[out] DWORD *pdwMappingType
);
Parâmetros
ppvData
[out] Um ponteiro para o início do arquivo mapeado.
pcbData
[out] O tamanho da região mapeada. Se pdwMappingType
for fmFlat
, esse é o tamanho do arquivo.
pdwMappingType
[out] Um valor CorFileMapping que indica o tipo de mapeamento. A implementação atual do CLR (Common Language Runtime) sempre retorna fmFlat
. Outros valores são reservados para uso futuro. No entanto, você sempre deve verificar o valor retornado, pois outros valores podem estar habilitados em versões futuras ou versões de serviço.
Valor Retornado
HRESULT | Descrição |
---|---|
S_OK |
Todas as saídas são preenchidas. |
E_INVALIDARG |
NULL foi passado como um valor do argumento. |
COR_E_NOTSUPPORTED |
A implementação do CLR não pode fornecer informações sobre a região de memória. Isso pode ocorrer pelos seguintes motivos: - O escopo dos metadados foi aberto com o sinalizador ofWrite ou o sinalizador ofCopyMemory .- O escopo dos metadados foi aberto sem o sinalizador ofReadOnly .- O método IMetaDataDispenser::OpenScopeOnMemory foi usado para abrir apenas a parte de metadados do arquivo. - O arquivo não é um arquivo PE (portable executable). Observação: Essas condições dependem da implementação do CLR e provavelmente serão enfraquecidas em versões futuras do CLR. |
Comentários
A memória para a qual ppvData
aponta é válida apenas enquanto o escopo de metadados subjacente estiver aberto.
Para que esse método funcione, quando mapear os metadados de um arquivo em disco na memória chamando o método IMetaDataDispenser::OpenScope, você deverá especificar o sinalizador ofReadOnly
e não deverá especificar o sinalizador ofWrite
nem o ofCopyMemory
.
A escolha do tipo de mapeamento de arquivo para cada escopo é específica para uma determinada implementação do CLR. Ele não pode ser definido pelo usuário. A implementação atual do CLR sempre retorna fmFlat
em pdwMappingType
, mas isso pode mudar em versões futuras do CLR ou em versões futuras de serviço de uma determinada versão. Sempre verifique o valor retornado em pdwMappingType
, pois diferentes tipos terão layouts e deslocamentos diferentes.
Não há suporte para passar NULL para qualquer um dos três parâmetros. O método retorna E_INVALIDARG
e nenhuma das saídas é preenchida. Ignorar o tipo de mapeamento ou o tamanho da região pode resultar em término anormal do programa.
Requisitos
Plataformas: confira Requisitos do sistema.
Cabeçalho: Cor.h
Biblioteca: usada como um recurso na MsCorEE.dll
Versões do .NET Framework: disponíveis desde 4