搜索目标地址所在的节点
MmLocateMemoryAreaByAddress()
MmLocateMemoryAreaByAddress()
//modify by zyj
//搜索目标地址所在的节点
PMEMORY_AREA STDCALL
MmLocateMemoryAreaByAddress(
PMADDRESS_SPACE AddressSpace,
PVOID Address)
{
PMEMORY_AREA Node = AddressSpace->MemoryAreaRoot;
DPRINT("MmLocateMemoryAreaByAddress(AddressSpace %p, Address %p)\n",
AddressSpace, Address);
MmVerifyMemoryAreas(AddressSpace);//宏定义,定义为空
//循环检索
while (Node != NULL)
{
if (Address < Node->StartingAddress)
Node = Node->LeftChild;
else if (Address >= Node->EndingAddress)
Node = Node->RightChild;
else
{
DPRINT("MmLocateMemoryAreaByAddress(%p): %p [%p - %p]\n",
Address, Node, Node->StartingAddress, Node->EndingAddress);
return Node;
}
}
DPRINT("MmLocateMemoryAreaByAddress(%p): 0\n", Address);
return NULL;
}