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