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/NtProtectVi... ============================================================================== --- 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 },