Sdílet prostřednictvím


Přístup k systémové paměti Read-Only

Správce paměti systému Windows vynucuje přístup ke stránkám, které nejsou označené jako zapisovatelné, jen pro čtení.

Paměť jen pro čtení byla vždy chráněna v uživatelském režimu. V systému Windows NT 4.0 a starších verzích však nebyla paměť jen pro čtení chráněna v režimu jádra.

Pokud se ovladač nebo aplikace v režimu jádra Systému Windows pokusí zapisovat do segmentu paměti jen pro čtení, systém vydá kontrolu chyb. Další informace najdete v tématu Kontrola chybového kódu 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY.

Zachycení systémových volání

Některé ovladače zachycují systémová volání tím, že přepíší svůj vlastní kód a vloží instrukce pro skok nebo provedou jiné úpravy. Vzhledem k tomu, že vlastní kód ovladače je jen pro čtení, tato technika způsobí vydání kontroly chyb.

Globální řetězce

Pokud se má globální řetězec upravit, nesmí být deklarován jako ukazatel na konstantní hodnotu:

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

V tomto případě může linker vložit řetězec do segmentu paměti jen pro čtení. Pokus o úpravu řetězce pak způsobí kontrolu chyb.

Místo toho by měl být řetězec explicitně deklarován jako pole znaků typu L-value.

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

Tato deklarace zajišťuje, že je řetězec vložen do zapisovatelné paměti.