Доступ к системной памяти Read-Only

Диспетчер памяти Windows обеспечивает доступ только для чтения к страницам, которые не помечены как доступные для записи.

Память только для чтения всегда была защищена в пользовательском режиме. Однако в Windows NT 4.0 и более ранних версиях память только для чтения не была защищена в режиме ядра.

Если драйвер или приложение в режиме ядра Windows пытается выполнить запись в сегмент памяти, доступный только для чтения, система выдает ошибку проверка. Дополнительные сведения см. в разделе Проверка ошибок 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY.

Перехват системных вызовов

Некоторые драйверы перехватывают системные вызовы, перезаписав собственный код драйвера и вставляя инструкции перехода или другие изменения. Так как собственный код драйвера доступен только для чтения, этот метод вызовет ошибку проверка.

Глобальные строки

Если глобальная строка должна быть изменена, ее не следует объявлять как указатель на значение константы:

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

В этом случае компоновщик может поместить строку в сегмент памяти, доступный только для чтения. Попытка изменить строку приведет к проверка ошибок.

Вместо этого строка должна быть явно объявлена как массив символов L-значения:

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

Это объявление гарантирует, что строка помещается в записываемую память.