[PATCH v2 1/2] ntdll/tests: Test NtMapViewOfSection with a DLL and zero_bits.
Brendan Shanks
bshanks at codeweavers.com
Wed Apr 27 15:33:25 CDT 2022
Signed-off-by: Brendan Shanks <bshanks at codeweavers.com>
---
The zero_bits mask test always passes on 32-bit (the pointer is either
truncated, or version.dll is itself 32-bit).
dlls/ntdll/tests/virtual.c | 41 ++++++++++++++++++++++++++++++++++++++
1 file changed, 41 insertions(+)
diff --git a/dlls/ntdll/tests/virtual.c b/dlls/ntdll/tests/virtual.c
index 30a97ba9d94..cd374cf2ea4 100644
--- a/dlls/ntdll/tests/virtual.c
+++ b/dlls/ntdll/tests/virtual.c
@@ -37,6 +37,8 @@ static ULONG64 (WINAPI *pRtlGetEnabledExtendedFeatures)(ULONG64);
static NTSTATUS (WINAPI *pRtlFreeUserStack)(void *);
static void * (WINAPI *pRtlFindExportedRoutineByName)(HMODULE,const char*);
static BOOL (WINAPI *pIsWow64Process)(HANDLE, PBOOL);
+static BOOL (WINAPI *pWow64DisableWow64FsRedirection)(PVOID*);
+static BOOL (WINAPI *pWow64RevertWow64FsRedirection)(PVOID);
static NTSTATUS (WINAPI *pNtAllocateVirtualMemoryEx)(HANDLE, PVOID *, SIZE_T *, ULONG, ULONG,
MEM_EXTENDED_PARAMETER *, ULONG);
static const BOOL is_win64 = sizeof(void*) != sizeof(int);
@@ -904,6 +906,43 @@ static void test_NtMapViewOfSection(void)
CloseHandle(file);
DeleteFileA(testfile);
+ /* test zero_bits > 31 with a 64-bit DLL if possible */
+ if (is_wow64)
+ pWow64DisableWow64FsRedirection(&ptr2);
+
+ file = CreateFileA("c:\\windows\\system32\\version.dll", GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, 0);
+ ok(file != INVALID_HANDLE_VALUE, "Failed to open version.dll\n");
+
+ if (is_wow64)
+ pWow64RevertWow64FsRedirection(ptr2);
+
+ mapping = CreateFileMappingA(file, NULL, PAGE_READONLY|SEC_IMAGE, 0, 0, NULL);
+ ok(mapping != 0, "CreateFileMapping failed\n");
+
+ ptr = NULL;
+ size = 0;
+ offset.QuadPart = 0;
+ zero_bits = 0x7fffffff;
+ status = NtMapViewOfSection(mapping, process, &ptr, zero_bits, 0, &offset, &size, 1, 0, PAGE_READONLY);
+
+ if (!is_win64 && !is_wow64)
+ {
+ ok(status == STATUS_INVALID_PARAMETER_4, "NtMapViewOfSection returned %08lx\n", status);
+ }
+ else
+ {
+ ok(status == STATUS_SUCCESS || status == STATUS_IMAGE_NOT_AT_BASE, "NtMapViewOfSection returned %08lx\n", status);
+ ok(!((ULONG_PTR)ptr & 0xffff), "returned memory %p is not aligned to 64k\n", ptr);
+ todo_wine
+ ok(((UINT_PTR)ptr & ~get_zero_bits_mask(zero_bits)) == 0, "NtMapViewOfSection returned address %p\n", ptr);
+
+ status = NtUnmapViewOfSection(process, ptr);
+ ok(status == STATUS_SUCCESS, "NtUnmapViewOfSection returned %08lx\n", status);
+ }
+
+ NtClose(mapping);
+ CloseHandle(file);
+
TerminateProcess(process, 0);
CloseHandle(process);
}
@@ -1152,6 +1191,8 @@ START_TEST(virtual)
mod = GetModuleHandleA("kernel32.dll");
pIsWow64Process = (void *)GetProcAddress(mod, "IsWow64Process");
+ pWow64DisableWow64FsRedirection = (void *)GetProcAddress(mod, "Wow64DisableWow64FsRedirection");
+ pWow64RevertWow64FsRedirection = (void *)GetProcAddress(mod, "Wow64RevertWow64FsRedirection");
pGetEnabledXStateFeatures = (void *)GetProcAddress(mod, "GetEnabledXStateFeatures");
mod = GetModuleHandleA("ntdll.dll");
pRtlCreateUserStack = (void *)GetProcAddress(mod, "RtlCreateUserStack");
--
2.35.1
More information about the wine-devel
mailing list