驱动程序释放内存池后,Windows 是否会将其清零?

驱动程序释放内存池后,Windows 是否会将其清零?

我正在研究在运行许多 Windows 服务器的主机上过度使用内存的可能性。虚拟机量子计算单元/虚拟机支持和管理Libvirt。我目前的观察是,一旦 Windows Server 启动,QEMU 进程将占用相同数量的RSS选项中定义的内存-m。另一方面,Linux 客户机的行为方式不同,因为它会在虚拟机运行时逐渐消耗更多内存。

解决内存过量使用问题的一个方法是启用韩国科学技术振兴院。但此解决方案的缺点是它确实需要一些时间进行页面迭代和合并。因此它仍可能允许在短时间内启动许多 Windows 服务器。

然后我查看内存气球。我尝试给气球充气,然后立即放气,希望主机上的 RSS 不会增加。但显然事实并非如此。我观察到,一旦气球放气,主机 RSS 内存就会增加。

我想知道 Windows 内存管理系统是否会在ExFreePool其他调用之后自动将内存清零。

答案1

我想知道 Windows 内存管理系统是否会在 ExFreePool 或其他调用后自动清零内存。非常感谢您的帮助。

事实并非如此。实际上检查起来非常简单。编写一个简单的驱动程序,发出一系列 ExAllocatePoolXxx 调用,请求的池大小为随机数,用已知模式填充分配的内存,比如 GUID 和每次递增的全局计数器。在 RtlFillMemory 调用后释放内存。通过转储池区域的最开始部分开始检查您从 ExAllocatePoolXxx 获得的内容,在某个时候,您会在分配的内容中看到自己的签名。

相关内容