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
MEM_RESERVE
0x00002000
Mapeia um modo de exibição reservado.
MEM_REPLACE_PLACEHOLDER
0x00004000
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.

MEM_LARGE_PAGES
0x20000000
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

CreateFileMapping

Criando uma exibição de arquivo

DuplicateHandle

Getsysteminfo

MapViewOfFile3

MapViewOfFileEx

Funções de gerenciamento da memória

OpenFileMapping

SYSTEM_INFO

Unmapviewoffile