[MM]
authorTimo Kreuzer <timo.kreuzer@reactos.org>
Tue, 10 Nov 2009 04:19:43 +0000 (04:19 +0000)
committerTimo Kreuzer <timo.kreuzer@reactos.org>
Tue, 10 Nov 2009 04:19:43 +0000 (04:19 +0000)
Implement MmIsAddressValid for amd64.

svn path=/branches/ros-amd64-bringup/; revision=44073

reactos/ntoskrnl/mm/ARM3/mmsup.c
reactos/ntoskrnl/mm/amd64/page.c

index 6fc2827..ec7660c 100644 (file)
@@ -62,6 +62,7 @@ MmSetAddressRangeModified(IN PVOID Address,
    return FALSE;
 }
 
+#ifndef _M_AMD64
 /*
  * @implemented
  */
@@ -87,6 +88,7 @@ MmIsAddressValid(IN PVOID VirtualAddress)
     //
     return TRUE;
 }
+#endif
 
 /*
  * @unimplemented
index fbf7bdc..a561577 100644 (file)
@@ -96,12 +96,12 @@ MiGetPteForProcess(
 
         /* Get the PPE */
         Pte = MiAddressToPpe(Address);
-        if (Pte->u.Hard.Valid)
+        if (!Pte->u.Hard.Valid)
             return NULL;
 
         /* Get the PDE */
         Pte = MiAddressToPde(Address);
-        if (Pte->u.Hard.Valid)
+        if (!Pte->u.Hard.Valid)
             return NULL;
 
         /* Get the PTE */
@@ -542,5 +542,16 @@ MmCreateProcessAddressSpace(IN ULONG MinWs,
     return 0;
 }
 
+BOOLEAN
+NTAPI
+MmIsAddressValid(IN PVOID VirtualAddress)
+{
+    /* Check all four page table levels */
+    return (MiAddressToPxe(VirtualAddress)->u.Hard.Valid != 0 &&
+            MiAddressToPpe(VirtualAddress)->u.Hard.Valid != 0 &&
+            MiAddressToPde(VirtualAddress)->u.Hard.Valid != 0 &&
+            MiAddressToPte(VirtualAddress)->u.Hard.Valid != 0);
+}
+
 
 /* EOF */