Freigeben über


ZwMapViewOfSection-Funktion (wdm.h)

Die ZwMapViewOfSection-Routine ordnet eine Ansicht eines Abschnitts dem virtuellen Adressraum eines Betreffprozesses zu.

Syntax

NTSYSAPI NTSTATUS ZwMapViewOfSection(
  [in]                HANDLE          SectionHandle,
  [in]                HANDLE          ProcessHandle,
  [in, out]           PVOID           *BaseAddress,
  [in]                ULONG_PTR       ZeroBits,
  [in]                SIZE_T          CommitSize,
  [in, out, optional] PLARGE_INTEGER  SectionOffset,
  [in, out]           PSIZE_T         ViewSize,
  [in]                SECTION_INHERIT InheritDisposition,
  [in]                ULONG           AllocationType,
  [in]                ULONG           Win32Protect
);

Parameter

[in] SectionHandle

Handle für ein Abschnittsobjekt. Dieses Handle wird durch einen erfolgreichen Aufruf von ZwCreateSection oder ZwOpenSection erstellt.

[in] ProcessHandle

Handle für das -Objekt, das den Prozess darstellt, dem die Ansicht zugeordnet werden soll. Verwenden Sie das Makro ZwCurrentProcess , um den aktuellen Prozess anzugeben. Das Handle muss mit PROCESS_VM_OPERATION Zugriff geöffnet worden sein.

[in, out] BaseAddress

Zeiger auf eine Variable, die die Basisadresse der Ansicht empfängt. Wenn der Wert dieses Parameters nicht NULL ist, wird die Ansicht ab der angegebenen virtuellen Adresse zugeordnet, gerundet auf die nächste Adressgrenze von 64 Kilobyte.

[in] ZeroBits

Gibt die Anzahl von Adressbits hoher Reihenfolge an, die in der Basisadresse der Abschnittsansicht null sein müssen. Der Wert dieses Parameters darf kleiner als 21 sein und wird nur verwendet, wenn BaseAddressNULL ist, d. h. wenn der Aufrufer dem System erlaubt, zu bestimmen, wo die Ansicht zugeordnet werden soll.

[in] CommitSize

Gibt die Größe des anfänglich committeten Bereichs der Ansicht in Bytes an. CommitSize ist nur für auf Seitendateien gesicherte Abschnitte sinnvoll und wird auf das nächste Vielfache PAGE_SIZE aufgerundet. (Für Abschnitte, in denen Dateien zugeordnet werden, werden sowohl die Daten als auch das Bild zum Zeitpunkt der Abschnittserstellung committet.)

[in, out, optional] SectionOffset

Ein Zeiger auf eine Variable, die den Offset in Bytes vom Anfang des Abschnitts bis zur Ansicht empfängt. Wenn dieser Zeiger nicht NULL ist, wird der Offset auf die nächste Größengrenze der Zuordnungsgranularität gerundet.

[in, out] ViewSize

Ein Zeiger auf eine SIZE_T Variable. Wenn der Anfangswert dieser Variablen null ist, ordnet ZwMapViewOfSection eine Ansicht des Abschnitts zu, der bei SectionOffset beginnt und bis zum Ende des Abschnitts fortgesetzt wird. Andernfalls gibt der Anfangswert die Größe der Ansicht in Bytes an. ZwMapViewOfSection rundet diesen Wert immer auf das nächste Vielfache von PAGE_SIZE auf, bevor die Ansicht zugeordnet wird.

Bei der Rückgabe empfängt der Wert die tatsächliche Größe der Ansicht in Byte.

[in] InheritDisposition

Gibt an, wie die Ansicht für untergeordnete Prozesse freigegeben werden soll. Mögliche Werte:

ViewShare

Die Ansicht wird allen untergeordneten Prozessen zugeordnet, die in Zukunft erstellt werden.

ViewUnmap

Die Ansicht wird nicht untergeordneten Prozessen zugeordnet.

Treiber sollten in der Regel ViewUnmap für diesen Parameter angeben.

[in] AllocationType

Gibt einen Satz von Flags an, der den Typ der Zuordnung beschreibt, die für den angegebenen Bereich von Seiten ausgeführt werden soll. Gültige Flags sind MEM_RESERVE, MEM_TOP_DOWN, MEM_LARGE_PAGES, MEM_DIFFERENT_IMAGE_BASE_OK und MEM_REPLACE_PLACEHOLDER. Obwohl MEM_COMMIT nicht zulässig ist, ist dies impliziert, es sei denn, MEM_RESERVE angegeben ist. Weitere Informationen zu den MEM_XXX-Flags finden Sie in der Beschreibung der Routinen VirtualAlloc und MapViewOfFile3 .

