Partager via


MapViewOfFile3, fonction (memoryapi.h)

Mappe une vue d’un fichier ou d’une section sauvegardée par un fichier dans l’espace d’adressage du processus spécifié.

Syntaxe

PVOID MapViewOfFile3(
  [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

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

[in] Process

Un 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 64k la plus proche).

Si ce paramètre est NULL, le système sélectionne l’adresse de base.

Si baseAddress n’est pas NULL, les MEM_ADDRESS_REQUIREMENTS fournies doivent être constituées de tous les zéros.

[in] Offset

Décalage du début de la section.

Le décalage doit être aligné ou aligné sur GetLargePageMinimum lorsque MEM_LARGE_PAGES est utilisé dans AllocationType. En outre, le décalage doit être aligné sur la taille de page sous-jacente accordée par VirtualAlloc2 lorsque MEM_REPLACE_PLACEHOLDER est utilisé dans AllocationType.

[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 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 sections 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 à celles de l’espace réservé, et toute structure 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 à 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.

Les exigences d’alignement 64k sur décalage et BaseAddress ne s’appliquent pas lorsque cet indicateur est spécifié.

MEM_LARGE_PAGES
0x20000000
Mappe une grande vue de page. Cet indicateur spécifie que la vue doit être mappée à l’aide de prise en charge des grandes pages. La taille de la vue doit être un multiple de la taille d’une grande page signalée par la fonction GetLargePageMinimum, et l’objet de mappage de fichiers doit avoir été créé à l’aide de l’option SEC_LARGE_PAGES. Si vous fournissez une valeur non null pour le paramètre BaseAddress , la valeur doit être un multiple de GetLargePageMinimum.

Les exigences d’alignement 64k sur décalage ne s’appliquent pas lorsque cet indicateur est spécifié.

[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 n’importe quelle 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 étendues peut elle-même avoir un champ Type de MemExtendedParameterAddressRequirements ou MemExtendedParameterNumaNode. Si aucun paramètre étendu MemExtendedParameterNumaNode est fourni, le comportement est le même que pour les fonctions VirtualAlloc/MapViewOfFile (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 de retour

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

Remarques

Cette API permet de prendre en charge des jeux hautes performances et des applications serveur, qui ont des exigences particulières concernant la gestion de leur espace d’adressage virtuel. Par exemple, mapper 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 de grandes régions mappées à la page à la demande.

À l’aide de cette fonction pour les nouvelles allocations, vous pouvez :

  • 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écifier un nœud NUMA préféré pour la mémoire physique en tant que paramètre étendu
  • spécifiez une opération d’espace réservé (en particulier, remplacement).

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

Exemples

Pour obtenir un exemple de code, consultez le scénario 1 dans VirtualAlloc2.

Exigences

Exigence Valeur
client minimum pris en charge Windows 10, version 1803 [applications de bureau uniquement]
serveur minimum pris en charge Windows Server 2016 [applications de bureau uniquement]
plateforme cible Windows
d’en-tête memoryapi.h (include Windows.h)
bibliothèque onecore.lib
DLL Kernel32.dll

Voir aussi

VirtualAlloc2

MapViewOfFile

MapViewOfFile2

mapViewOfFileNuma2