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
Die folgenden Konstanten sind nur für Apps zulässig, die über die CodeGeneration-Funktion verfügen:
  • 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

Siehe auch

Speicherverwaltungsfunktionen

Funktionen des virtuellen Speichers

VirtualAllocFromApp

VirtualProtect

VirtualProtectEx