VirtualProtectFromApp-Funktion (memoryapi.h)
Ändert den Schutz für eine Region mit verpflichteten Seiten im virtuellen Adressraum des aufrufenden Prozesses.
Syntax
BOOL VirtualProtectFromApp(
[in] PVOID Address,
[in] SIZE_T Size,
[in] ULONG NewProtection,
[out] PULONG OldProtection
);
Parameter
[in] Address
Ein Zeiger eine Adresse, die die Startseite des Bereichs von Seiten beschreibt, deren Zugriffsschutzattribute geändert werden sollen.
Alle Seiten in der angegebenen Region müssen sich innerhalb derselben reservierten Region befinden, die beim Aufrufen der Funktion VirtualAlloc, VirtualAllocFromApp oder VirtualAllocEx mit MEM_RESERVE zugewiesen ist. Die Seiten können keine angrenzenden reservierten Regionen umfassen, die durch separate Aufrufe von VirtualAlloc, VirtualAllocFromApp oder VirtualAllocEx mithilfe von MEM_RESERVE zugewiesen wurden.
[in] Size
Die Größe der Region, deren Zugriffsschutzattribute geändert werden sollen, in Bytes. Der Bereich der betroffenen Seiten umfasst alle Seiten, die mindestens ein Bytes im Bereich vom Parameter Address bis zu (Address+Size)
enthalten. Dies bedeutet, dass ein 2-Byte-Bereich, der eine Seitengrenze überspannt, dazu führt, dass die Schutzattribute beider Seiten geändert werden.
[in] NewProtection
Die Speicherschutzoption. Dieser Parameter kann eine der Speicherschutzkonstanten sein.
Für zugeordnete Ansichten muss dieser Wert mit dem Zugriffsschutz kompatibel sein, der bei der Zuordnung der Ansicht angegeben wurde (siehe MapViewOfFile, MapViewOfFileEx und MapViewOfFileExNuma).
Die folgenden Konstanten generieren einen Fehler:
- PAGE_EXECUTE_READWRITE
- PAGE_EXECUTE_WRITECOPY
- PAGE_EXECUTE
- PAGE_EXECUTE_READ
[out] OldProtection
Ein Zeiger auf eine Variable, die den vorherigen Zugriffsschutzwert der ersten Seite im angegebenen Bereich der 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 VirtualProtectFromApp über Windows Store-Apps mit Just-in-Time-Funktionen (JIT) aufrufen, um JIT-Funktionen zu verwenden. Die App muss die CodeGeneration-Funktion in der App-Manifestdatei enthalten, um JIT-Funktionen verwenden zu können.
Sie können den Zugriffsschutzwert nur auf gebundenen 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 richtet Schutzseiten ein. Schutzseiten fungieren als Einmalige Zugriffsalarme. Weitere Informationen finden Sie unter dem Link zum Erstellen von Schutzseiten.
Es empfiehlt sich, die Verwendung von VirtualProtectFromApp zum Ändern des Seitenschutzes für Speicherblöcke zu vermeiden, die von GlobalAlloc, HeapAlloc oder LocalAlloc zugewiesen wurden, 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.
Mit VirtualProtectFromApp können Sie Seiten als ausführbare Dateien markieren, aber sie können nicht gleichzeitig Schreib- und Ausführungsberechtigungen festlegen.
Beim Schützen einer ausführbaren Region trägt das aufrufende Programm die Verantwortung für die Sicherstellung der Cachekohärenz über einen entsprechenden Aufruf von FlushInstructionCache , sobald der Code festgelegt wurde. Andernfalls können Versuche, Code aus der neu ausführbaren Region auszuführen, zu unvorhersehbaren Ergebnissen führen.
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Windows 10 [Desktop-Apps | UWP-Apps] |
Unterstützte Mindestversion (Server) | Windows Server 2016 [Desktop-Apps | UWP-Apps] |
Zielplattform | Windows |
Kopfzeile | memoryapi.h (einschließlich Windows.h) |
Bibliothek | WindowsApp.lib |
DLL | Kernel32.dll |