[NTDLL_APITEST]
authorJérôme Gardou <jerome.gardou@reactos.org>
Mon, 30 Jun 2014 19:50:28 +0000 (19:50 +0000)
committerJérôme Gardou <jerome.gardou@reactos.org>
Mon, 30 Jun 2014 19:50:28 +0000 (19:50 +0000)
 - Add a test showing that memory content is still available after changing protection to PAGE_NOACCESS

svn path=/trunk/; revision=63678

rostests/apitests/ntdll/NtProtectVirtualMemory.c

index e1bbe04..e492ece 100644 (file)
@@ -89,6 +89,27 @@ START_TEST(NtProtectVirtualMemory)
     {
         ok(*allocationStart == 0, "Test should not go as far as this.\n");
     } EndSeh(STATUS_ACCESS_VIOLATION);
     {
         ok(*allocationStart == 0, "Test should not go as far as this.\n");
     } EndSeh(STATUS_ACCESS_VIOLATION);
+
+    /* Set it as readable again */
+    status = NtProtectVirtualMemory(NtCurrentProcess(),
+        (void**)&allocationStart,
+        &allocationSize,
+        PAGE_READONLY,
+        &oldProtection);
+    ok(NT_SUCCESS(status), "NtProtectVirtualMemory failed.\n");
+    ok(oldProtection == PAGE_NOACCESS, "Expected PAGE_READONLY, got %08lx.\n", oldProtection);
+
+    /* Try writing it */
+    StartSeh()
+    {
+        *allocationStart = 0xAA;
+    } EndSeh(STATUS_ACCESS_VIOLATION);
+
+    /* Try reading it */
+    StartSeh()
+    {
+        ok(*allocationStart == 0xFF, "Memory content was not preserved.\n");
+    } EndSeh(STATUS_SUCCESS);
     
     /* Free memory */
     status = NtFreeVirtualMemory(NtCurrentProcess(),
     
     /* Free memory */
     status = NtFreeVirtualMemory(NtCurrentProcess(),
@@ -96,4 +117,4 @@ START_TEST(NtProtectVirtualMemory)
         &allocationSize,
         MEM_RELEASE);
     ok(NT_SUCCESS(status), "Failed freeing memory.\n");
         &allocationSize,
         MEM_RELEASE);
     ok(NT_SUCCESS(status), "Failed freeing memory.\n");
-}
\ No newline at end of file
+}