最佳做法是,Windows 8 和更高版本的 Windows 驱动程序应从无执行(NX) 非分页池中分配大部分或全部非分页内存。 通过从 NX 非分页池分配内存,内核模式驱动程序通过阻止恶意软件在此内存中执行指令来提高安全性。
从 Windows 8 开始,内核模式驱动程序可以从 NX 非分页内存池中分配内存。 此池由类似于用户模式 Win32 堆分配器的常规用途内核模式内存分配器管理。 此池中的内存为 NX 和非分页。 x86、x64 和 Arm 处理器体系结构允许将内存页指定为 NX,以防止在这些页面中执行指令。 通常,内核模式驱动程序使用从非分页池分配的内存来存储数据,并且不需要能够在此内存中执行指令。
对旧驱动程序的支持
在 Windows 7 和早期版本的 Windows 中,从非分页池分配的所有内存都是可执行的。 为了鼓励移植这些驱动程序以在 Windows 8 及更高版本的 Windows 中使用 NX 非分页池,Microsoft提供了多种选择加入机制,使开发人员能够尽量少地更新其驱动程序。 有关详细信息,请参阅 NX 池 Opt-In 机制。
为了向后兼容,在 Windows 7 和早期版本的 Windows 上运行的驱动程序二进制文件,以及从可执行的非分页池分配内存的驱动程序二进制文件将在 Windows 8 及更高版本的 Windows 上运行,而无需修改。 但是,这些驱动程序不会利用 NX 非分页池改进后的安全性。