MapViewOfFile3, fonction (memoryapi.h)
Mappe une vue d’un fichier ou d’une section sauvegardée par un fichier de page dans l’espace d’adressage du processus spécifié.
À 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 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
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.
Notes
Si ce paramètre a la valeur NULL, le système choisit l’adresse de base.
Si BaseAddress n’a pas la valeur NULL, tous les MEM_ADDRESS_REQUIREMENTS fournis doivent 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 |
---|---|
|
Mappe une vue réservée. |
|
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. Les exigences d’alignement de 64 000 sur Offset et BaseAddress ne s’appliquent pas lorsque cet indicateur est spécifié. |
|
Mappe une vue de page volumineuse. Cet indicateur spécifie que la vue doit être mappée à l’aide de la prise en charge des pages volumineuses. La taille de l’affichage 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. |
[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.
Exemples
Pour obtenir un exemple de code, consultez Scénario 1 dans VirtualAlloc2.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows 10, version 1803 [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 | onecore.lib |
DLL | Kernel32.dll |
Voir aussi
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour