Author: jgardou
Date: Sat May 4 15:26:48 2013
New Revision: 58924
URL:
http://svn.reactos.org/svn/reactos?rev=58924&view=rev
Log:
[NTDLL_APITEST]
* Add tests for NtProtectVirtualMemory
Added:
trunk/rostests/apitests/ntdll/NtProtectVirtualMemory.c (with props)
Modified:
trunk/rostests/apitests/ntdll/CMakeLists.txt
trunk/rostests/apitests/ntdll/testlist.c
Modified: trunk/rostests/apitests/ntdll/CMakeLists.txt
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/ntdll/CMakeLists…
==============================================================================
--- trunk/rostests/apitests/ntdll/CMakeLists.txt [iso-8859-1] (original)
+++ trunk/rostests/apitests/ntdll/CMakeLists.txt [iso-8859-1] Sat May 4 15:26:48 2013
@@ -4,6 +4,7 @@
NtAllocateVirtualMemory.c
NtFreeVirtualMemory.c
NtMapViewOfSection.c
+ NtProtectVirtualMemory.c
NtQuerySystemEnvironmentValue.c
RtlBitmap.c
RtlDetermineDosPathNameType.c
Added: trunk/rostests/apitests/ntdll/NtProtectVirtualMemory.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/ntdll/NtProtectV…
==============================================================================
--- trunk/rostests/apitests/ntdll/NtProtectVirtualMemory.c (added)
+++ trunk/rostests/apitests/ntdll/NtProtectVirtualMemory.c [iso-8859-1] Sat May 4
15:26:48 2013
@@ -0,0 +1,102 @@
+/*
+ * PROJECT: ReactOS API Tests
+ * LICENSE: GPLv2+ - See COPYING in the top level directory
+ * PURPOSE: Test for the NtProtectVirtualMemory API
+ */
+
+#define WIN32_NO_STATUS
+#include <wine/test.h>
+#include <ndk/rtlfuncs.h>
+#include <ndk/mmfuncs.h>
+#include <pseh/pseh2.h>
+
+#define StartSeh status = STATUS_SUCCESS; _SEH2_TRY
+#define EndSeh(ExpectedStatus) _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) { status =
_SEH2_GetExceptionCode(); } _SEH2_END; ok(status == ExpectedStatus, "Exception %lx,
expected %lx\n", status, ExpectedStatus)
+
+START_TEST(NtProtectVirtualMemory)
+{
+ ULONG* allocationStart = NULL;
+ NTSTATUS status;
+ SIZE_T allocationSize;
+ ULONG oldProtection;
+
+ /* Reserve a page */
+ allocationSize = PAGE_SIZE;
+ status = NtAllocateVirtualMemory(NtCurrentProcess(),
+ (void**)&allocationStart,
+ 0,
+ &allocationSize,
+ MEM_RESERVE,
+ PAGE_NOACCESS);
+ ok(NT_SUCCESS(status), "Reserving memory failed\n");
+
+ /* Commit the page (RW) */
+ status = NtAllocateVirtualMemory(NtCurrentProcess(),
+ (void**)&allocationStart,
+ 0,
+ &allocationSize,
+ MEM_COMMIT,
+ PAGE_READWRITE);
+ ok(NT_SUCCESS(status), "Commiting memory failed\n");
+
+ /* Try writing it */
+ StartSeh
+ {
+ *allocationStart = 0xFF;
+ } EndSeh(STATUS_SUCCESS);
+
+ /* Try reading it */
+ StartSeh
+ {
+ ok(*allocationStart == 0xFF, "Memory was not written\n");
+ } EndSeh(STATUS_SUCCESS);
+
+ /* Set it as read only */
+ status = NtProtectVirtualMemory(NtCurrentProcess(),
+ (void**)&allocationStart,
+ &allocationSize,
+ PAGE_READONLY,
+ &oldProtection);
+ ok(NT_SUCCESS(status), "NtProtectVirtualMemory failed.\n");
+ ok(oldProtection == PAGE_READWRITE, "Expected PAGE_READWRITE, got %08x.\n",
oldProtection);
+
+ /* Try writing it */
+ StartSeh
+ {
+ *allocationStart = 0xAA;
+ } EndSeh(STATUS_ACCESS_VIOLATION);
+
+ /* Try reading it */
+ StartSeh
+ {
+ ok(*allocationStart == 0xFF, "read-only memory were changed.\n");
+ } EndSeh(STATUS_SUCCESS);
+
+ /* Set it as no access */
+ status = NtProtectVirtualMemory(NtCurrentProcess(),
+ (void**)&allocationStart,
+ &allocationSize,
+ PAGE_NOACCESS,
+ &oldProtection);
+ ok(NT_SUCCESS(status), "NtProtectVirtualMemory failed.\n");
+ ok(oldProtection == PAGE_READONLY, "Expected PAGE_READONLY, got %08x.\n",
oldProtection);
+
+ /* Try writing it */
+ StartSeh
+ {
+ *allocationStart = 0xAA;
+ } EndSeh(STATUS_ACCESS_VIOLATION);
+
+ /* Try reading it */
+ StartSeh
+ {
+ ok(*allocationStart == 0, "Test should not go as far as this.\n");
+ } EndSeh(STATUS_ACCESS_VIOLATION);
+
+ /* Free memory */
+ status = NtFreeVirtualMemory(NtCurrentProcess(),
+ (void**)&allocationStart,
+ &allocationSize,
+ MEM_RELEASE);
+ ok(NT_SUCCESS(status), "Failed freeing memory.\n");
+}
Propchange: trunk/rostests/apitests/ntdll/NtProtectVirtualMemory.c
------------------------------------------------------------------------------
svn:eol-style = native
Modified: trunk/rostests/apitests/ntdll/testlist.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/ntdll/testlist.c…
==============================================================================
--- trunk/rostests/apitests/ntdll/testlist.c [iso-8859-1] (original)
+++ trunk/rostests/apitests/ntdll/testlist.c [iso-8859-1] Sat May 4 15:26:48 2013
@@ -7,6 +7,7 @@
extern void func_NtAllocateVirtualMemory(void);
extern void func_NtFreeVirtualMemory(void);
extern void func_NtMapViewOfSection(void);
+extern void func_NtProtectVirtualMemory(void);
extern void func_NtQuerySystemEnvironmentValue(void);
extern void func_NtSystemInformation(void);
extern void func_RtlBitmap(void);
@@ -28,6 +29,7 @@
{ "NtAllocateVirtualMemory", func_NtAllocateVirtualMemory },
{ "NtFreeVirtualMemory", func_NtFreeVirtualMemory },
{ "NtMapViewOfSection", func_NtMapViewOfSection },
+ { "NtProtectVirtualMemory", func_NtProtectVirtualMemory },
{ "NtQuerySystemEnvironmentValue", func_NtQuerySystemEnvironmentValue },
{ "NtSystemInformation", func_NtSystemInformation },
{ "RtlBitmapApi", func_RtlBitmap },