No-Execute (NX) の非ページ プール
ベスト プラクティスとして、Windows 8 以降の Windows のドライバーでは、No-Execute (NX) 非ページ プールから非ページ メモリの大部分またはすべてを割り当てるようにします。 カーネル モード ドライバーは、NX 非ページ プールからメモリを割り当てることにより、悪意のあるソフトウェアがこのメモリで命令を実行できないようにしてセキュリティの向上を図ります。
Windows 8 以降では、カーネル モード ドライバーは NX 非ページ メモリのプールからメモリを割り当てることができます。 このプールは、ユーザー モードの Win32 ヒープ アロケーターと同様に動作する汎用のカーネル モード メモリ アロケーターによって管理されています。 このプールのメモリは NX であり、非ページです。 x86、x64、および Arm の各プロセッサ アーキテクチャを使用すると、メモリ ページを NX として指定し、そのページで命令が実行できないようにすることができます。 多くの場合、カーネル モード ドライバーは、非ページ プールから割り当てられたメモリを使用してデータを格納することから、このメモリで命令を実行する必要がありません。
レガシ ドライバーのサポート
Windows 7 以前の Windows では、非ページ プールから割り当てたすべてのメモリで命令を実行できます。 Windows 8 以降の Windows で NX 非ページ プールが使用されるように、これらのドライバーの積極的な移植を進めるために、Microsoft では、最小限の作業でドライバーを更新できるようにするオプトイン メカニズムをいくつか用意しています。 詳細については「NX プールのオプトイン メカニズム」を参照してください。
下位互換性を確保するために、Windows 7 以前の Windows で実行され、実行可能な非ページ プールからメモリを割り当てるドライバー バイナリは、Windows 8 以降の Windows でも変更なしで実行されます。 ただし、これらのドライバーでは、NX 非ページ プールによるセキュリティ向上の利点を生かすことができません。