MapViewOfFile3-Funktion (memoryapi.h)
Ordnet eine Ansicht einer Datei oder eines Auslagerungsabschnitts dem Adressraum des angegebenen Prozesses zu.
Mit dieser Funktion können Sie für neue Zuordnungen einen Bereich des virtuellen Adressraums und eine Power-of-2-Ausrichtungseinschränkung angeben. geben Sie eine beliebige Anzahl erweiterter Parameter an; geben Sie einen bevorzugten NUMA-Knoten für den physischen Speicher als erweiterten Parameter an; und geben einen Platzhaltervorgang an (insbesondere ersetzung).
Informationen zum Angeben des NUMA-Knotens finden Sie im ExtendedParameters-Parameter .
Syntax
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
);
Parameter
[in] FileMapping
Ein HANDLE für einen Abschnitt, der dem Adressraum des angegebenen Prozesses zugeordnet werden soll.
[in] Process
Ein HANDLE zu einem Prozess, dem der Abschnitt zugeordnet wird.
[in, optional] BaseAddress
Die gewünschte Basisadresse der Ansicht. Die Adresse wird auf die nächste 64k-Grenze gerundet.
Hinweis
Wenn dieser Parameter NULL ist, wählt das System die Basisadresse aus.
Wenn BaseAddress nicht NULL ist, müssen alle bereitgestellten MEM_ADDRESS_REQUIREMENTS aus allen Nullen bestehen.
[in] Offset
Der Offset vom Anfang des Abschnitts. Dies muss 64.000 sein.
[in] ViewSize
Die Anzahl der zuzuordnenden Bytes. Der Wert null (0) gibt an, dass der gesamte Abschnitt zugeordnet werden soll.
Die Größe muss immer ein Vielfaches der Seitengröße sein.
[in] AllocationType
Der Typ der Speicherbelegung. Dieser Parameter kann null (0) oder einer der folgenden Werte sein.
Wert | Bedeutung |
---|---|
|
Ordnet eine reservierte Ansicht zu. |
|
Ersetzt einen Platzhalter durch eine zugeordnete Ansicht. Es werden nur daten-/pf-gesicherte Abschnittsansichten unterstützt (keine Bilder, physischer Arbeitsspeicher usw.). Wenn Sie einen Platzhalter ersetzen, müssen BaseAddress und ViewSize genau mit denen des Platzhalters übereinstimmen, und alle bereitgestellten MEM_ADDRESS_REQUIREMENTS-Struktur müssen aus allen Nullen bestehen.
Nachdem Sie einen Platzhalter durch eine zugeordnete Ansicht ersetzt haben, sehen Sie sich den UnmapFlags-Parameter von UnmapViewOfFileEx und UnmapViewOfFile2 an, um diese zugeordnete Ansicht wieder einem Platzhalter zu übergeben. Ein Platzhalter ist ein Typ des reservierten Speicherbereichs. Die 64.000-Ausrichtungsanforderungen für Offset und BaseAddress gelten nicht, wenn dieses Flag angegeben wird. |
|
Ordnet eine große Seitenansicht zu. Dieses Flag gibt an, dass die Ansicht mithilfe von Unterstützung für große Seiten zugeordnet werden soll. Die Größe der Ansicht muss ein Vielfaches der Größe einer großen Seite sein, die von der GetLargePageMinimum-Funktion gemeldet wird, und das Dateizuordnungsobjekt muss mit der Option SEC_LARGE_PAGES erstellt worden sein. Wenn Sie einen Wert ungleich NULL für den BaseAddress-Parameter angeben, muss der Wert ein Vielfaches von GetLargePageMinimum sein. |
[in] PageProtection
Der gewünschte Seitenschutz.
Bei Dateizuordnungsobjekten, die mit dem attribut SEC_IMAGE erstellt wurden, hat der PageProtection-Parameter keine Auswirkung und sollte auf einen gültigen Wert wie PAGE_READONLY festgelegt werden.
[in, out, optional] ExtendedParameters
Ein optionaler Zeiger auf einen oder mehrere erweiterte Parameter vom Typ MEM_EXTENDED_PARAMETER. Jeder dieser erweiterten Parameterwerte kann selbst über ein Type-Feld von MemExtendedParameterAddressRequirements oder MemExtendedParameterNumaNode verfügen. Wenn kein erweiterter MemExtendedParameterNumaNode-Parameter bereitgestellt wird, ist das Verhalten dasselbe wie für die VirtualAlloc/MapViewOfFile-Funktionen (d. a. der bevorzugte NUMA-Knoten für die physischen Seiten wird basierend auf dem idealen Prozessor des Threads bestimmt, der zuerst auf den Arbeitsspeicher zugreift).
[in] ParameterCount
Die Anzahl der erweiterten Parameter, auf die von ExtendedParameters verwiesen wird.
Rückgabewert
Gibt bei erfolgreicher Ausführung die Basisadresse der zugeordneten Ansicht zurück. Andernfalls gibt NULL und erweiterter Fehler zurück, status mit GetLastError verfügbar ist.
Hinweise
Diese API unterstützt Hochleistungsspiele und Serveranwendungen, die besondere Anforderungen an die Verwaltung ihres virtuellen Adressraums haben. Beispiel: Zuordnen des Arbeitsspeichers auf einer zuvor reservierten Region; Dies ist nützlich, um einen automatisch umschließenden Ringpuffer zu implementieren. Und Zuweisung von Arbeitsspeicher mit einer bestimmten Ausrichtung; beispielsweise, um Ihrer Anwendung zu ermöglichen, große/große seitenabbildete Regionen bei Bedarf zu committen.
Beispiele
Ein Codebeispiel finden Sie unter Szenario 1 in VirtualAlloc2.
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Windows 10, Version 1803 [nur Desktop-Apps] |
Unterstützte Mindestversion (Server) | Windows Server 2016 [nur Desktop-Apps] |
Zielplattform | Windows |
Kopfzeile | memoryapi.h (windows.h einschließen) |
Bibliothek | onecore.lib |
DLL | Kernel32.dll |
Siehe auch
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für