Partilhar via


Aceder à memória do sistema somente de leitura

O gestor de memória do Windows impõe o acesso apenas leitura a páginas que não estão marcadas como de escrita.

A memória somente leitura sempre esteve protegida no modo de utilizador. No entanto, no Windows NT 4.0 e versões anteriores, a memória somente leitura não foi protegida no modo kernel.

Se um driver ou aplicação de modo kernel do Windows tentar gravar em um segmento de memória apenas de leitura, o sistema emitirá uma verificação de erro. Para obter mais informações, consulte Bug Check 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY.

Intercepção de Chamadas de Sistema

Alguns drivers intercetam chamadas do sistema, substituindo o próprio código do driver e inserindo instruções de salto ou outras alterações. Como o próprio código do driver é somente leitura, essa técnica fará com que uma verificação de bug seja emitida.

Strings globais

Se uma cadeia de caracteres global deve ser modificada, ela não deve ser declarada como um ponteiro para um valor constante:

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

Nesse caso, o ligador pode colocar a string em um segmento de memória de leitura apenas. Em seguida, uma tentativa de modificar a string resultará em uma verificação de bug.

Em vez disso, a cadeia de caracteres deve ser explicitamente declarada como uma matriz de caracteres de valor L:

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

Essa declaração garante que a cadeia de caracteres seja colocada na memória gravável.