[in] Win32Protect

Gibt den Seitenschutz an, der auf die zugeordnete Ansicht angewendet werden soll.

Bei Abschnittsobjekten, die mit dem attribut SEC_IMAGE erstellt wurden, hat der Win32Protect-Parameter keine Auswirkung und kann auf einen beliebigen gültigen Wert wie PAGE_READONLY festgelegt werden.

Bei Abschnittsobjekten, die mit dem attribut SEC_IMAGE_NO_EXECUTE erstellt wurden, muss der Win32Protect-Wert auf PAGE_READONLY festgelegt werden.

Für Nicht-Image-Abschnitte muss der Wert des Win32Protect-Parameters mit dem Seitenschutz des Abschnitts kompatibel sein, der beim Aufruf von ZwCreateSection angegeben wurde.

ZwMapViewOfSection legt den Cachetyp der zugeordneten Seiten so fest, dass er dem Cachetyp entspricht, der beim Erstellen des Abschnittsobjekts angegeben wurde. Wenn z. B. ZwCreateSection mit dem flag SEC_NOCACHE aufgerufen wurde, ordnet ZwMapViewOfSection die nicht zwischengespeicherten Seiten zu, unabhängig davon, ob der Win32Protect-Parameter das flag PAGE_NOCACHE enthält oder nicht.

Rückgabewert

ZwMapViewOfSection gibt einen NTSTATUS-Wert zurück. Folgende Rückgabewerte sind möglich:

Rückgabecode Beschreibung
STATUS_SUCCESS Die Routine hat den angeforderten Vorgang erfolgreich ausgeführt.
STATUS_CONFLICTING_ADDRESSES Der angegebene Adressbereich steht in Konflikt mit einem Bereich, der bereits reserviert ist.
STATUS_INVALID_PAGE_PROTECTION Der für den Win32Protect-Parameter angegebene Wert ist ungültig.
STATUS_SECTION_PROTECTION Der für den Win32Protect-Parameter angegebene Wert ist nicht mit dem Seitenschutz kompatibel, der beim Erstellen des Abschnitts angegeben wurde.

Hinweise

Mehrere verschiedene Ansichten eines Abschnitts können gleichzeitig dem virtuellen Adressraum eines oder mehrerer Prozesse zugeordnet werden.

Verwenden Sie ZwMapViewOfSection nicht, um einen Speicherbereich von \Device\PhysicalMemory dem Benutzermodus zuzuordnen, es sei denn, Ihr Treiber hat den Speicherbereich direkt über MmAllocatePagesForMdlEx oder eine andere Methode zugeordnet, die garantiert, dass keine andere Systemkomponente denselben Speicherbereich mit einem anderen MEMORY_CACHING_TYPE Wert zugeordnet hat.

Benutzeranwendungen können ab Windows Server 2003 mit Service Pack 1 (SP1) nicht direkt auf \Device\PhysicalMemory zugreifen und können nur darauf zugreifen, wenn der Treiber ein Handle an die Anwendung übergibt.

Weitere Informationen zu Abschnittsobjekten finden Sie unter Abschnittsobjekte und Sichten.

Wenn der Aufruf dieser Funktion im Benutzermodus erfolgt, sollten Sie den Namen "NtMapViewOfSection" anstelle von "ZwMapViewOfSection" verwenden.

Bei Aufrufen von Kernelmodustreibern können sich die NtXxx - und ZwXxx-Versionen einer Windows Native System Services-Routine anders verhalten, wie sie Eingabeparameter verarbeiten und interpretieren. Weitere Informationen zur Beziehung zwischen den Nt Xxx- und ZwXxx-Versionen einer Routine finden Sie unter Verwenden von Nt- und Zw-Versionen der systemeigenen Systemdienstroutinen.

Anforderungen

Anforderung Wert
Zielplattform Universell
Header wdm.h (einschließlich Wdm.h, Ntddk.h, Ntifs.h)
Bibliothek NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
DDI-Complianceregeln HwStorPortProhibitedDIs(storport), PowerIrpDDis(wdm)

Weitere Informationen

Verwenden von Nt- und Zw-Versionen der Systemdienstroutinen

ZwCreateSection

ZwOpenSection

ZwMapViewOfSectionEx

ZwUnmapViewOfSection

MapViewOfFile3