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. Die gültigen Flags sind MEM_LARGE_PAGES, MEM_RESERVE und MEM_TOP_DOWN. 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 VirtualAlloc-Routine .

[in] Win32Protect

Gibt den Schutztyp für den Bereich der anfänglich committeten Seiten an. Geräte- und Zwischentreiber sollten diesen Wert auf PAGE_READWRITE festlegen.

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 ist mit einem bereits reservierten Adressbereich in Konflikt, oder der angegebene Cacheattributetyp ist mit dem vorhandenen Cache-Attribut des Adressbereichs in Konflikt. Wenn sich der zugeordnete Arbeitsspeicher beispielsweise auf einer großen Seite befindet, die bereits als vollständig zwischengespeichert zugeordnet ist, ist es unzulässig, diesen Speicher als nicht zwischengespeichert oder kombiniert zuzuordnen.
STATUS_INVALID_PAGE_PROTECTION Der für den Protect-Parameter angegebene Wert ist ungültig.
STATUS_SECTION_PROTECTION Der für den AllocationType-Parameter angegebene Wert ist nicht mit dem Schutztyp 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.

Wenn der angegebene Abschnitt nicht vorhanden ist oder der angeforderte Zugriff nicht zulässig ist, gibt ZwMapViewOfSection einen Fehler zurück.

Verwenden Sie ZwMapViewOfSection nicht, um einen Speicherbereich von \Device\PhysicalMemory dem Benutzermodus zuzuordnen– es sei denn, Ihr Treiber hat den Speicherbereich direkt über MmAllocatePagesForMdl 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

MEMORY_CACHING_TYPE

MmAllocatePagesForMdl

Verwenden von Nt- und Zw-Versionen der Systemdienstroutinen

VirtualAlloc

ZwCurrentProcess

ZwOpenSection

ZwUnmapViewOfSection