Cでプログラムを作成してWindowsで実行する場合、Win APIには、プログラムが特定のメモリブロックにアクセスできるかどうかを指示するものがありますか?プログラムに必要なメモリブロックにアクセスさせたい場合、無効にする必要があるものはありますか?これは危険であり、オペレーティングシステムに損傷を与える可能性があることを認識しています。
3 に答える
最新のWindows(NTカーネルを搭載したWindows)では、オペレーティングシステムがメモリへのアクセス方法を制御します。したがって、答えは次のとおりです。それについてあなたができることは何もありません。プロセスに必要なメモリブロックにアクセスさせることはできません。
Win 3.0、Win 3.11、Win 95、Win 98、WinMEでそれを行うことができたはずです。
はい、それは仮想メモリページを割り当てる低レベル関数であるVirtualAlloc()で可能です。flProtect引数は、プロセスがメモリにアクセスする方法を指定します。PAGE_NOACCESSを指定することは可能ですが、正確にはあまり使用されません。
実際にRAMについて話している場合は、いいえ。ユーザーモードプログラムは、Windowsなどのプロテクトモードオペレーティングシステムの物理メモリに直接アクセスすることはできません。仮想メモリのみをアドレス指定でき、RAMへのマッピングはOSカーネルによって実行されます。リング0で実行されるコードのみが機能を備えています。特定の物理アドレスへのアクセスを拒否することは、メモリマップドI/Oデバイスに対してのみ意味があります。アドレス空間を予約するドライバーがすでにあるはずです。
カーネルメモリにアクセスできない/アクセスしない/アクセスしないでください。カーネルモードを除く最新のオペレーティングシステムでは、これらのメモリ領域からの割り当ては許可されていません。