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 |