我是Windows驱动程序开发的新手。我只是想知道,驱动程序中的全局变量将使用页面缓冲池内存还是非页面缓冲池内存?
感谢致敬
Navaneeth
要看。非页面缓冲池应保留用于必须保留在RAM中的内存,因此如果您正在执行一些对磁盘操作的内存页面有影响的关键内容,则使用非分页。
有关更多信息,请参阅here。
看看this(虽然它讨论的是C ++而不是C),但默认情况下,全局变量可以通过#pragma定位。同样在this的第22页,我们看到了如何做到这一点。最后this discuss在这里我们看到默认情况下数据段应该是不可分页的。
内核模式驱动程序中的全局变量是从NonPagedPool分配的。
您还可以使用设备扩展(当您调用IoCreateDevice时),它始终从NonPaged内存分配。
马丁,我希望这会有所帮助
我发现的另一个好答案是:“非分页池是内核内存,当Windows用完了免费的物理内存时,它无法被分页到页面文件中。驱动程序使用它来分配它们所需的内存。”来自here