Função MapViewOfFile3FromApp (memoryapi.h)
Mapeia uma exibição de um mapeamento de arquivo para o espaço de endereço de um aplicativo da Windows Store de chamada.
Usando essa função, você pode: para novas alocações, 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; especifique um nó NUMA preferencial para a memória física como um parâmetro estendido; e especifique uma operação de espaço reservado (especificamente, substituição).
Para especificar o nó NUMA, consulte o parâmetro ExtendedParameters .
Sintaxe
PVOID MapViewOfFile3FromApp(
[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.
If this parameter is <b>NULL</b>, the system picks the base
address.
Se BaseAddress não for NULL, qualquer estrutura de MEM_ADDRESS_REQUIREMENTS fornecida deverá consistir em todos os zeros.
[in] Offset
O deslocamento do início da seção. Isso deve estar alinhado a 64k.
[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 sempre deve ser 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 devem 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 UnmapFlags de UnmapViewOfFileEx e UnmapViewOfFile2. Um espaço reservado é um tipo de região de memória reservada. |
|
Mapeia um modo de exibição de página grande. Confira Suporte a páginas grandes. |
[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 parâmetro estendido MemExtendedParameterNumaNode for fornecido, o comportamento será o mesmo das funções VirtualAlloc/MapViewOfFile (ou seja, o nó NUMA preferencial para as páginas físicas será determinado com base no processador ideal do thread que acessa a memória pela primeira vez).
[in] ParameterCount
O número de parâmetros estendidos apontados por ExtendedParameters.
Valor retornado
Retorna o endereço base do modo de exibição mapeado, se bem-sucedido. Caso contrário, retornará NULL e status de erro estendido estará disponível usando GetLastError.
Comentários
Essa API ajuda a dar suporte a jogos de alto desempenho e aplicativos de servidor, que têm requisitos específicos sobre o 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.
Com uma exceção importante, as exibições de arquivo derivadas de qualquer objeto de mapeamento de arquivo com o mesmo arquivo são coerentes ou idênticas em um momento específico. A coerência é garantida para exibições dentro de um processo e para exibições mapeadas por processos diferentes.
A exceção está relacionada a arquivos remotos. Embora MapViewOfFile3FromApp funcione com arquivos remotos, ele não os mantém coerentes. Por exemplo, se dois computadores mapearem um arquivo como gravável e ambos alterarem a mesma página, cada computador verá apenas suas próprias gravações na página. Quando os dados são atualizados no disco, eles não são mesclados.
Você só poderá solicitar proteção executável com êxito se o aplicativo tiver a funcionalidade codeGeneration .
Exemplos
Para obter um exemplo de código, consulte Cenário 1 em Virtual2Alloc.
Requisitos
Cliente mínimo com suporte | Windows 10 [somente aplicativos da área de trabalho] |
Servidor mínimo com suporte | Windows Server 2016 [somente aplicativos da área de trabalho] |
Plataforma de Destino | Windows |
Cabeçalho | memoryapi.h (inclua Windows.h) |
Biblioteca | WindowsApp.lib |
DLL | Kernel32.dll |
Confira também
Criando uma exibição de arquivo