非ページ プールから割り当てられたメモリを実行不可 (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 用にビルドされている場合は、 NonPagedPool プール の種類のインスタンスを NonPagedPoolNx または NonPagedPoolExecute に置き換える必要があります。 ドライバー開発者は、この置換を明示的に実行するか、Windows 8 にドライバーを移植する開発者を支援するために提供されるオプトイン メカニズムのいずれかを使用して、暗黙的に置換を実行できます。 詳細については、「NX プール Opt-In メカニズム をする」を参照してください。