> ## 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

Mappe les pages allouées par [XMemAllocatePhysicalPages](/fr/reference/system/xmem/functions/xmemallocatephysicalpages) dans l'espace d'adressage virtuel.

## Syntaxe

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

### Paramètres

*VirtualAddress*   \_In\_\
Type : PVOID

Adresse à laquelle les pages doivent être mappées.

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

Nombre d'entrées dans *PageArray*.

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

Tableau de numéros de cadre de page représentant les pages à mapper.

### Valeur renvoyée

Type : PVOID

Adresse virtuelle à laquelle les pages physiques ont été mappées, ou NULL en cas d'échec du mappage.

En cas d'échec du mappage, appelez <a href="https://msdn.microsoft.com/library/windows/desktop/ms679360(v=vs.85).aspx">GetLastError</a> pour obtenir des informations d'erreur étendues.

## Remarques

La plage d'adresses virtuelles doit avoir été réservée au préalable par un appel à [XMemVirtualAlloc](/fr/reference/system/xmem/functions/xmemvirtualalloc) avec **MEM\_RESERVE**, une taille de page **MEM\_64K\_PAGES** ou **MEM\_2MB\_PAGES** et l'indicateur **XMEM\_MAPPABLE**. Les réservations d'adresses **MEM\_PHYSICAL** effectuées par VirtualAlloc ne sont pas utilisables pour mapper cette mémoire.

Si la plage d'adresses virtuelles comporte déjà des pages mappées, celles-ci sont démappées. En outre, NULL peut être spécifié pour PageArray afin d'annuler la validation de la région de mémoire.

**XMemMapPhysicalPages** peut être utilisée pour mapper plusieurs fois les mêmes pages physiques dans l'espace d'adressage virtuel. Si des pages sont mappées plusieurs fois, les différents mappages doivent spécifier des attributs de mise en cache identiques (la cohérence CPU est implicite si aucun attribut de cache n'est fourni ; sinon, la liste est **PAGE\_NOCACHE** ou **PAGE\_WRITECOMBINE**).

<Note>Lors du mappage de pages physiques dans une mémoire réservée avec MEM\_2MB\_PAGES, les pages physiques doivent avoir été allouées avec XMEM\_2MB\_CLUSTERS. Le paramètre PageArray ne doit contenir que la première page physique de chaque cluster de 2 Mo.</Note>

Exemple :

```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);
```

## Configuration requise

**En-tête :** xmem.h

**Bibliothèque :** xmem.lib

**Plateformes prises en charge :** consoles de la famille XBOX One et consoles XBOX Series

## Voir aussi

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


## Related topics

- [XMemMapPhysicalPages](/reference/system/xmem/functions/xmemmapphysicalpages.md)
- [Working with the Microsoft GDK Game OS memory manager](/build/console-features/memory/system-memory-working.md)
- [Trabajo con el administrador de memoria del sistema operativo de juego del Microsoft GDK](/es/build/console-features/memory/system-memory-working.md)
- [使用 Microsoft GDK 游戏 OS 内存管理器](/zh-CN/build/console-features/memory/system-memory-working.md)
- [Microsoft GDK Game OS 메모리 관리자 사용](/ko/build/console-features/memory/system-memory-working.md)
