> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# XMemMapPhysicalPages

> XMemMapPhysicalPages

# XMemMapPhysicalPages

Asigna páginas asignadas por [XMemAllocatePhysicalPages](/reference/system/xmem/functions/xmemallocatephysicalpages) al espacio de direcciones virtuales.

## Sintaxis

```cpp theme={null}
PVOID XMemMapPhysicalPages(  
         PVOID VirtualAddress,  
         ULONG_PTR NumberOfPages,  
         PULONG_PTR PageArray  
)  
```

### Parámetros

*VirtualAddress*   \_In\_\
Tipo: PVOID

Dirección en la que se deben asignar las páginas.

*NumberOfPages*   \_In\_\
Tipo: ULONG\_PTR

Número de entradas de *PageArray*.

*PageArray*   \_In\_reads\_opt\_(NumberOfPages)\
Tipo: PULONG\_PTR

Matriz de números de marco de página que representan las páginas que se van a asignar.

### Valor devuelto

Tipo: PVOID

Dirección virtual en la que se han asignado las páginas físicas, o NULL si se produjo un error de asignación.

En caso de error de asignación, llame a <a href="https://msdn.microsoft.com/library/windows/desktop/ms679360(v=vs.85).aspx">GetLastError</a> para obtener información de error extendida.

## Comentarios

El intervalo de direcciones virtuales debe haberse reservado previamente mediante una llamada a [XMemVirtualAlloc](/reference/system/xmem/functions/xmemvirtualalloc) con **MEM\_RESERVE**, un tamaño de página de **MEM\_64K\_PAGES** o **MEM\_2MB\_PAGES** y la marca **XMEM\_MAPPABLE**. Las reservas de direcciones **MEM\_PHYSICAL** realizadas por VirtualAlloc no se podrán usar para asignar esta memoria.

Si el intervalo de direcciones virtuales ya tiene páginas asignadas, estas se desasignarán. Además, se puede especificar NULL para PageArray a fin de anular la confirmación de la región de memoria.

**XMemMapPhysicalPages** se puede usar para asignar las mismas páginas físicas varias veces en el espacio de direcciones virtuales. Si las páginas se asignan varias veces, las asignaciones múltiples deben especificar atributos de caché idénticos (se da por supuesta la coherencia con la CPU si no se proporciona ningún atributo de caché; de lo contrario, la lista es **PAGE\_NOCACHE** o **PAGE\_WRITECOMBINE**).

<Note>Al asignar páginas físicas a memoria reservada con MEM\_2MB\_PAGES, las páginas físicas deben haberse asignado con XMEM\_2MB\_CLUSTERS. El parámetro PageArray solo debe contener la primera página física de cada clúster de 2 MB.</Note>

Ejemplo:

```cpp theme={null}
ULONG_PTR PageArray[64];
ULONG_PTR PageCount = RTL_NUMBER_OF(PageArray);
XMemAllocatePhysicalPages(XMEM_2MB_CLUSTERS, &PageCount, PageArray);

// Allocate 4MB of reserved space as both 64KB page sizes and 2MB page sizes
PVOID RWAddress = XMemVirtualAlloc(NULL,
    4 * 1024 * 1024,
    MEM_64K_PAGES | MEM_RESERVE,
    XMEM_CPU | XMEM_MAPPABLE,
    PAGE_READWRITE);

PVOID ROAddress = XMemVirtualAlloc(NULL,
    4 * 1024 * 1024,
    MEM_2MB_PAGES | MEM_RESERVE,
    XMEM_CPU | XMEM_MAPPABLE,
    PAGE_READONLY);

// Map the physical pages into the 64k address reservation
XMemMapPhysicalPages(RWAddress, PageCount, PageArray);

// Map the physical pages into the 2MB address reservation
// Use only the first physical page of each 2MB run
ULONG_PTR PageArray2MB[2];
PageArray2MB[0] = PageArray[0];
PageArray2MB[1] = PageArray[32];
XMemMapPhysicalPages(ROAddress, 2, PageArray2MB);

memset(RWAddress, 0x17, 4 * 1024 * 1024);
assert (memcmp(RWAddress, ROAddress, 4 * 1024 * 1024)==0);

// Unmap the regions, the address reservation is preserved
XMemMapPhysicalPages(ROAddress, 2, NULL);
XMemMapPhysicalPages(RWAddress, 64, NULL);

// Release the physical pages back to the MM
XMemFreePhysicalPages(PageCount, PageArray);

// Release the two reserved address regions
VirtualFree(RWAddress, 0, MEM_RELEASE);
VirtualFree(ROAddress, 0, MEM_RELEASE);
```

## Requisitos

**Encabezado:** xmem.h

**Biblioteca:** xmem.lib

**Plataformas compatibles:** consolas de la familia XBOX One y consolas XBOX Series

## Consulte también

[Referencia de XMem](/reference/system/xmem/xmem_members)\
[XMemVirtualAlloc](/reference/system/xmem/functions/xmemvirtualalloc)\
<a href="https://learn.microsoft.com/en-us/windows/desktop/api/memoryapi/nf-memoryapi-virtualfree">VirtualFree</a>\
[XMemFreePhysicalPages](/reference/system/xmem/functions/xmemfreephysicalpages)


## Related topics

- [Trabajo con el administrador de memoria del sistema operativo de juego del Microsoft GDK](/es/build/console-features/memory/system-memory-working.md)
- [XMemMapPhysicalPagesScatter](/es/reference/system/xmem/functions/xmemmapphysicalpagesscatter.md)
- [XMemFreePhysicalPages](/es/reference/system/xmem/functions/xmemfreephysicalpages.md)
- [Map](/es/reference/graphics/d3d12/interfaces/id3d12resource/methods/id3d12resource_map_public.md)
- [ApuMapApuAddress](/es/reference/audio/apu/functions/apumapapuaddress.md)
