Função MapViewOfFile3 (memoryapi.h)
Mapeia uma exibição de um arquivo ou uma seção com backup de pagefile no espaço de endereço do processo especificado.
Sintaxe
PVOID MapViewOfFile3(
[in] HANDLE FileMapping,
[in] HANDLE Process,
[in, optional] PVOID BaseAddress,
[in] ULONG64 Offset,
[in] SIZE_T ViewSize,
[in] ULONG AllocationType,
[in] ULONG PageProtection,
[in, out, optional] MEM_EXTENDED_PARAMETER *ExtendedParameters,
[in] ULONG ParameterCount
);
Parâmetros
[in] FileMapping
Um HANDLE para uma seção que deve ser mapeada para o espaço de endereço do processo especificado.
[in] Process
Um HANDLE para um processo no qual a seção será mapeada.
[in, optional] BaseAddress
O endereço base desejado da exibição (o endereço é arredondado para baixo até o limite de 64k mais próximo).
Se esse parâmetro for NULL, o sistema escolherá o endereço base.
Se BaseAddress não for NULL, qualquer MEM_ADDRESS_REQUIREMENTS fornecido deverá consistir em todos os zeros.
[in] Offset
O deslocamento do início da seção.
O deslocamento deve ser alinhado ou alinhado a GetLargePageMinimum quando MEM_LARGE_PAGES é usado em AllocationType. Além disso, o deslocamento deve ser alinhado à página com o tamanho da página subjacente concedido por VirtualAlloc2 quando MEM_REPLACE_PLACEHOLDER é usado em AllocationType.
[in] ViewSize
O número de bytes a serem mapeados. Um valor zero (0) especifica que toda a seção deve ser mapeada.
O tamanho deve ser sempre um múltiplo do tamanho da página.
[in] AllocationType
O tipo de alocação de memória. Esse parâmetro pode ser zero (0) ou um dos valores a seguir.
Valor | Significado |
---|---|
|
Mapeia um modo de exibição reservado. |
|
Substitui um espaço reservado por uma exibição mapeada. Há suporte apenas para exibições de seção com suporte de dados/pf (sem imagens, memória física etc.). Quando você substitui um espaço reservado, BaseAddress e ViewSize deve corresponder exatamente aos do espaço reservado e qualquer estrutura de MEM_ADDRESS_REQUIREMENTS fornecida deve consistir em todos os zeros.
Depois de substituir um espaço reservado por uma exibição mapeada, para liberar essa exibição mapeada de volta para um espaço reservado, consulte o parâmetro UnmapFlagsUnmapViewOfFileEx e UnmapViewOfFile2. Um espaço reservado é um tipo de região de memória reservada. Os requisitos de alinhamento de 64k no de Deslocamento |
|
Mapeia uma exibição de página grande. Esse sinalizador especifica que o modo de exibição deve ser mapeado usando suporte de página grande. O tamanho da exibição deve ser um múltiplo do tamanho de uma página grande relatada pela função GetLargePageMinimum Os requisitos de alinhamento de 64k em de Deslocamento não se aplicam quando esse sinalizador é especificado. |
[in] PageProtection
A proteção de página desejada.
Para objetos de mapeamento de arquivo criados com o atributo SEC_IMAGE, o parâmetro PageProtection não tem efeito e deve ser definido como qualquer valor válido, como PAGE_READONLY.
[in, out, optional] ExtendedParameters
Um ponteiro opcional para um ou mais parâmetros estendidos do tipo MEM_EXTENDED_PARAMETER. Cada um desses valores de parâmetro estendidos pode ter um campo Type de MemExtendedParameterAddressRequirements ou MemExtendedParameterNumaNode. Se nenhum
[in] ParameterCount
O número de parâmetros estendidos apontados por ExtendedParameters.
Valor de retorno
Retorna o endereço base do modo de exibição mapeado, se bem-sucedido. Caso contrário, retorna NULL e o status de erro estendido está disponível usando GetLastError.
Observações
Essa API ajuda a dar suporte a jogos de alto desempenho e aplicativos de servidor, que têm requisitos específicos em relação ao gerenciamento de seu espaço de endereço virtual. Por exemplo, mapeando memória sobre uma região reservada anteriormente; isso é útil para implementar um buffer de anel de encapsulamento automático. E alocar memória com alinhamento específico; por exemplo, para permitir que seu aplicativo confirme regiões grandes/enormes mapeadas por página sob demanda.
Usando essa função para novas alocações, você pode:
- especificar um intervalo de espaço de endereço virtual e uma restrição de alinhamento de potência de 2
- especificar um número arbitrário de parâmetros estendidos
- especificar um nó NUMA preferencial para a memória física como um parâmetro estendido
- especificar uma operação de espaço reservado (especificamente, substituição).
Para especificar o nó NUMA, consulte o parâmetro ExtendedParameters.
Exemplos
Para obter um exemplo de código, consulte o Cenário 1 em VirtualAlloc2.
Requisitos
Requisito | Valor |
---|---|
de cliente com suporte mínimo | Windows 10, versão 1803 [somente aplicativos da área de trabalho] |
servidor com suporte mínimo | Windows Server 2016 [somente aplicativos da área de trabalho] |
da Plataforma de Destino |
Windows |
cabeçalho | memoryapi.h (inclua Windows.h) |
biblioteca | onecore.lib |
de DLL |
Kernel32.dll |
Consulte também