乔丹二世 发表于 2011-1-16 00:21:58

实现MmIsAddressValid

BOOLEAN MmIsAddressValid ( PVOID VirtualAddress )
{
   BYTE PresentSign = 0x1;
   BYTE PageSizeSign = 0x80;
   BYTE PresentAndPageSizeSign = 0x81;
   PVOID lVirtualAddress;
   ULONG PDE,PDEContext;
   ULONG PTE,PTEContext;
   lVirtualAddress = VirtualAddress;
   PDE = (((ULONG)lVirtualAddress>>21)<<3) & 0x3FF8 + 0xC0600000;
   PDEContext = (ULONG)*(PVOID)PDE;
   if(!(PDEContext & PresentSign))
   return FALSE;

   if(PDEContext & PageSizeSign)
   return TRUE;

   PTE = (((ULONG)lVirtualAddress>>12)<<3) & 0x7FFFF8 + 0xC0000000;
   PTEContext = (ULONG)*(PVOID)PTE;
   if(!(PTEContext & PresentSign ))
   return FALSE;

   if(!(PTEContext & PageSizeSign))
   return TRUE;
   else
   {
          PDE = (ULONG)PTE & 0x3ff8   + 0xc0600000;
      PDEContext = (ULONG)*(PVOID)PDE;
      if(PDEContext & PresentAndPageSizeSign)
      return TRUE;

   }

   return FALSE;
}
页: [1]
查看完整版本: 实现MmIsAddressValid