mirror of
https://github.com/reactos/reactos.git
synced 2025-01-06 06:20:13 +00:00
[NTDLL_APITEST]
* Add tests for NtProtectVirtualMemory svn path=/trunk/; revision=58924
This commit is contained in:
parent
be14e6b7ce
commit
3b0611bcc9
3 changed files with 105 additions and 0 deletions
|
@ -4,6 +4,7 @@ list(APPEND SOURCE
|
||||||
NtAllocateVirtualMemory.c
|
NtAllocateVirtualMemory.c
|
||||||
NtFreeVirtualMemory.c
|
NtFreeVirtualMemory.c
|
||||||
NtMapViewOfSection.c
|
NtMapViewOfSection.c
|
||||||
|
NtProtectVirtualMemory.c
|
||||||
NtQuerySystemEnvironmentValue.c
|
NtQuerySystemEnvironmentValue.c
|
||||||
RtlBitmap.c
|
RtlBitmap.c
|
||||||
RtlDetermineDosPathNameType.c
|
RtlDetermineDosPathNameType.c
|
||||||
|
|
102
rostests/apitests/ntdll/NtProtectVirtualMemory.c
Normal file
102
rostests/apitests/ntdll/NtProtectVirtualMemory.c
Normal file
|
@ -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");
|
||||||
|
}
|
|
@ -7,6 +7,7 @@ extern void func_LdrEnumResources(void);
|
||||||
extern void func_NtAllocateVirtualMemory(void);
|
extern void func_NtAllocateVirtualMemory(void);
|
||||||
extern void func_NtFreeVirtualMemory(void);
|
extern void func_NtFreeVirtualMemory(void);
|
||||||
extern void func_NtMapViewOfSection(void);
|
extern void func_NtMapViewOfSection(void);
|
||||||
|
extern void func_NtProtectVirtualMemory(void);
|
||||||
extern void func_NtQuerySystemEnvironmentValue(void);
|
extern void func_NtQuerySystemEnvironmentValue(void);
|
||||||
extern void func_NtSystemInformation(void);
|
extern void func_NtSystemInformation(void);
|
||||||
extern void func_RtlBitmap(void);
|
extern void func_RtlBitmap(void);
|
||||||
|
@ -28,6 +29,7 @@ const struct test winetest_testlist[] =
|
||||||
{ "NtAllocateVirtualMemory", func_NtAllocateVirtualMemory },
|
{ "NtAllocateVirtualMemory", func_NtAllocateVirtualMemory },
|
||||||
{ "NtFreeVirtualMemory", func_NtFreeVirtualMemory },
|
{ "NtFreeVirtualMemory", func_NtFreeVirtualMemory },
|
||||||
{ "NtMapViewOfSection", func_NtMapViewOfSection },
|
{ "NtMapViewOfSection", func_NtMapViewOfSection },
|
||||||
|
{ "NtProtectVirtualMemory", func_NtProtectVirtualMemory },
|
||||||
{ "NtQuerySystemEnvironmentValue", func_NtQuerySystemEnvironmentValue },
|
{ "NtQuerySystemEnvironmentValue", func_NtQuerySystemEnvironmentValue },
|
||||||
{ "NtSystemInformation", func_NtSystemInformation },
|
{ "NtSystemInformation", func_NtSystemInformation },
|
||||||
{ "RtlBitmapApi", func_RtlBitmap },
|
{ "RtlBitmapApi", func_RtlBitmap },
|
||||||
|
|
Loading…
Reference in a new issue