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

时间:2018-07-14 18:10:16

标签: c windows memory-management kernel paging

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

1 个答案:

答案 0 :(得分:0)

MmIsAddressValid将检查是否在非页面缓冲池中的指定地址处发生页面错误。 Microsoft警告不要使用此功能,因为如果传出的地址被调出,将导致不确定的行为。这还将检查虚拟地址是否在物理内存范围内,并检查有效的PTE并在不满足条件的情况下返回false。

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