Share via


Función MapViewOfFile3FromApp (memoryapi.h)

Asigna una vista de una asignación de archivos al espacio de direcciones de una aplicación de la Tienda Windows que llama.

Con esta función, puede: para las nuevas asignaciones, especificar un intervalo de espacio de direcciones virtuales y una restricción de alineación de potencia de 2; especifique un número arbitrario de parámetros extendidos; especifique un nodo NUMA preferido para la memoria física como parámetro extendido; y especifican una operación de marcador de posición (concretamente, reemplazo).

Para especificar el nodo NUMA, consulte el parámetro ExtendedParameters .

Sintaxis

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

Identificador a una sección que se va a asignar al espacio de direcciones del proceso especificado.

[in] Process

Identificador de un proceso en el que se asignará la sección.

[in, optional] BaseAddress

Dirección base deseada de la vista. La dirección se redondea hacia abajo hasta el límite de 64 000 más cercano.

              If this parameter is <b>NULL</b>, the system picks the base
              address.

Si BaseAddress no es NULL, cualquier estructura de MEM_ADDRESS_REQUIREMENTS proporcionada debe constar de todos los ceros.

[in] Offset

Desplazamiento desde el principio de la sección. Debe estar alineado a 64 000.

[in] ViewSize

Número de bytes que se van a asignar. Un valor de cero (0) especifica que se va a asignar toda la sección.

El tamaño siempre debe ser un múltiplo del tamaño de página.

[in] AllocationType

Tipo de asignación de memoria. Este parámetro puede ser cero (0) o uno de los valores siguientes.

Value Significado
MEM_RESERVE
0x00002000
Asigna una vista reservada.
MEM_REPLACE_PLACEHOLDER
0x00004000
Reemplaza un marcador de posición por una vista asignada. Solo se admiten vistas de sección con copia de seguridad pf/datos (sin imágenes, memoria física, etc.). Al reemplazar un marcador de posición, BaseAddress y ViewSize deben coincidir exactamente con los del marcador de posición y cualquier estructura de MEM_ADDRESS_REQUIREMENTS proporcionada debe estar formada por todos los ceros.

Después de reemplazar un marcador de posición por una vista asignada, para liberar esa vista asignada a un marcador de posición, vea el parámetro UnmapFlags de UnmapViewOfFileEx y UnmapViewOfFile2.

Un marcador de posición es un tipo de región de memoria reservada.

MEM_LARGE_PAGES
0x20000000
Asigna una vista de página grande. Consulte compatibilidad con páginas grandes.

[in] PageProtection

Protección de página deseada.

En el caso de los objetos de asignación de archivos creados con el atributo SEC_IMAGE , el parámetro PageProtection no tiene ningún efecto y debe establecerse en cualquier valor válido, como PAGE_READONLY.

[in, out, optional] ExtendedParameters

Puntero opcional a uno o varios parámetros extendidos de tipo MEM_EXTENDED_PARAMETER. Cada uno de esos valores de parámetro extendidos puede tener un campo Type de MemExtendedParameterAddressRequirements o MemExtendedParameterNumaNode. Si no se proporciona ningún parámetro extendido MemExtendedParameterNumaNode , el comportamiento es el mismo que para las funciones VirtualAlloc/MapViewOfFile (es decir, el nodo NUMA preferido para las páginas físicas se determina en función del procesador ideal del subproceso que primero accede a la memoria).

[in] ParameterCount

Número de parámetros extendidos a los que apunta ExtendedParameters.

Valor devuelto

Devuelve la dirección base de la vista asignada, si se ejecuta correctamente. De lo contrario, devuelve NULL y el estado de error extendido está disponible mediante GetLastError.

Comentarios

Esta API ayuda a admitir juegos de alto rendimiento y aplicaciones de servidor, que tienen requisitos concretos para administrar su espacio de direcciones virtual. Por ejemplo, asignar memoria encima de una región reservada anteriormente; esto es útil para implementar un búfer de anillo de ajuste automático. Y asignar memoria con alineación específica; por ejemplo, para permitir que la aplicación confirme regiones asignadas por páginas grandes o enormes a petición.

Con una excepción importante, las vistas de archivo derivadas de cualquier objeto de asignación de archivos respaldado por el mismo archivo son coherentes o idénticos en un momento específico. La coherencia se garantiza para las vistas dentro de un proceso y para las vistas asignadas por diferentes procesos.

La excepción está relacionada con los archivos remotos. Aunque MapViewOfFile3FromApp funciona con archivos remotos, no los mantiene coherentes. Por ejemplo, si dos equipos asignan un archivo como grabable y ambos cambian la misma página, cada equipo solo ve sus propias escrituras en la página. Cuando los datos se actualizan en el disco, no se combina.

Solo puedes solicitar correctamente la protección ejecutable si la aplicación tiene la funcionalidad codeGeneration .

Ejemplos

Para obtener un ejemplo de código, vea Escenario 1 en Virtual2Alloc.

Requisitos

   
Cliente mínimo compatible Windows 10 [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2016 [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado memoryapi.h (incluya Windows.h)
Library WindowsApp.lib
Archivo DLL Kernel32.dll

Vea también

CreateFileMapping

Crear una vista de archivo

DuplicateHandle

Getsysteminfo

MapViewOfFile3

MapViewOfFileEx

Funciones de administración de memoria

OpenFileMapping

SYSTEM_INFO

UnmapViewOfFile