非执行 (NX) 非分页缓冲池
最佳做法是,windows Windows 8 及更高版本的驱动程序应从无执行 (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 非分页池的改进安全性。