Freigeben über


Zugreifen auf Read-Only Systemspeicher

Der Windows-Speicher-Manager erzwingt schreibgeschützten Zugriff auf Seiten, die nicht als schreibbar markiert sind.

Schreibgeschützter Arbeitsspeicher war immer im Benutzermodus geschützt. In Windows NT 4.0 und früheren Versionen war der schreibgeschützte Arbeitsspeicher jedoch im Kernelmodus nicht geschützt.

Wenn ein Windows-Kernelmodustreiber oder eine Anwendung versucht, in ein schreibgeschütztes Speichersegment zu schreiben, gibt das System eine Fehlerüberprüfung aus. Weitere Informationen finden Sie unter Fehlerüberprüfung 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY.

Abfangen von Systemaufrufen

Einige Treiber fangen Systemaufrufe ab, indem sie den eigenen Code des Treibers überschreiben und Sprunganweisungen oder andere Änderungen einfügen. Da der eigene Code des Treibers schreibgeschützt ist, führt diese Technik zu einer Fehlerüberprüfung.

Globale Zeichenfolgen

Wenn eine globale Zeichenfolge geändert werden soll, darf sie nicht als Zeiger auf einen konstanten Wert deklariert werden:

CHAR *myString = "This string cannot be modified.";

In diesem Fall kann der Linker die Zeichenfolge in ein schreibgeschütztes Speichersegment einfügen. Dann führt ein Versuch, die Zeichenfolge zu ändern, zu einer Fehlerüberprüfung.

Stattdessen sollte die Zeichenfolge explizit als Array von L-Wert-Zeichen deklariert werden:

CHAR myString[] = "This string can be modified.";

Diese Deklaration stellt sicher, dass die Zeichenfolge in beschreibbaren Arbeitsspeicher abgelegt wird.