Fonction MapUserPhysicalPages (memoryapi.h)

Mappe les pages de mémoire physique précédemment allouées à une adresse spécifiée dans une région Extensions de fenêtrage d’adresses (AWE).

Pour effectuer un mappage par lots et un mappage de plusieurs régions, utilisez la fonction MapUserPhysicalPagesScatter .

Windows 64 bits sur les systèmes Itanium : En raison de la différence de tailles de page, MapUserPhysicalPages n’est pas pris en charge pour les applications 32 bits.

Syntaxe

BOOL MapUserPhysicalPages(
  [in] PVOID      VirtualAddress,
  [in] ULONG_PTR  NumberOfPages,
  [in] PULONG_PTR PageArray
);

Paramètres

[in] VirtualAddress

Pointeur vers l’adresse de départ de la région de mémoire à remappper.

La valeur de lpAddress doit se trouver dans la plage d’adresses renvoyée par la fonction VirtualAlloc lorsque la région Extensions de fenêtrage d’adresses (AWE) est allouée.

[in] NumberOfPages

Taille de la mémoire physique et de l’espace d’adressage virtuel pour lesquels établir des traductions, en pages.

La plage d’adresses virtuelles est contiguë à partir de lpAddress. Les trames physiques sont spécifiées par userPfnArray.

Le nombre total de pages ne peut pas s’étendre à partir de l’adresse de départ au-delà de la fin de la plage spécifiée dans AllocateUserPhysicalPages.

[in] PageArray

Pointeur vers un tableau de numéros de trames de page physiques.

Ces images sont mappées par l’argument lpAddress lors du retour de cette fonction. La taille de la mémoire allouée doit être au moins la valeur NumberOfPages multipliée par la taille du type de données ULONG_PTR.

N’essayez pas de modifier cette mémoire tampon. Il contient des données du système d’exploitation et une altération peut être catastrophique. Les informations contenues dans la mémoire tampon ne sont pas utiles pour une application.

Si ce paramètre a la valeur NULL, la plage d’adresses spécifiée est décochée. En outre, les pages physiques spécifiées ne sont pas libérées et vous devez appeler FreeUserPhysicalPages pour les libérer.

Valeur retournée

Si la fonction réussit, la valeur de retour est TRUE.

Si la fonction échoue, la valeur de retour est FALSE et aucun mappage n’est effectué( partiel ou non). Pour obtenir des informations détaillées sur l’erreur, appelez GetLastError.

Remarques

Les pages physiques ne sont pas maquées, mais elles ne sont pas libérées. Vous devez appeler FreeUserPhysicalPages pour libérer les pages physiques.

Un nombre quelconque de pages de mémoire physique peut être spécifié, mais la mémoire ne doit pas s’étendre en dehors de l’espace d’adressage virtuel alloué par VirtualAlloc . Toutes les cartes d’adresses existantes sont automatiquement remplacées par les nouvelles traductions, et les anciennes traductions ne sont pas maappées.

Vous ne pouvez pas mapper des pages de mémoire physique en dehors de la plage spécifiée dans AllocateUserPhysicalPages. Vous pouvez mapper plusieurs régions simultanément, mais elles ne peuvent pas se chevaucher.

Les pages physiques peuvent être situées à n’importe quelle adresse physique, mais ne font pas d’hypothèses sur la contiguïté des pages physiques.

Pour annuler le mappage de la plage d’adresses actuelle, spécifiez NULL comme paramètre de tableau de pages de mémoire physique. Toutes les pages actuellement mappées ne sont pas maquées, mais ne sont pas libérées. Vous devez appeler FreeUserPhysicalPages pour libérer les pages physiques.

Dans un environnement multiprocesseur, cette fonction maintient la cohérence de la mémoire tampon de traduction matérielle. Au retour de cette fonction, tous les threads sur tous les processeurs sont garantis pour voir le mappage correct.

Pour compiler une application qui utilise cette fonction, définissez la macro _WIN32_WINNT comme 0x0500 ou version ultérieure. Pour plus d’informations, consultez Utilisation des en-têtes Windows.

Exemples

Pour obtenir un exemple, consultez Exemple AWE.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows XP [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2003 [applications de bureau uniquement]
Plateforme cible Windows
En-tête memoryapi.h (inclure Windows.h, Memoryapi.h)
Bibliothèque onecore.lib
DLL Kernel32.dll

Voir aussi

Extensions de fenêtrage d’adresses

AllocateUserPhysicalPages

FreeUserPhysicalPages

MapUserPhysicalPagesScatter

Fonctions de gestion de la mémoire