プールの種類 (NX と Execute)

非ページ プールから割り当てるメモリを実行不可 (NX) にするかどうかを指定するために、Windows 8 以降で用意されている 2 種類の新しいプールを使用できます。 これらのプールの種類を指定するには、次の値を POOL_TYPE 列挙に設定します。

NonPagedPoolNx
NX 非ページ プール。 このプールから割り当てたメモリでは命令を実行できません。

NonPagedPoolExecute
実行可能な非ページ プール。 このプールから割り当てたメモリでは命令を実行できます。

ほとんどのドライバーは、割り当てられたメモリにデータを格納するだけで、そこで命令を実行することはありません。 Windows 8 以降の Windows で実行するドライバーをビルドする場合は、可能な限り NX 非ページ プールから NonPagedPoolNx メモリを割り当てます。 非ページ メモリから命令を実行する必要があるドライバーに限り、実行可能な非ページ プールから NonPagedPoolExecute メモリを割り当てる必要があります。

Windows 7 以前の Windows 向けにビルドした既存のドライバーの場合に種類が NonPagedPool のプールを使用するには、そのドライバーで実行可能プールからメモリを割り当てます。 NonPagedPool 定数の値は、Windows 8 以降で定義されている NonPagedPoolExecute 定数の値と同じです。 したがって、これらの定数は同じ種類のプールを参照します。

Windows 7 以前のWindows 向けに作成したドライバーを Windows 8 以降の Windows 向けにビルドする場合は、そこに記述されているプールの種類 NonPagedPoolNonPagedPoolNx または NonPagedPoolExecute に置き換える必要があります。 ドライバーの開発では、このプールの置き換えを明示的に実行できるほか、Windows 8 へのドライバーの移植を支援するために用意されているオプトイン メカニズムのいずれかを使用して、暗黙的にプールを置き換えることもできます。 詳細については「NX プールのオプトイン メカニズム」を参照してください。