Author: jgardou Date: Mon Jul 11 19:31:34 2011 New Revision: 52642
URL: http://svn.reactos.org/svn/reactos?rev=52642&view=rev Log: [APITESTS] - add simple tests for NtFreeVirtualMemory
Added: trunk/rostests/apitests/ntdll/NtFreeVirtualMemory.c (with props) Modified: trunk/rostests/apitests/ntdll/CMakeLists.txt trunk/rostests/apitests/ntdll/ntdll_apitest.rbuild 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] Mon Jul 11 19:31:34 2011 @@ -2,6 +2,7 @@ add_definitions(-D_DLL -D__USE_CRTIMP)
list(APPEND SOURCE + NtFreeVirtualMemory.c RtlInitializeBitMap.c ZwContinue.c testlist.c)
Added: trunk/rostests/apitests/ntdll/NtFreeVirtualMemory.c URL: http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/ntdll/NtFreeVirtu... ============================================================================== --- trunk/rostests/apitests/ntdll/NtFreeVirtualMemory.c (added) +++ trunk/rostests/apitests/ntdll/NtFreeVirtualMemory.c [iso-8859-1] Mon Jul 11 19:31:34 2011 @@ -1,0 +1,118 @@ +#define WIN32_NO_STATUS +#include <stdio.h> +#include <wine/test.h> +#include <ndk/ntndk.h> + +static void Test_NtFreeVirtualMemory(void) +{ + PVOID Buffer = NULL, Buffer2; + SIZE_T Length = PAGE_SIZE; + NTSTATUS Status; + + Status = NtAllocateVirtualMemory(NtCurrentProcess(), + &Buffer, + 0, + &Length, + MEM_RESERVE, + PAGE_READWRITE); + ok(NT_SUCCESS(Status), "NtAllocateVirtualMemory failed : 0x%08x\n", Status); + ok(Length == PAGE_SIZE, "Length mismatch : 0x08x\n", Length); + ok(((ULONG_PTR)Buffer % PAGE_SIZE) == 0, "The buffer is not aligned to PAGE_SIZE.\n"); + + Status = NtFreeVirtualMemory(NtCurrentProcess(), + &Buffer, + &Length, + MEM_DECOMMIT); + ok(Status == STATUS_SUCCESS, "NtFreeVirtualMemory failed : 0x%08x\n", Status); + + /* Now try to free more than we got */ + Length++; + Status = NtFreeVirtualMemory(NtCurrentProcess(), + &Buffer, + &Length, + MEM_DECOMMIT); + ok(Status == STATUS_UNABLE_TO_FREE_VM, "NtFreeVirtualMemory returned status : 0x%08x\n", Status); + + Status = NtFreeVirtualMemory(NtCurrentProcess(), + &Buffer, + &Length, + MEM_RELEASE); + ok(Status == STATUS_UNABLE_TO_FREE_VM, "NtFreeVirtualMemory returned status : 0x%08x\n", Status); + + /* Free out of bounds from the wrong origin */ + Length = PAGE_SIZE; + Buffer2 = (PVOID)((ULONG_PTR)Buffer+1); + + Status = NtFreeVirtualMemory(NtCurrentProcess(), + &Buffer2, + &Length, + MEM_DECOMMIT); + ok(Status == STATUS_UNABLE_TO_FREE_VM, "NtFreeVirtualMemory returned status : 0x%08x\n", Status); + + Buffer2 = (PVOID)((ULONG_PTR)Buffer+1); + Length = PAGE_SIZE; + Status = NtFreeVirtualMemory(NtCurrentProcess(), + &Buffer2, + &Length, + MEM_RELEASE); + ok(Status == STATUS_UNABLE_TO_FREE_VM, "NtFreeVirtualMemory returned status : 0x%08x\n", Status); + + /* Same but in bounds */ + Length = PAGE_SIZE - 1; + Buffer2 = (PVOID)((ULONG_PTR)Buffer+1); + + Status = NtFreeVirtualMemory(NtCurrentProcess(), + &Buffer2, + &Length, + MEM_DECOMMIT); + ok(Status == STATUS_SUCCESS, "NtFreeVirtualMemory returned status : 0x%08x\n", Status); + ok(Buffer2 == Buffer, "NtFreeVirtualMemory set wrong buffer.\n"); + ok(Length == PAGE_SIZE, "NtFreeVirtualMemory did not round Length to PAGE_SIZE.\n"); + + Buffer2 = (PVOID)((ULONG_PTR)Buffer+1); + Length = PAGE_SIZE-1; + Status = NtFreeVirtualMemory(NtCurrentProcess(), + &Buffer2, + &Length, + MEM_RELEASE); + ok(Status == STATUS_SUCCESS, "NtFreeVirtualMemory returned status : 0x%08x\n", Status); + ok(Buffer2 == Buffer, "NtFreeVirtualMemory set wrong buffer.\n"); + ok(Length == PAGE_SIZE, "NtFreeVirtualMemory did not round Length to PAGE_SIZE.\n"); + + /* Now allocate two pages and try to free them one after the other */ + Length = 2*PAGE_SIZE; + Status = NtAllocateVirtualMemory(NtCurrentProcess(), + &Buffer, + 0, + &Length, + MEM_RESERVE, + PAGE_READWRITE); + ok(NT_SUCCESS(Status), "NtAllocateVirtualMemory failed : 0x%08x\n", Status); + ok(Length == 2*PAGE_SIZE, "Length mismatch : 0x08x\n", Length); + ok(((ULONG_PTR)Buffer % PAGE_SIZE) == 0, "The buffer is not aligned to PAGE_SIZE.\n"); + + Buffer2 = Buffer; + Length = PAGE_SIZE; + Status = NtFreeVirtualMemory(NtCurrentProcess(), + &Buffer2, + &Length, + MEM_RELEASE); + ok(NT_SUCCESS(Status), "NtAllocateVirtualMemory failed : 0x%08x\n", Status); + ok(Length == PAGE_SIZE, "Length mismatch : 0x08x\n", Length); + ok(Buffer2 == Buffer, "The buffer is not aligned to PAGE_SIZE.\n"); + + Buffer2 = (PVOID)((ULONG_PTR)Buffer+PAGE_SIZE); + Length = PAGE_SIZE; + Status = NtFreeVirtualMemory(NtCurrentProcess(), + &Buffer2, + &Length, + MEM_RELEASE); + ok(NT_SUCCESS(Status), "NtFreeVirtualMemory failed : 0x%08x\n", Status); + ok(Length == PAGE_SIZE, "Length mismatch : 0x08x\n", Length); + ok(Buffer2 == (PVOID)((ULONG_PTR)Buffer+PAGE_SIZE), "The buffer is not aligned to PAGE_SIZE.\n"); +} + +START_TEST(NtFreeVirtualMemory) +{ + Test_NtFreeVirtualMemory(); +}
Propchange: trunk/rostests/apitests/ntdll/NtFreeVirtualMemory.c ------------------------------------------------------------------------------ svn:eol-style = native
Modified: trunk/rostests/apitests/ntdll/ntdll_apitest.rbuild URL: http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/ntdll/ntdll_apite... ============================================================================== --- trunk/rostests/apitests/ntdll/ntdll_apitest.rbuild [iso-8859-1] (original) +++ trunk/rostests/apitests/ntdll/ntdll_apitest.rbuild [iso-8859-1] Mon Jul 11 19:31:34 2011 @@ -1,13 +1,15 @@ <?xml version="1.0"?> <!DOCTYPE module SYSTEM "../../../tools/rbuild/project.dtd"> <group> -<module name="ntdll_apitest" type="win32cui" installbase="bin" installname="ntdll_apitest.exe"> +<module name="ntdll_apitest" type="win32cui" installbase="bin" installname="ntdll_apitest.exe" + allowwarnings="true"> <include base="ntdll_apitest">.</include> <library>wine</library> <library>ntdll</library> <library>pseh</library> <file>testlist.c</file>
+ <file>NtFreeVirtualMemory.c</file> <file>RtlInitializeBitMap.c</file> <file>ZwContinue.c</file> <if property="ARCH" value="i386">
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] Mon Jul 11 19:31:34 2011 @@ -7,11 +7,13 @@
extern void func_RtlInitializeBitMap(void); extern void func_ZwContinue(void); +extern void func_NtFreeVirtualMemory(void);
const struct test winetest_testlist[] = { { "RtlInitializeBitMap", func_RtlInitializeBitMap }, { "ZwContinue", func_ZwContinue }, + { "NtFreeVirtualMemory", func_NtFreeVirtualMemory },
{ 0, 0 } };