Partager via


MapViewOfFile3FromApp, fonction (memoryapi.h)

Mappe une vue d’un mappage de fichiers dans l’espace d’adressage d’une application du Windows Store appelante.

À l’aide de cette fonction, vous pouvez : pour les nouvelles allocations, spécifier une plage d’espace d’adressage virtuel et une restriction d’alignement power-of-2 ; spécifier un nombre arbitraire de paramètres étendus ; spécifiez un nœud NUMA préféré pour la mémoire physique en tant que paramètre étendu ; et spécifiez une opération d’espace réservé (plus précisément, remplacement).

Pour spécifier le nœud NUMA, consultez le paramètre ExtendedParameters .

Syntaxe

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

Paramètres

[in] FileMapping

HANDLE à une section qui doit être mappée dans l’espace d’adressage du processus spécifié.

[in] Process

HANDLE à un processus dans lequel la section sera mappée.

[in, optional] BaseAddress

Adresse de base souhaitée de la vue. L’adresse est arrondie à la limite de 64 ko la plus proche.

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

Si BaseAddress n’a pas la valeur NULL, toute structure de MEM_ADDRESS_REQUIREMENTS fournie doit se composer de tous les zéros.

[in] Offset

Décalage du début de la section. Il doit être aligné sur 64 000.

[in] ViewSize

Nombre d’octets à mapper. La valeur zéro (0) spécifie que la section entière doit être mappée.

La taille doit toujours être un multiple de la taille de la page.

[in] AllocationType

Type d’allocation de mémoire. Ce paramètre peut être égal à zéro (0) ou à l’une des valeurs suivantes.

Valeur Signification
MEM_RESERVE
0x00002000
Mappe une vue réservée.
MEM_REPLACE_PLACEHOLDER
0x00004000
Remplace un espace réservé par une vue mappée. Seules les vues de section de données/pf-backed sont prises en charge (aucune image, mémoire physique, etc.). Lorsque vous remplacez un espace réservé, BaseAddress et ViewSize doivent correspondre exactement à ceux de l’espace réservé, et toute structure de MEM_ADDRESS_REQUIREMENTS fournie doit se composer de tous les zéros.

Après avoir remplacé un espace réservé par une vue mappée, pour libérer cette vue mappée dans un espace réservé, consultez le paramètre UnmapFlags de UnmapViewOfFileEx et UnmapViewOfFile2.

Un espace réservé est un type de région de mémoire réservée.

MEM_LARGE_PAGES
0x20000000
Mappe une vue de page volumineuse. Consultez prise en charge des pages volumineuses.

[in] PageProtection

Protection de page souhaitée.

Pour les objets de mappage de fichiers créés avec l’attribut SEC_IMAGE , le paramètre PageProtection n’a aucun effet et doit être défini sur une valeur valide telle que PAGE_READONLY.

[in, out, optional] ExtendedParameters

Pointeur facultatif vers un ou plusieurs paramètres étendus de type MEM_EXTENDED_PARAMETER. Chacune de ces valeurs de paramètre étendue peut elle-même avoir un champ Type de MemExtendedParameterAddressRequirements ou MemExtendedParameterNumaNode. Si aucun paramètre étendu MemExtendedParameterNumaNode n’est fourni, le comportement est le même que pour les fonctionsMapViewOfFileVirtualAlloc/ (autrement dit, le nœud NUMA préféré pour les pages physiques est déterminé en fonction du processeur idéal du thread qui accède d’abord à la mémoire).

[in] ParameterCount

Nombre de paramètres étendus pointés par ExtendedParameters.

Valeur retournée

Retourne l’adresse de base de la vue mappée, si elle réussit. Sinon, retourne NULL et l’erreur étendue status est disponible à l’aide de GetLastError.

Remarques

Cette API permet de prendre en charge les jeux hautes performances et les applications serveur, qui ont des exigences particulières concernant la gestion de leur espace d’adressage virtuel. Par exemple, le mappage de la mémoire au-dessus d’une région précédemment réservée ; Cela est utile pour implémenter une mémoire tampon d’anneau d’habillage automatique. Et l’allocation de mémoire avec un alignement spécifique ; par exemple, pour permettre à votre application de valider des régions mappées volumineuses ou volumineuses à la demande.

À une exception importante, les vues de fichiers dérivées de n’importe quel objet de mappage de fichiers qui est adossé au même fichier sont cohérentes ou identiques à un moment spécifique. La cohérence est garantie pour les vues au sein d’un processus et pour les vues qui sont mappées par différents processus.

L’exception est liée aux fichiers distants. Bien que MapViewOfFile3FromApp fonctionne avec des fichiers distants, il ne les maintient pas cohérents. Par exemple, si deux ordinateurs mappent un fichier en tant que fichier accessible en écriture et modifient tous les deux la même page, chaque ordinateur ne voit que ses propres écritures dans la page. Lorsque les données sont mises à jour sur le disque, elles ne sont pas fusionnées.

Vous ne pouvez demander une protection exécutable que si votre application dispose de la fonctionnalité codeGeneration .

Exemples

Pour obtenir un exemple de code, consultez Scénario 1 dans Virtual2Alloc.

Configuration requise

   
Client minimal pris en charge Windows 10 (applications de bureau uniquement)
Serveur minimal pris en charge Windows Server 2016 (applications de bureau uniquement)
Plateforme cible Windows
En-tête memoryapi.h (inclure Windows.h)
Bibliothèque WindowsApp.lib
DLL Kernel32.dll

Voir aussi

CreateFileMapping

Création d’un affichage de fichiers

DuplicateHandle

GetSystemInfo

MapViewOfFile3

MapViewOfFileEx

Fonctions de gestion de la mémoire

OpenFileMapping

SYSTEM_INFO

UnmapViewOfFile