読み取り専用システム メモリへのアクセス

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.";

この宣言により、文字列が書き込み可能なメモリに格納されます。