Share via


MapViewOfFile3FromApp-Funktion (memoryapi.h)

Ordnet eine Ansicht einer Dateizuordnung dem Adressraum einer aufrufenden Windows Store-App 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 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
);

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.

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

Wenn BaseAddress nicht NULL ist, muss jede bereitgestellte MEM_ADDRESS_REQUIREMENTS-Struktur 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
MEM_RESERVE
0x00002000
Ordnet eine reservierte Ansicht zu.
MEM_REPLACE_PLACEHOLDER
0x00004000
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.

MEM_LARGE_PAGES
0x20000000
Ordnet eine große Seitenansicht zu. Weitere Informationen finden Sie unter Unterstützung für große Seiten.

[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.

Bemerkungen

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.

Mit einer wichtigen Ausnahme sind Dateiansichten, die von einem Dateizuordnungsobjekt abgeleitet werden, das von derselben Datei unterstützt wird, kohärent oder zu einem bestimmten Zeitpunkt identisch. Die Kohärenz wird für Ansichten innerhalb eines Prozesses und für Sichten garantiert, die von verschiedenen Prozessen zugeordnet werden.

Die Ausnahme bezieht sich auf Remotedateien. MapViewOfFile3FromApp funktioniert zwar mit Remotedateien, hält sie jedoch nicht kohärent. Wenn z. B. zwei Computer eine Datei als schreibbar zuordnen und beide dieselbe Seite ändern, sieht jeder Computer nur seine eigenen Schreibvorgänge auf der Seite. Wenn die Daten auf dem Datenträger aktualisiert werden, werden sie nicht zusammengeführt.

Sie können nur erfolgreich schutz vor ausführbaren Dateien anfordern, wenn Ihre App über die funktion codeGeneration verfügt .

Beispiele

Ein Codebeispiel finden Sie unter Szenario 1 in Virtual2Alloc.

Anforderungen

   
Unterstützte Mindestversion (Client) Windows 10 [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2016 [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile memoryapi.h (windows.h einschließen)
Bibliothek WindowsApp.lib
DLL Kernel32.dll

Siehe auch

CreateFileMapping

Erstellen einer Dateiansicht

DuplicateHandle

GetSystemInfo

MapViewOfFile3

MapViewOfFileEx

Speicherverwaltungsfunktionen

OpenFileMapping

SYSTEM_INFO

UnmapViewOfFile