Compartilhar via


Acessando Read-Only memória do sistema

O gerenciador de memória do Windows impõe o acesso somente leitura de páginas que não estão marcadas como graváveis.

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

Se um driver ou aplicativo do modo kernel do Windows tentar gravar em um segmento de memória somente leitura, o sistema emitirá um bug marcar. Para obter mais informações, consulte 0xBE de Verificação de Bugs: ATTEMPTED_WRITE_TO_READONLY_MEMORY.

Interceptando chamadas do sistema

Alguns drivers interceptam 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 um bug marcar seja emitido.

Cadeias de caracteres 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 vinculador pode colocar a cadeia de caracteres em um segmento de memória somente leitura. Em seguida, uma tentativa de modificar a cadeia de caracteres resultará em um bug marcar.

Em vez disso, a cadeia de caracteres deve ser declarada explicitamente 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 em memória gravável.