NX 和执行池类型

若要指示从非分页池分配的内存不应在 NX (NX) 执行,可以使用以 NX Windows 8 开始的新池类型。 这些池类型由以下 POOL_TYPE值指定

NonPagedPoolNx
NX 非分页池。 指令不能在此池分配的内存中执行。

NonPagedPoolExecute
可执行的非分页池。 指令执行在此池分配的内存中启用。

大多数驱动程序仅使用分配的内存来存储数据,并且不会在此内存中执行指令。 如果生成驱动程序以在 Windows 8 及更高版本的 Windows,请尽可能从 NX 非分页池中分配 NonPagedPoolNx 内存。 只有需要从非分页内存执行指令的驱动程序才应从可执行的非分页池中分配 NonPagedPoolExecute 内存。

对于为 Windows 7 及更早版本的 Windows 构建的现有驱动程序,使用 NonPagedPool 池类型时,驱动程序会从可执行池中分配内存。 NonPagedPool 常量名称与 NonPagedPoolExecute 常量名称具有相同的值,该常量名称以 Windows 8。 因此,这些常量引用相同的池类型。

如果为 Windows 7 或 Windows 的早期版本编写的驱动程序针对 Windows 8 或更高版本的 Windows 生成,则 NonPagedPool 池类型的实例应替换为 NonPagedPoolNxNonPagedPoolExecute。 驱动程序开发人员可以显式执行此替换,或者可以使用提供的选择加入机制之一隐式执行替换,该机制有助于开发人员将驱动程序移植到Windows 8。 有关详细信息,请参阅 NX 池Opt-In机制