[NTOS:MM]
authorThomas Faber <thomas.faber@reactos.org>
Sun, 5 Jul 2015 19:44:05 +0000 (19:44 +0000)
committerThomas Faber <thomas.faber@reactos.org>
Sun, 5 Jul 2015 19:44:05 +0000 (19:44 +0000)
- Show that PAGE_NOCACHE also works for image and data sections
- Show that *MapViewOfSection returns user space addresses
CORE-9808

svn path=/trunk/; revision=68352

rostests/kmtests/ntos_mm/MmSection.c

index da95255..8cc5281 100644 (file)
     ok_eq_hex(Status, ExpectAtBase ? STATUS_SUCCESS : STATUS_IMAGE_NOT_AT_BASE);\
     if (!skip(NT_SUCCESS(Status), "Section not mapped\n"))                      \
     {                                                                           \
+        ok((LONG_PTR)BaseAddress > 0, "BaseAddress = %p\n", BaseAddress);       \
+        ok_eq_uint(*(PUCHAR)BaseAddress, ExpectM ? 'M' : 0);                    \
+        Status = MmUnmapViewOfSection(PsGetCurrentProcess(), BaseAddress);      \
+        ok_eq_hex(Status, STATUS_SUCCESS);                                      \
+    }                                                                           \
+    BaseAddress = NULL;                                                         \
+    ViewSize = 0;                                                               \
+    Status = MmMapViewOfSection(SectionObject, PsGetCurrentProcess(),           \
+                                &BaseAddress, 0, 1, &SectionOffset,             \
+                                &ViewSize, ViewUnmap, 0,                        \
+                                PAGE_READONLY | PAGE_NOCACHE);                  \
+    ok_eq_hex(Status, ExpectAtBase ? STATUS_SUCCESS : STATUS_IMAGE_NOT_AT_BASE);\
+    if (!skip(NT_SUCCESS(Status), "Section not mapped\n"))                      \
+    {                                                                           \
+        ok((LONG_PTR)BaseAddress > 0, "BaseAddress = %p\n", BaseAddress);       \
         ok_eq_uint(*(PUCHAR)BaseAddress, ExpectM ? 'M' : 0);                    \
         Status = MmUnmapViewOfSection(PsGetCurrentProcess(), BaseAddress);      \
         ok_eq_hex(Status, STATUS_SUCCESS);                                      \
@@ -452,6 +467,7 @@ TestPhysicalMemorySection(VOID)
         ok_eq_hex(Status, STATUS_SUCCESS);
         if (!skip(NT_SUCCESS(Status), "No view\n"))
         {
+            ok((LONG_PTR)Mapping > 0, "Mapping = %p\n", Mapping);
             EqualBytes = RtlCompareMemory(Mapping,
                                           ZeroPageContents,
                                           PAGE_SIZE);
@@ -476,6 +492,7 @@ TestPhysicalMemorySection(VOID)
         ok_eq_hex(Status, STATUS_SUCCESS);
         if (!skip(NT_SUCCESS(Status), "No view\n"))
         {
+            ok((LONG_PTR)Mapping > 0, "Mapping = %p\n", Mapping);
             EqualBytes = RtlCompareMemory(Mapping,
                                           ZeroPageContents,
                                           PAGE_SIZE);
@@ -500,6 +517,7 @@ TestPhysicalMemorySection(VOID)
         ok_eq_hex(Status, STATUS_SUCCESS);
         if (!skip(NT_SUCCESS(Status), "No view\n"))
         {
+            ok((LONG_PTR)Mapping > 0, "Mapping = %p\n", Mapping);
             EqualBytes = RtlCompareMemory(Mapping,
                                           MyPage,
                                           PAGE_SIZE);