NX 和执行池类型

若要表示从非分页池分配的内存是否应被禁止执行(NX),可以使用从 Windows 8 开始提供的两种新池类型。 这些池类型由以下 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 池类型的实例应替换为 NonPagedPoolNxNonPagedPoolExecute 驱动程序开发人员可以显式地执行此替换,也可以通过使用为帮助开发人员将他们的驱动程序移植到 Windows 8 而提供的自选机制之一来隐式地执行替换。 有关详细信息,请参阅 NX 池 Opt-In 机制