Freigeben über


VirtualProtect-Funktion (memoryapi.h)

Ändert den Schutz für eine Region mit committeten Seiten im virtuellen Adressraum des aufrufenden Prozesses.

Verwenden Sie die VirtualProtectEx-Funktion , um den Zugriffsschutz eines beliebigen Prozesses zu ändern.

Syntax

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

Parameter

[in] lpAddress

Die Adresse der Startseite 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 sollen. 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 Zugriffsschutzwert 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

Sie können den Zugriffsschutzwert nur auf committeten Seiten festlegen. 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 VirtualProtect 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

   
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

VirtualProtectEx

In VBS-Enclaves verfügbare Vertdll-APIs