diff --git a/modules/rostests/winetests/kernel32/actctx.c b/modules/rostests/winetests/kernel32/actctx.c index 150099172fc..d8a7133d8d1 100644 --- a/modules/rostests/winetests/kernel32/actctx.c +++ b/modules/rostests/winetests/kernel32/actctx.c @@ -3063,16 +3063,23 @@ todo_wine { actctx.cbSize = sizeof(actctx); actctx.lpResourceName = MAKEINTRESOURCEA(1); actctx.dwFlags = ACTCTX_FLAG_HMODULE_VALID | ACTCTX_FLAG_RESOURCE_NAME_VALID; +#ifdef __REACTOS__ + char path_explorer[MAX_PATH]; + GetWindowsDirectoryA(path_explorer, sizeof(path_explorer)); + strcat(path_explorer, "\\explorer.exe"); +#endif for (i = 0; i < ARRAY_SIZE(flags); ++i) { winetest_push_context("%lu", flags[i]); + /* use explorer.exe because using modules already loaded has a different behavior */ #ifdef __REACTOS__ if (GetNTVersion() < _WIN32_WINNT_VISTA && i > 0) break; // Only the first test is valid for WS03. -#endif - /* use explorer.exe because using modules already loaded has a different behavior */ + actctx.hModule = LoadLibraryExA(path_explorer, NULL, flags[i]); +#else actctx.hModule = LoadLibraryExA("C:\\windows\\explorer.exe", NULL, flags[i]); +#endif ok(actctx.hModule != NULL, "LoadLibraryExA failed, error %lu\n", GetLastError()); handle = CreateActCtxA(&actctx); ok(handle == INVALID_HANDLE_VALUE, "CreateActCtxA succeeded\n"); @@ -3834,7 +3841,13 @@ static void test_builtin_sxs(void) ULONG_PTR cookie; HANDLE handle_context; BOOL success; +#ifdef __REACTOS__ + static char expected_path[MAX_PATH]; + GetWindowsDirectoryA(expected_path, sizeof(expected_path)); + strcat(expected_path, "\\WinSxS"); +#else static const char *expected_path = "C:\\Windows\\WinSxS"; +#endif GetTempPathA(sizeof(path_tmp), path_tmp); diff --git a/modules/rostests/winetests/kernel32/debugger.c b/modules/rostests/winetests/kernel32/debugger.c index 27b7ef8e697..d785e380be7 100644 --- a/modules/rostests/winetests/kernel32/debugger.c +++ b/modules/rostests/winetests/kernel32/debugger.c @@ -970,7 +970,14 @@ static void doChild(int argc, char **argv) } else if (is_wow64) { +#ifdef __REACTOS__ + static wchar_t expected_path[MAX_PATH]; + GetWindowsDirectoryW(expected_path, MAX_PATH); + wcscat(expected_path, L"\\sysnative\\oleacc.dll"); + wcscpy( path, expected_path ); +#else wcscpy( path, L"c:\\windows\\sysnative\\oleacc.dll" ); +#endif } else goto done; diff --git a/modules/rostests/winetests/kernel32/file.c b/modules/rostests/winetests/kernel32/file.c index 0f092c3c09b..88fbb3c4779 100644 --- a/modules/rostests/winetests/kernel32/file.c +++ b/modules/rostests/winetests/kernel32/file.c @@ -5917,7 +5917,11 @@ static void test_file_readonly_access(void) static void test_find_file_stream(void) { +#ifdef __REACTOS__ + WCHAR path[MAX_PATH]; +#else WCHAR path[] = {'C',':','\\','w','i','n','d','o','w','s',0}; +#endif HANDLE handle; int error; WIN32_FIND_STREAM_DATA data; @@ -5928,6 +5932,9 @@ static void test_find_file_stream(void) return; } +#ifdef __REACTOS__ + GetWindowsDirectoryW(path, ARRAY_SIZE(path)); +#endif SetLastError(0xdeadbeef); handle = pFindFirstStreamW(path, FindStreamInfoStandard, &data, 0); error = GetLastError(); diff --git a/modules/rostests/winetests/kernel32/profile.c b/modules/rostests/winetests/kernel32/profile.c index 710e74804c0..bcca1d6019c 100644 --- a/modules/rostests/winetests/kernel32/profile.c +++ b/modules/rostests/winetests/kernel32/profile.c @@ -1219,6 +1219,16 @@ static void test_registry_mapping(void) HKEY mapping_key, mapped_key, mapping_subkey; char buffer[30]; LSTATUS ret; +#ifdef __REACTOS__ + char path[MAX_PATH]; + + /* Get the real system root, use forward slashes, and lowercase everything other than "C:\" */ + GetWindowsDirectoryA(path, sizeof(path)); + for (char *p = path; *p; p++) + if (*p == '\\') *p = '/'; + else if (p != path) *p = (char)tolower((unsigned char)*p); + strcat(path, "/winetest_map.ini"); +#endif /* impersonate ourselves to prevent registry virtualization */ ret = ImpersonateSelf(SecurityImpersonation); @@ -1256,7 +1266,11 @@ static void test_registry_mapping(void) check_profile_string("section1", "name2", "winetest_map.ini", "value2"); +#ifdef __REACTOS__ + ret = GetFileAttributesA(path); +#else ret = GetFileAttributesA("C:/windows/winetest_map.ini"); +#endif ok(ret == INVALID_FILE_ATTRIBUTES, "winetest_map.ini should not exist.\n"); ret = WritePrivateProfileStringA("section1", "name2", NULL, "winetest_map.ini"); @@ -1348,7 +1362,11 @@ static void test_registry_mapping(void) ok(ret == 22, "got %lu\n", ret); ok(!memcmp(buffer, "section1\0file_section\0", 23), "got %s\n", debugstr_an(buffer, ret)); +#ifdef __REACTOS__ + ret = DeleteFileA(path); +#else ret = DeleteFileA("C:/windows/winetest_map.ini"); +#endif ok(ret, "got error %lu\n", GetLastError()); /* Test the SYS: prefix. */ @@ -1374,7 +1392,11 @@ static void test_registry_mapping(void) check_profile_string("section2", "name2", "winetest_map.ini", "value2"); +#ifdef __REACTOS__ + ret = GetFileAttributesA(path); +#else ret = GetFileAttributesA("C:/windows/winetest_map.ini"); +#endif ok(ret == INVALID_FILE_ATTRIBUTES, "winetest_map.ini should not exist.\n"); ret = RegDeleteKeyA(mapped_key, ""); @@ -1416,7 +1438,11 @@ static void test_registry_mapping(void) check_profile_string("section3", "name1", "winetest_map.ini", "value1"); +#ifdef __REACTOS__ + ret = DeleteFileA(path); +#else ret = DeleteFileA("C:/windows/winetest_map.ini"); +#endif ok(ret, "got error %lu\n", GetLastError()); /* Test default keys. */ @@ -1426,7 +1452,11 @@ static void test_registry_mapping(void) check_profile_string("section4", "name1", "winetest_map.ini", "value1"); +#ifdef __REACTOS__ + ret = DeleteFileA(path); +#else ret = DeleteFileA("C:/windows/winetest_map.ini"); +#endif ok(ret, "got error %lu\n", GetLastError()); ret = RegSetValueExA(mapping_key, NULL, 0, REG_SZ, (BYTE *)"SYS:winetest_default", sizeof("SYS:winetest_default")); @@ -1451,7 +1481,11 @@ static void test_registry_mapping(void) check_profile_string("section5", "name2", "winetest_map.ini", "value2"); +#ifdef __REACTOS__ + ret = GetFileAttributesA(path); +#else ret = GetFileAttributesA("C:/windows/winetest_map.ini"); +#endif ok(ret == INVALID_FILE_ATTRIBUTES, "winetest_map.ini should not exist.\n"); ret = RegDeleteKeyA(HKEY_LOCAL_MACHINE, "Software\\winetest_default\\Section4"); @@ -1506,7 +1540,11 @@ static void test_registry_mapping(void) ret = WritePrivateProfileStringA("section6", "name3", "value3", "winetest_map.ini"); ok(ret, "got error %lu\n", GetLastError()); check_profile_string("section6", "name3", "winetest_map.ini", "value3"); +#ifdef __REACTOS__ + ret = DeleteFileA(path); +#else ret = DeleteFileA("C:/windows/winetest_map.ini"); +#endif ok(ret, "got error %lu\n", GetLastError()); /* Test name-specific mapping with Get/WritePrivateProfileSection(). */ @@ -1549,7 +1587,11 @@ static void test_registry_mapping(void) ok(!ret, "got error %lu\n", ret); ret = RegDeleteKeyA(HKEY_LOCAL_MACHINE, "Software\\winetest_name2"); ok(!ret, "got error %lu\n", ret); +#ifdef __REACTOS__ + ret = DeleteFileA(path); +#else ret = DeleteFileA("C:/windows/winetest_map.ini"); +#endif ok(ret, "got error %lu\n", GetLastError()); /* Test name-specific mapping with a default value. */ @@ -1603,7 +1645,11 @@ static void test_registry_mapping(void) ok(!ret, "got error %lu\n", ret); RegCloseKey(mapping_key); +#ifdef __REACTOS__ + ret = DeleteFileA(path); +#else ret = DeleteFileA("C:/windows/winetest_map.ini"); +#endif ok(!ret, "expected failure\n"); ok(GetLastError() == ERROR_FILE_NOT_FOUND, "got error %lu\n", GetLastError()); ret = RevertToSelf(); diff --git a/modules/rostests/winetests/kernel32/volume.c b/modules/rostests/winetests/kernel32/volume.c index b9438ad1909..07dc52ac576 100644 --- a/modules/rostests/winetests/kernel32/volume.c +++ b/modules/rostests/winetests/kernel32/volume.c @@ -115,6 +115,11 @@ static void test_dos_devices(void) char drivestr[3]; HANDLE file; BOOL ret; +#ifdef __REACTOS__ + char root_path[MAX_PATH], buf3[MAX_PATH]; + + GetWindowsDirectoryA(root_path, sizeof(root_path)); +#endif /* Find an unused drive letter */ drivestr[1] = ':'; @@ -128,12 +133,29 @@ static void test_dos_devices(void) return; } +#ifdef __REACTOS__ + sprintf(buf3, "%s/", root_path); + for (char *p = buf3; *p; p++) { + if (*p == '\\') *p = '/'; // Replace backslashes with forward slashes + else if (p != buf3) *p = (char)tolower((unsigned char)*p); // Lowercase everything except the first character + } + ret = DefineDosDeviceA( 0, drivestr, buf3 ); +#else ret = DefineDosDeviceA( 0, drivestr, "C:/windows/" ); +#endif ok(ret, "failed to define drive %s, error %lu\n", drivestr, GetLastError()); ret = QueryDosDeviceA( drivestr, buf, sizeof(buf) ); ok(ret, "failed to query drive %s, error %lu\n", drivestr, GetLastError()); +#ifdef __REACTOS__ + sprintf(buf3, "\\??\\%s\\", root_path); + for (char *p = buf3; *p; p++) { + if (p != (buf3 + 4)) *p = (char)tolower((unsigned char)*p); // Lowercase everything except "C:\" + } + ok(!strcmp(buf, buf3), "got path %s\n", debugstr_a(buf)); +#else ok(!strcmp(buf, "\\??\\C:\\windows\\"), "got path %s\n", debugstr_a(buf)); +#endif sprintf(buf, "%s/system32", drivestr); file = CreateFileA( buf, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, @@ -163,12 +185,20 @@ static void test_dos_devices(void) /* try with DDD_RAW_TARGET_PATH */ +#ifdef __REACTOS__ + ret = DefineDosDeviceA( DDD_RAW_TARGET_PATH, drivestr, buf3 ); +#else ret = DefineDosDeviceA( DDD_RAW_TARGET_PATH, drivestr, "\\??\\C:\\windows\\" ); +#endif ok(ret, "failed to define drive %s, error %lu\n", drivestr, GetLastError()); ret = QueryDosDeviceA( drivestr, buf, sizeof(buf) ); ok(ret, "failed to query drive %s, error %lu\n", drivestr, GetLastError()); +#ifdef __REACTOS__ + ok(!strcmp(buf, buf3), "got path %s\n", debugstr_a(buf)); +#else ok(!strcmp(buf, "\\??\\C:\\windows\\"), "got path %s\n", debugstr_a(buf)); +#endif sprintf(buf, "%s/system32", drivestr); file = CreateFileA( buf, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, @@ -859,6 +889,30 @@ static void test_GetVolumePathNameA(void) DWORD error; UINT i; +#ifdef __REACTOS__ + char sysroot[MAX_PATH]; + char patched[MAX_PATH]; + + /* Get the real system root and lowercase everything other than "C:\""*/ + GetWindowsDirectoryA(sysroot, sizeof(sysroot)); + for (char *p = sysroot; *p; p++) + if (p != sysroot) *p = (char)tolower((unsigned char)*p);; + + /* Patch test 8: "C:\\windows\\system32" */ + sprintf(patched, "%s\\system32", sysroot); + test_paths[8].file_name = _strdup(patched); + + /* Patch test 9: "C:\\windows\\system32\\AnInvalidFolder" */ + sprintf(patched, "%s\\system32\\AnInvalidFolder", sysroot); + test_paths[9].file_name = _strdup(patched); + + /* Patch test 30: "C:/windows/system32" (forward slashes) */ + sprintf(patched, "%s/system32", sysroot); + for (char *p = patched; *p; p++) + if (*p == '\\') *p = '/'; + test_paths[30].file_name = _strdup(patched); +#endif + for (i=0; iFileNameLength == wcslen(buf2) * sizeof(WCHAR), "got length %lu\n", name->FileNameLength); + ok(!wcsnicmp(name->FileName, buf2, wcslen(buf2)), "got name %s\n", + debugstr_wn(name->FileName, name->FileNameLength / sizeof(WCHAR))); +#else ok(name->FileNameLength == wcslen(L"\\windows") * sizeof(WCHAR), "got length %lu\n", name->FileNameLength); ok(!wcsnicmp(name->FileName, L"\\windows", wcslen(L"\\windows")), "got name %s\n", debugstr_wn(name->FileName, name->FileNameLength / sizeof(WCHAR))); +#endif CloseHandle( file ); @@ -1431,15 +1516,28 @@ static void test_mounted_folder(void) ret = GetVolumeInformationA( "C:\\winetest_mnt\\", NULL, 0, NULL, NULL, NULL, NULL, 0 ); ok(ret, "got error %lu\n", GetLastError()); +#ifdef __REACTOS__ + ret = GetVolumePathNameA( buf, path, sizeof(path) ); +#else ret = GetVolumePathNameA( "C:\\winetest_mnt\\windows", path, sizeof(path) ); +#endif ok(ret, "got error %lu\n", GetLastError()); ok(!strcmp(path, "C:\\winetest_mnt\\"), "got %s\n", debugstr_a(path)); SetLastError(0xdeadbeef); +#ifdef __REACTOS__ + strcat(buf, "\\"); + ret = GetVolumeNameForVolumeMountPointA( buf, path, sizeof(path) ); +#else ret = GetVolumeNameForVolumeMountPointA( "C:\\winetest_mnt\\windows\\", path, sizeof(path) ); +#endif ok(!ret, "expected failure\n"); ok(GetLastError() == ERROR_NOT_A_REPARSE_POINT, "wrong error %lu\n", GetLastError()); SetLastError(0xdeadbeef); +#ifdef __REACTOS__ + ret = GetVolumeInformationA( buf, NULL, 0, NULL, NULL, NULL, NULL, 0 ); +#else ret = GetVolumeInformationA( "C:\\winetest_mnt\\windows\\", NULL, 0, NULL, NULL, NULL, NULL, 0 ); +#endif ok(!ret, "expected failure\n"); ok(GetLastError() == ERROR_DIR_NOT_ROOT, "wrong error %lu\n", GetLastError()); @@ -1502,15 +1600,28 @@ static void test_mounted_folder(void) ret = GetVolumeInformationA( "C:\\winetest_link\\", NULL, 0, NULL, NULL, NULL, NULL, 0 ); ok(ret, "got error %lu\n", GetLastError()); +#ifdef __REACTOS__ + sprintf(buf, "C:\\winetest_link\\%s", sysroot + 3); + ret = GetVolumePathNameA( buf, path, sizeof(path) ); +#else ret = GetVolumePathNameA( "C:\\winetest_link\\windows\\", path, sizeof(path) ); +#endif ok(ret, "got error %lu\n", GetLastError()); ok(!strcmp(path, "C:\\"), "got %s\n", path); SetLastError(0xdeadbeef); +#ifdef __REACTOS__ + ret = GetVolumeNameForVolumeMountPointA( buf, path, sizeof(path) ); +#else ret = GetVolumeNameForVolumeMountPointA( "C:\\winetest_link\\windows\\", path, sizeof(path) ); +#endif ok(!ret, "expected failure\n"); ok(GetLastError() == ERROR_NOT_A_REPARSE_POINT, "wrong error %lu\n", GetLastError()); SetLastError(0xdeadbeef); +#ifdef __REACTOS__ + ret = GetVolumeInformationA( buf, NULL, 0, NULL, NULL, NULL, NULL, 0 ); +#else ret = GetVolumeInformationA( "C:\\winetest_link\\windows\\", NULL, 0, NULL, NULL, NULL, NULL, 0 ); +#endif ok(!ret, "expected failure\n"); ok(GetLastError() == ERROR_DIR_NOT_ROOT, "wrong error %lu\n", GetLastError()); @@ -1526,20 +1637,35 @@ static void test_mounted_folder(void) /* The following test makes it clear that when we encounter a symlink * while resolving, we resolve *every* junction in the path, i.e. both * mount points and symlinks. */ +#ifdef __REACTOS__ + sprintf(buf, "C:\\winetest_link\\winetest_mnt\\winetest_link\\%s\\", sysroot + 3); + ret = GetVolumePathNameA( buf, path, sizeof(path) ); +#else ret = GetVolumePathNameA( "C:\\winetest_link\\winetest_mnt\\winetest_link\\windows\\", path, sizeof(path) ); +#endif ok(ret, "got error %lu\n", GetLastError()); ok(!strcmp(path, "C:\\") || !strcmp(path, "C:\\winetest_link\\winetest_mnt\\") /* 2008 */, "got %s\n", debugstr_a(path)); +#ifdef __REACTOS__ + file = CreateFileA( buf, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL ); +#else file = CreateFileA( "C:\\winetest_link\\winetest_mnt\\winetest_link\\windows\\", 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL ); +#endif ok(file != INVALID_HANDLE_VALUE, "got error %lu\n", GetLastError()); status = NtQueryInformationFile( file, &io, name, sizeof(name_buffer), FileNameInformation ); ok(!status, "got status %#lx\n", status); +#ifdef __REACTOS__ + ok(name->FileNameLength == wcslen(buf2) * sizeof(WCHAR), "got length %lu\n", name->FileNameLength); + ok(!wcsnicmp(name->FileName, buf2, wcslen(buf2)), "got name %s\n", + debugstr_wn(name->FileName, name->FileNameLength / sizeof(WCHAR))); +#else ok(name->FileNameLength == wcslen(L"\\windows") * sizeof(WCHAR), "got length %lu\n", name->FileNameLength); ok(!wcsnicmp(name->FileName, L"\\windows", wcslen(L"\\windows")), "got name %s\n", debugstr_wn(name->FileName, name->FileNameLength / sizeof(WCHAR))); +#endif CloseHandle( file ); @@ -1573,6 +1699,15 @@ static void test_GetVolumeInformationByHandle(void) HANDLE file; NTSTATUS status; BOOL ret; +#ifdef __REACTOS__ + char sysroot[MAX_PATH]; + + GetWindowsDirectoryA(sysroot, sizeof(sysroot)); + for (char *p = sysroot; *p; p++) { + if (*p == '\\') *p = '/'; // Use forward slashes + else if (p != sysroot) *p = (char)tolower((unsigned char)*p); // Lowercase everything except "C:\" + } +#endif #if defined(__REACTOS__) && DLL_EXPORT_VERSION >= 0x600 /* FIXME: GetVolumeInformationByHandleW is a STUB on ReactOS! */ @@ -1585,8 +1720,13 @@ static void test_GetVolumeInformationByHandle(void) return; } +#ifdef __REACTOS__ + file = CreateFileA( sysroot, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, + OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL ); +#else file = CreateFileA( "C:/windows", 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL ); +#endif ok(file != INVALID_HANDLE_VALUE, "failed to open file, error %lu\n", GetLastError()); SetLastError(0xdeadbeef);