c-如何确定逻辑地址是否在物理内存中



在较高IRQL中使用的回调函数可能需要访问内存中的一系列地址。所以我想知道是否有一个内核函数可以判断地址PVOID是否在内存的NonPagedPool部分,或者当前是否映射到物理内存,如果我从中读取,不会导致页面错误?

MmIsAddressValid将检查非分页池中的指定地址是否会发生页面错误。Microsoft警告不要使用此函数,因为如果传递的地址被调出,将导致未定义的行为。这还检查虚拟地址是否在物理内存的范围内,并检查有效的PTE,如果不满足条件,则返回false。

MmGetPhysicalAddress将返回驻留在未分页池中的虚拟地址的物理地址。如果没有满足该例程的正确条件,则返回零。

最新更新