VirtualProtectEx-Funktion (memoryapi.h)

Ändert den Schutz für einen Bereich mit committeten Seiten im virtuellen Adressraum eines angegebenen Prozesses.

Syntax

BOOL VirtualProtectEx(
  [in]  HANDLE hProcess,
  [in]  LPVOID lpAddress,
  [in]  SIZE_T dwSize,
  [in]  DWORD  flNewProtect,
  [out] PDWORD lpflOldProtect
);

Parameter

[in] hProcess

Ein Handle für den Prozess, dessen Speicherschutz geändert werden soll. Das Handle muss über das zugriffsrecht PROCESS_VM_OPERATION verfügen. Weitere Informationen finden Sie unter Prozesssicherheit und Zugriffsrechte.

[in] lpAddress

Ein Zeiger auf die Basisadresse des Bereichs von Seiten, deren Zugriffsschutzattribute geändert werden sollen.

Alle Seiten in der angegebenen Region müssen sich innerhalb derselben reservierten Region befinden, die beim Aufrufen der VirtualAlloc - oder VirtualAllocEx-Funktion mithilfe von MEM_RESERVE zugeordnet ist. Die Seiten können sich nicht über angrenzende reservierte Regionen erstrecken, die durch separate Aufrufe von VirtualAlloc oder VirtualAllocEx mithilfe von MEM_RESERVE zugeordnet wurden.

[in] dwSize

Die Größe der Region, deren Zugriffsschutzattribute in Bytes geändert werden. Der Bereich der betroffenen Seiten enthält alle Seiten, die ein oder mehrere Bytes im Bereich vom lpAddress-Parameter bis zu (lpAddress+dwSize)enthalten sind. Dies bedeutet, dass ein 2-Byte-Bereich, der eine Seitengrenze überspannt, dazu führt, dass die Schutzattribute beider Seiten geändert werden.

[in] flNewProtect

Die Speicherschutzoption. Dieser Parameter kann eine der Speicherschutzkonstanten sein.

Für zugeordnete Ansichten muss dieser Wert mit dem Zugriffsschutz kompatibel sein, der beim Mappen der Ansicht angegeben wurde (siehe MapViewOfFile, MapViewOfFileEx und MapViewOfFileExNuma).

[out] lpflOldProtect

Ein Zeiger auf eine Variable, die den vorherigen Zugriffsschutz der ersten Seite im angegebenen Bereich von Seiten empfängt. Wenn dieser Parameter NULL ist oder nicht auf eine gültige Variable verweist, schlägt die Funktion fehl.

Rückgabewert

Wenn die Funktion erfolgreich ist, ist der Rückgabewert ungleich Null.

Wenn die Funktion fehlerhaft ist, ist der Rückgabewert null. Um erweiterte Fehlerinformationen zu erhalten, rufen Sie GetLastError auf.

Hinweise

Der Zugriffsschutzwert kann nur auf committeten Seiten festgelegt werden. Wenn der Status einer Seite in der angegebenen Region nicht committet wird, schlägt die Funktion fehl und gibt zurück, ohne den Zugriffsschutz von Seiten in der angegebenen Region zu ändern.

Der PAGE_GUARD Schutzmodifizierer erstellt Schutzseiten. Schutzseiten fungieren als einmalige Zugriffsalarme. Weitere Informationen finden Sie unter dem Link zum Erstellen von Schutzseiten.

Es empfiehlt sich, die Verwendung von VirtualProtectEx zu vermeiden, um Seitenschutz für Speicherblöcke zu ändern, die von GlobalAlloc, HeapAlloc oder LocalAlloc zugewiesen werden, da mehrere Speicherblöcke auf einer einzelnen Seite vorhanden sein können. Der Heap-Manager geht davon aus, dass alle Seiten im Heap mindestens Lese- und Schreibzugriff gewähren.

Beim Schutz einer region, die ausführbar ist, trägt das aufrufende Programm die Verantwortung für die Sicherstellung der Cachekohärenz über einen entsprechenden Aufruf von FlushInstructionCache , nachdem der Code festgelegt wurde. Andernfalls können Versuche, Code aus dem neu ausführbaren Bereich auszuführen, zu unvorhersehbaren Ergebnissen führen.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows XP [Desktop-Apps | UWP-Apps]
Unterstützte Mindestversion (Server) Windows Server 2003 [Desktop-Apps | UWP-Apps]
Zielplattform Windows
Kopfzeile memoryapi.h (einschließlich Windows.h, Memoryapi.h)
Bibliothek onecore.lib
DLL Kernel32.dll

Siehe auch

Speicherverwaltungsfunktionen

Speicherschutzkonstanten

Funktionen des virtuellen Speichers

VirtualAlloc

VirtualProtect

VirtualQueryEx