Бөлісу құралы:


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

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

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

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

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

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

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

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

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

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

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

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

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