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机制