Signed-off-by: Rémi Bernon rbernon@codeweavers.com --- dlls/ntdll/tests/virtual.c | 75 +++++++++++++++++++++++++------------- 1 file changed, 50 insertions(+), 25 deletions(-)
diff --git a/dlls/ntdll/tests/virtual.c b/dlls/ntdll/tests/virtual.c index 26d058185fd..2a71a561a90 100644 --- a/dlls/ntdll/tests/virtual.c +++ b/dlls/ntdll/tests/virtual.c @@ -39,21 +39,24 @@ static void test_AllocateVirtualMemory(void) /* simple allocation should success */ size = 0x1000; addr1 = NULL; - status = NtAllocateVirtualMemory(NtCurrentProcess(), &addr1, 0, &size, + zero_bits = 0; + status = NtAllocateVirtualMemory(NtCurrentProcess(), &addr1, zero_bits, &size, MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE); ok(status == STATUS_SUCCESS, "NtAllocateVirtualMemory returned %08x\n", status);
/* allocation conflicts because of 64k align */ size = 0x1000; addr2 = (char *)addr1 + 0x1000; - status = NtAllocateVirtualMemory(NtCurrentProcess(), &addr2, 0, &size, + zero_bits = 0; + status = NtAllocateVirtualMemory(NtCurrentProcess(), &addr2, zero_bits, &size, MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE); ok(status == STATUS_CONFLICTING_ADDRESSES, "NtAllocateVirtualMemory returned %08x\n", status);
/* it should conflict, even when zero_bits is explicitly set */ size = 0x1000; addr2 = (char *)addr1 + 0x1000; - status = NtAllocateVirtualMemory(NtCurrentProcess(), &addr2, 12, &size, + zero_bits = 12; + status = NtAllocateVirtualMemory(NtCurrentProcess(), &addr2, zero_bits, &size, MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE); ok(status == STATUS_CONFLICTING_ADDRESSES, "NtAllocateVirtualMemory returned %08x\n", status); if (status == STATUS_SUCCESS) @@ -67,7 +70,7 @@ static void test_AllocateVirtualMemory(void) size = 0x1000; addr2 = NULL; zero_bits = 1; - status = NtAllocateVirtualMemory(NtCurrentProcess(), &addr2, 1, &size, + status = NtAllocateVirtualMemory(NtCurrentProcess(), &addr2, zero_bits, &size, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE); ok(status == STATUS_SUCCESS || status == STATUS_NO_MEMORY || broken(status == STATUS_INVALID_PARAMETER_3) /* winxp */, @@ -106,7 +109,8 @@ static void test_AllocateVirtualMemory(void) /* 21 zero bits never succeeds */ size = 0x1000; addr2 = NULL; - status = NtAllocateVirtualMemory(NtCurrentProcess(), &addr2, 21, &size, + zero_bits = 21; + status = NtAllocateVirtualMemory(NtCurrentProcess(), &addr2, zero_bits, &size, MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE); todo_wine ok(status == STATUS_NO_MEMORY || status == STATUS_INVALID_PARAMETER, @@ -121,7 +125,8 @@ static void test_AllocateVirtualMemory(void) /* 22 zero bits is invalid */ size = 0x1000; addr2 = NULL; - status = NtAllocateVirtualMemory(NtCurrentProcess(), &addr2, 22, &size, + zero_bits = 22; + status = NtAllocateVirtualMemory(NtCurrentProcess(), &addr2, zero_bits, &size, MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE); ok(status == STATUS_INVALID_PARAMETER_3 || status == STATUS_INVALID_PARAMETER, "NtAllocateVirtualMemory returned %08x\n", status); @@ -157,7 +162,8 @@ static void test_AllocateVirtualMemory(void) /* AT_ROUND_TO_PAGE flag is not supported for NtAllocateVirtualMemory */ size = 0x1000; addr2 = (char *)addr1 + 0x1000; - status = NtAllocateVirtualMemory(NtCurrentProcess(), &addr2, 0, &size, + zero_bits = 0; + status = NtAllocateVirtualMemory(NtCurrentProcess(), &addr2, zero_bits, &size, MEM_RESERVE | MEM_COMMIT | AT_ROUND_TO_PAGE, PAGE_EXECUTE_READWRITE); ok(status == STATUS_INVALID_PARAMETER_5 || status == STATUS_INVALID_PARAMETER, "NtAllocateVirtualMemory returned %08x\n", status); @@ -175,6 +181,7 @@ static void test_MapViewOfSection(void) DWORD status; SIZE_T size; LARGE_INTEGER offset, map_size; + ULONG zero_bits;
map_size.QuadPart = 0x1000; status = NtCreateSection(&mapping, SECTION_MAP_READ | SECTION_MAP_WRITE, NULL, @@ -184,16 +191,18 @@ static void test_MapViewOfSection(void)
ptr = NULL; size = 0; + zero_bits = 0; offset.QuadPart = 0; - status = NtMapViewOfSection(mapping, process, &ptr, 0, 0, &offset, &size, 1, 0, PAGE_READWRITE); + status = NtMapViewOfSection(mapping, process, &ptr, zero_bits, 0, &offset, &size, 1, 0, PAGE_READWRITE); ok(status == STATUS_SUCCESS, "NtMapViewOfSection returned %08x\n", status); ok(!((ULONG_PTR)ptr & 0xffff), "returned memory %p is not aligned to 64k\n", ptr);
/* for some unknown reason NtMapViewOfSection fails with STATUS_NO_MEMORY when zero_bits != 0 ? */ ptr2 = NULL; size = 0; + zero_bits = 12; offset.QuadPart = 0; - status = NtMapViewOfSection(mapping, process, &ptr2, 12, 0, &offset, &size, 1, 0, PAGE_READWRITE); + status = NtMapViewOfSection(mapping, process, &ptr2, zero_bits, 0, &offset, &size, 1, 0, PAGE_READWRITE); ok(status == STATUS_SUCCESS || status == STATUS_NO_MEMORY, "NtMapViewOfSection returned %08x\n", status); if (status == STATUS_SUCCESS) @@ -204,7 +213,8 @@ static void test_MapViewOfSection(void)
ptr2 = NULL; size = 0; - status = NtMapViewOfSection(mapping, process, &ptr2, 16, 0, &offset, &size, 1, 0, PAGE_READWRITE); + zero_bits = 16; + status = NtMapViewOfSection(mapping, process, &ptr2, zero_bits, 0, &offset, &size, 1, 0, PAGE_READWRITE); todo_wine ok(status == STATUS_NO_MEMORY, "NtMapViewOfSection returned %08x\n", status); if (status == STATUS_SUCCESS) @@ -216,65 +226,74 @@ static void test_MapViewOfSection(void) /* 22 zero bits isn't acceptable */ ptr2 = NULL; size = 0; - status = NtMapViewOfSection(mapping, process, &ptr2, 22, 0, &offset, &size, 1, 0, PAGE_READWRITE); + zero_bits = 22; + status = NtMapViewOfSection(mapping, process, &ptr2, zero_bits, 0, &offset, &size, 1, 0, PAGE_READWRITE); ok(status == STATUS_INVALID_PARAMETER_4 || status == STATUS_INVALID_PARAMETER, "NtMapViewOfSection returned %08x\n", status);
/* mapping at the same page conflicts */ ptr2 = ptr; size = 0; + zero_bits = 0; offset.QuadPart = 0; - status = NtMapViewOfSection(mapping, process, &ptr2, 0, 0, &offset, &size, 1, 0, PAGE_READWRITE); + status = NtMapViewOfSection(mapping, process, &ptr2, zero_bits, 0, &offset, &size, 1, 0, PAGE_READWRITE); ok(status == STATUS_CONFLICTING_ADDRESSES, "NtMapViewOfSection returned %08x\n", status);
/* offset has to be aligned */ ptr2 = ptr; size = 0; + zero_bits = 0; offset.QuadPart = 1; - status = NtMapViewOfSection(mapping, process, &ptr2, 0, 0, &offset, &size, 1, 0, PAGE_READWRITE); + status = NtMapViewOfSection(mapping, process, &ptr2, zero_bits, 0, &offset, &size, 1, 0, PAGE_READWRITE); ok(status == STATUS_MAPPED_ALIGNMENT, "NtMapViewOfSection returned %08x\n", status);
/* ptr has to be aligned */ ptr2 = (char *)ptr + 42; size = 0; + zero_bits = 0; offset.QuadPart = 0; - status = NtMapViewOfSection(mapping, process, &ptr2, 0, 0, &offset, &size, 1, 0, PAGE_READWRITE); + status = NtMapViewOfSection(mapping, process, &ptr2, zero_bits, 0, &offset, &size, 1, 0, PAGE_READWRITE); ok(status == STATUS_MAPPED_ALIGNMENT, "NtMapViewOfSection returned %08x\n", status);
/* still not 64k aligned */ ptr2 = (char *)ptr + 0x1000; size = 0; + zero_bits = 0; offset.QuadPart = 0; - status = NtMapViewOfSection(mapping, process, &ptr2, 0, 0, &offset, &size, 1, 0, PAGE_READWRITE); + status = NtMapViewOfSection(mapping, process, &ptr2, zero_bits, 0, &offset, &size, 1, 0, PAGE_READWRITE); ok(status == STATUS_MAPPED_ALIGNMENT, "NtMapViewOfSection returned %08x\n", status);
/* zero_bits != 0 is not allowed when an address is set */ ptr2 = (char *)ptr + 0x1000; size = 0; + zero_bits = 12; offset.QuadPart = 0; - status = NtMapViewOfSection(mapping, process, &ptr2, 12, 0, &offset, &size, 1, 0, PAGE_READWRITE); + status = NtMapViewOfSection(mapping, process, &ptr2, zero_bits, 0, &offset, &size, 1, 0, PAGE_READWRITE); ok(status == STATUS_INVALID_PARAMETER_4 || status == STATUS_INVALID_PARAMETER || broken(STATUS_MAPPED_ALIGNMENT) /* w1064v1809 inconsistently returns STATUS_MAPPED_ALIGNMENT or STATUS_INVALID_PARAMETER */, "NtMapViewOfSection returned %08x\n", status);
ptr2 = (char *)ptr + 0x1000; size = 0; + zero_bits = 16; offset.QuadPart = 0; - status = NtMapViewOfSection(mapping, process, &ptr2, 16, 0, &offset, &size, 1, 0, PAGE_READWRITE); + status = NtMapViewOfSection(mapping, process, &ptr2, zero_bits, 0, &offset, &size, 1, 0, PAGE_READWRITE); ok(status == STATUS_INVALID_PARAMETER_4 || status == STATUS_INVALID_PARAMETER, "NtMapViewOfSection returned %08x\n", status);
ptr2 = (char *)ptr + 0x1001; size = 0; + zero_bits = 16; offset.QuadPart = 0; - status = NtMapViewOfSection(mapping, process, &ptr2, 16, 0, &offset, &size, 1, 0, PAGE_READWRITE); + status = NtMapViewOfSection(mapping, process, &ptr2, zero_bits, 0, &offset, &size, 1, 0, PAGE_READWRITE); ok(status == STATUS_INVALID_PARAMETER_4 || status == STATUS_INVALID_PARAMETER, "NtMapViewOfSection returned %08x\n", status);
ptr2 = (char *)ptr + 0x1000; size = 0; + zero_bits = 16; offset.QuadPart = 1; - status = NtMapViewOfSection(mapping, process, &ptr2, 16, 0, &offset, &size, 1, 0, PAGE_READWRITE); + status = NtMapViewOfSection(mapping, process, &ptr2, zero_bits, 0, &offset, &size, 1, 0, PAGE_READWRITE); ok(status == STATUS_INVALID_PARAMETER_4 || status == STATUS_INVALID_PARAMETER, "NtMapViewOfSection returned %08x\n", status);
@@ -284,23 +303,26 @@ static void test_MapViewOfSection(void) /* new memory region conflicts with previous mapping */ ptr2 = ptr; size = 0; + zero_bits = 0; offset.QuadPart = 0; - status = NtMapViewOfSection(mapping, process, &ptr2, 0, 0, &offset, + status = NtMapViewOfSection(mapping, process, &ptr2, zero_bits, 0, &offset, &size, 1, AT_ROUND_TO_PAGE, PAGE_READWRITE); ok(status == STATUS_CONFLICTING_ADDRESSES, "NtMapViewOfSection returned %08x\n", status);
ptr2 = (char *)ptr + 42; size = 0; + zero_bits = 0; offset.QuadPart = 0; - status = NtMapViewOfSection(mapping, process, &ptr2, 0, 0, &offset, + status = NtMapViewOfSection(mapping, process, &ptr2, zero_bits, 0, &offset, &size, 1, AT_ROUND_TO_PAGE, PAGE_READWRITE); ok(status == STATUS_CONFLICTING_ADDRESSES, "NtMapViewOfSection returned %08x\n", status);
/* in contrary to regular NtMapViewOfSection, only 4kb align is enforced */ ptr2 = (char *)ptr + 0x1000; size = 0; + zero_bits = 0; offset.QuadPart = 0; - status = NtMapViewOfSection(mapping, process, &ptr2, 0, 0, &offset, + status = NtMapViewOfSection(mapping, process, &ptr2, zero_bits, 0, &offset, &size, 1, AT_ROUND_TO_PAGE, PAGE_READWRITE); ok(status == STATUS_SUCCESS, "NtMapViewOfSection returned %08x\n", status); ok((char *)ptr2 == (char *)ptr + 0x1000, @@ -311,8 +333,9 @@ static void test_MapViewOfSection(void) /* the address is rounded down if not on a page boundary */ ptr2 = (char *)ptr + 0x1001; size = 0; + zero_bits = 0; offset.QuadPart = 0; - status = NtMapViewOfSection(mapping, process, &ptr2, 0, 0, &offset, + status = NtMapViewOfSection(mapping, process, &ptr2, zero_bits, 0, &offset, &size, 1, AT_ROUND_TO_PAGE, PAGE_READWRITE); ok(status == STATUS_SUCCESS, "NtMapViewOfSection returned %08x\n", status); ok((char *)ptr2 == (char *)ptr + 0x1000, @@ -322,8 +345,9 @@ static void test_MapViewOfSection(void)
ptr2 = (char *)ptr + 0x2000; size = 0; + zero_bits = 0; offset.QuadPart = 0; - status = NtMapViewOfSection(mapping, process, &ptr2, 0, 0, &offset, + status = NtMapViewOfSection(mapping, process, &ptr2, zero_bits, 0, &offset, &size, 1, AT_ROUND_TO_PAGE, PAGE_READWRITE); ok(status == STATUS_SUCCESS, "NtMapViewOfSection returned %08x\n", status); ok((char *)ptr2 == (char *)ptr + 0x2000, @@ -335,8 +359,9 @@ static void test_MapViewOfSection(void) { ptr2 = (char *)ptr + 0x1000; size = 0; + zero_bits = 0; offset.QuadPart = 0; - status = NtMapViewOfSection(mapping, process, &ptr2, 0, 0, &offset, + status = NtMapViewOfSection(mapping, process, &ptr2, zero_bits, 0, &offset, &size, 1, AT_ROUND_TO_PAGE, PAGE_READWRITE); todo_wine ok(status == STATUS_INVALID_PARAMETER_9 || status == STATUS_INVALID_PARAMETER,