WinXP 32 ビットの DDK (かなり古いバージョン: 3590) で (可能性のある) 問題に直面しています。私のドライバーには、初期化されていないいくつかの静的変数 (.bss セクションに割り当てられるべきだと思います) と、ページング可能なコード セクション (#pragma alloc_page(PAGE, func) でマークされている) 内のいくつかの関数が含まれています。ページング可能なコードは、別のオブジェクト ファイルに収集されます。リンカがスタティック コードとページング可能なコードをカーネル アドレス空間の同じページに割り当てているように見えることを発見しました (つまり、変数は 0xEFFCB0A0 にあり、関数は 0xEFFCB600 にあります - windbg で検証済み)。静的変数は割り込み環境で使用されるため、それらのページはメモリ内でロックする必要があります。しかし、同じページにスワップ可能なコードが含まれている場合、変数が突然消えるのではないかと心配しています。リンカー」
リンカー/ローダーにページング可能なコードに別のページを割り当てるように強制するにはどうすればよいですか? セクションの配置属性を強制する「#pragma」はありますか? 私は何か間違ったことをしていますか?
PS: ドライバー ローダーは、変数とコードの両方を含むページをページ プールから除外するのに十分スマートですが、ページには変数が含まれているため、書き込み可能である必要があります。実行可能コードが読み取り専用ページにあることを望みます。カーネル モードでの間違った配列アクセスは、デバッグが非常に困難です...
PPS: 関数の前後に 4096 の "nop" を追加しました... OK、動作します... 提案するより良いものはありませんか?