2 * PROJECT: appshim_apitest
3 * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
4 * PURPOSE: Tests for versionlie shims
5 * COPYRIGHT: Copyright 2015-2018 Mark Jansen (mark.jansen@reactos.org)
9 #define WIN32_NO_STATUS
16 #include "wine/test.h"
19 #include "appshim_apitest.h"
21 static tGETHOOKAPIS pGetHookAPIs
;
24 static DWORD g_WinVersion
;
25 #define WINVER_WINXP 0x0501
28 typedef struct VersionLieInfo
35 WORD wServicePackMajor
;
36 WORD wServicePackMinor
;
39 typedef BOOL(WINAPI
* GETVERSIONEXAPROC
)(LPOSVERSIONINFOEXA
);
40 typedef BOOL(WINAPI
* GETVERSIONEXWPROC
)(LPOSVERSIONINFOEXW
);
41 typedef DWORD(WINAPI
* GETVERSIONPROC
)(void);
43 void expect_shim_imp(PHOOKAPI hook
, PCSTR library
, PCSTR function
, PCSTR shim
, int* same
)
45 int lib
= lstrcmpA(library
, hook
->LibraryName
);
46 int fn
= lstrcmpA(function
, hook
->FunctionName
);
47 winetest_ok(lib
== 0, "Expected LibrarayName to be %s, was: %s for %s\n", library
, hook
->LibraryName
, shim
);
48 winetest_ok(fn
== 0, "Expected FunctionName to be %s, was: %s for %s\n", function
, hook
->FunctionName
, shim
);
49 *same
= (lib
== 0 && fn
== 0);
52 static void verify_shima_imp(PHOOKAPI hook
, const VersionLieInfo
* info
, PCSTR shim
, int same
)
54 OSVERSIONINFOEXA v1
= { sizeof(v1
), 0 }, v2
= { sizeof(v2
), 0 };
59 skip("Skipping implementation tests for %s\n", shim
);
63 while (v1
.dwOSVersionInfoSize
)
65 ok1
= GetVersionExA((LPOSVERSIONINFOA
)&v1
);
66 hook
->OriginalFunction
= GetVersionExA
;
68 ok2
= ((GETVERSIONEXAPROC
)hook
->ReplacementFunction
)(&v2
);
70 winetest_ok(ok1
== ok2
, "Expected ok1 to equal ok2, was: %i, %i for %s\n", ok1
, ok2
, shim
);
73 char szCSDVersion
[128] = "";
74 winetest_ok(v1
.dwOSVersionInfoSize
== v2
.dwOSVersionInfoSize
, "Expected dwOSVersionInfoSize to be equal, was: %u, %u for %s\n", v1
.dwOSVersionInfoSize
, v2
.dwOSVersionInfoSize
, shim
);
75 winetest_ok(info
->dwMajorVersion
== v2
.dwMajorVersion
, "Expected dwMajorVersion to be equal, was: %u, %u for %s\n", info
->dwMajorVersion
, v2
.dwMajorVersion
, shim
);
76 winetest_ok(info
->dwMinorVersion
== v2
.dwMinorVersion
, "Expected dwMinorVersion to be equal, was: %u, %u for %s\n", info
->dwMinorVersion
, v2
.dwMinorVersion
, shim
);
77 winetest_ok(info
->dwBuildNumber
== v2
.dwBuildNumber
, "Expected dwBuildNumber to be equal, was: %u, %u for %s\n", info
->dwBuildNumber
, v2
.dwBuildNumber
, shim
);
78 winetest_ok(info
->dwPlatformId
== v2
.dwPlatformId
, "Expected dwPlatformId to be equal, was: %u, %u for %s\n", info
->dwPlatformId
, v2
.dwPlatformId
, shim
);
80 if (info
->wServicePackMajor
)
81 StringCchPrintfA(szCSDVersion
, _countof(szCSDVersion
), "Service Pack %u", info
->wServicePackMajor
);
82 winetest_ok(lstrcmpA(szCSDVersion
, v2
.szCSDVersion
) == 0, "Expected szCSDVersion to be equal, was: %s, %s for %s\n", szCSDVersion
, v2
.szCSDVersion
, shim
);
84 if (v1
.dwOSVersionInfoSize
== sizeof(OSVERSIONINFOEXA
))
86 if (info
->dwPlatformId
!= VER_PLATFORM_WIN32_WINDOWS
)
88 winetest_ok(info
->wServicePackMajor
== v2
.wServicePackMajor
, "Expected wServicePackMajor to be equal, was: %i, %i for %s\n", info
->wServicePackMajor
, v2
.wServicePackMajor
, shim
);
89 winetest_ok(info
->wServicePackMinor
== v2
.wServicePackMinor
, "Expected wServicePackMinor to be equal, was: %i, %i for %s\n", info
->wServicePackMinor
, v2
.wServicePackMinor
, shim
);
93 winetest_ok(v1
.wServicePackMajor
== v2
.wServicePackMajor
, "Expected wServicePackMajor to be equal, was: %i, %i for %s\n", v1
.wServicePackMajor
, v2
.wServicePackMajor
, shim
);
94 winetest_ok(v1
.wServicePackMinor
== v2
.wServicePackMinor
, "Expected wServicePackMinor to be equal, was: %i, %i for %s\n", v1
.wServicePackMinor
, v2
.wServicePackMinor
, shim
);
96 winetest_ok(v1
.wSuiteMask
== v2
.wSuiteMask
, "Expected wSuiteMask to be equal, was: %i, %i for %s\n", v1
.wSuiteMask
, v2
.wSuiteMask
, shim
);
97 winetest_ok(v1
.wProductType
== v2
.wProductType
, "Expected wProductType to be equal, was: %i, %i for %s\n", v1
.wProductType
, v2
.wProductType
, shim
);
98 winetest_ok(v1
.wReserved
== v2
.wReserved
, "Expected wReserved to be equal, was: %i, %i for %s\n", v1
.wReserved
, v2
.wReserved
, shim
);
102 winetest_ok(v1
.wServicePackMajor
== 0 && v2
.wServicePackMajor
== 0, "Expected wServicePackMajor to be 0, was: %i, %i for %s\n", v1
.wServicePackMajor
, v2
.wServicePackMajor
, shim
);
103 winetest_ok(v1
.wServicePackMinor
== 0 && v2
.wServicePackMinor
== 0, "Expected wServicePackMinor to be 0, was: %i, %i for %s\n", v1
.wServicePackMinor
, v2
.wServicePackMinor
, shim
);
104 winetest_ok(v1
.wSuiteMask
== 0 && v2
.wSuiteMask
== 0, "Expected wSuiteMask to be 0, was: %i, %i for %s\n", v1
.wSuiteMask
, v2
.wSuiteMask
, shim
);
105 winetest_ok(v1
.wProductType
== 0 && v2
.wProductType
== 0, "Expected wProductType to be 0, was: %i, %i for %s\n", v1
.wProductType
, v2
.wProductType
, shim
);
106 winetest_ok(v1
.wReserved
== 0 && v2
.wReserved
== 0, "Expected wReserved to be 0, was: %i, %i for %s\n", v1
.wReserved
, v2
.wReserved
, shim
);
110 ZeroMemory(&v1
, sizeof(v1
));
111 ZeroMemory(&v2
, sizeof(v2
));
112 if (v1
.dwOSVersionInfoSize
== sizeof(OSVERSIONINFOEXA
))
113 v1
.dwOSVersionInfoSize
= v2
.dwOSVersionInfoSize
= sizeof(OSVERSIONINFOA
);
117 static void verify_shimw_imp(PHOOKAPI hook
, const VersionLieInfo
* info
, PCSTR shim
, int same
, int first_might_be_broken
)
119 OSVERSIONINFOEXW v1
= { sizeof(v1
), 0 }, v2
= { sizeof(v2
), 0 };
120 BOOL ok1
, ok2
, first
= TRUE
;
124 skip("Skipping implementation tests for %s\n", shim
);
128 while (v1
.dwOSVersionInfoSize
)
130 ok1
= GetVersionExW((LPOSVERSIONINFOW
)&v1
);
131 hook
->OriginalFunction
= GetVersionExW
;
133 ok2
= ((GETVERSIONEXWPROC
)hook
->ReplacementFunction
)(&v2
);
135 if (first_might_be_broken
&& first
&& ok1
== TRUE
&& ok2
== FALSE
)
137 skip("Skipping first check because 0x%x is (falsely) not accepted by the shim %s\n", sizeof(v1
), shim
);
141 winetest_ok(ok1
== ok2
, "Expected ok1 to equal ok2, was: %i, %i for %s(first:%d)\n", ok1
, ok2
, shim
, first
);
145 WCHAR szCSDVersion
[128] = { 0 };
146 winetest_ok(v1
.dwOSVersionInfoSize
== v2
.dwOSVersionInfoSize
, "Expected dwOSVersionInfoSize to be equal, was: %u, %u for %s\n", v1
.dwOSVersionInfoSize
, v2
.dwOSVersionInfoSize
, shim
);
147 winetest_ok(info
->dwMajorVersion
== v2
.dwMajorVersion
, "Expected dwMajorVersion to be equal, was: %u, %u for %s\n", info
->dwMajorVersion
, v2
.dwMajorVersion
, shim
);
148 winetest_ok(info
->dwMinorVersion
== v2
.dwMinorVersion
, "Expected dwMinorVersion to be equal, was: %u, %u for %s\n", info
->dwMinorVersion
, v2
.dwMinorVersion
, shim
);
149 winetest_ok(info
->dwBuildNumber
== v2
.dwBuildNumber
, "Expected dwBuildNumber to be equal, was: %u, %u for %s\n", info
->dwBuildNumber
, v2
.dwBuildNumber
, shim
);
150 winetest_ok(info
->dwPlatformId
== v2
.dwPlatformId
, "Expected dwPlatformId to be equal, was: %u, %u for %s\n", info
->dwPlatformId
, v2
.dwPlatformId
, shim
);
152 if (info
->wServicePackMajor
)
153 StringCchPrintfW(szCSDVersion
, _countof(szCSDVersion
), L
"Service Pack %u", info
->wServicePackMajor
);
154 winetest_ok(lstrcmpW(szCSDVersion
, v2
.szCSDVersion
) == 0, "Expected szCSDVersion to be equal, was: %s, %s for %s\n", wine_dbgstr_w(szCSDVersion
), wine_dbgstr_w(v2
.szCSDVersion
), shim
);
156 if (v1
.dwOSVersionInfoSize
== sizeof(OSVERSIONINFOEXW
))
158 if (info
->dwPlatformId
!= VER_PLATFORM_WIN32_WINDOWS
)
160 winetest_ok(info
->wServicePackMajor
== v2
.wServicePackMajor
, "Expected wServicePackMajor to be equal, was: %i, %i for %s\n", info
->wServicePackMajor
, v2
.wServicePackMajor
, shim
);
161 winetest_ok(info
->wServicePackMinor
== v2
.wServicePackMinor
, "Expected wServicePackMinor to be equal, was: %i, %i for %s\n", info
->wServicePackMinor
, v2
.wServicePackMinor
, shim
);
165 winetest_ok(v1
.wServicePackMajor
== v2
.wServicePackMajor
, "Expected wServicePackMajor to be equal, was: %i, %i for %s\n", v1
.wServicePackMajor
, v2
.wServicePackMajor
, shim
);
166 winetest_ok(v1
.wServicePackMinor
== v2
.wServicePackMinor
, "Expected wServicePackMinor to be equal, was: %i, %i for %s\n", v1
.wServicePackMinor
, v2
.wServicePackMinor
, shim
);
168 winetest_ok(v1
.wSuiteMask
== v2
.wSuiteMask
, "Expected wSuiteMask to be equal, was: %i, %i for %s\n", v1
.wSuiteMask
, v2
.wSuiteMask
, shim
);
169 winetest_ok(v1
.wProductType
== v2
.wProductType
, "Expected wProductType to be equal, was: %i, %i for %s\n", v1
.wProductType
, v2
.wProductType
, shim
);
170 winetest_ok(v1
.wReserved
== v2
.wReserved
, "Expected wReserved to be equal, was: %i, %i for %s\n", v1
.wReserved
, v2
.wReserved
, shim
);
174 winetest_ok(v1
.wServicePackMajor
== 0 && v2
.wServicePackMajor
== 0, "Expected wServicePackMajor to be 0, was: %i, %i for %s\n", v1
.wServicePackMajor
, v2
.wServicePackMajor
, shim
);
175 winetest_ok(v1
.wServicePackMinor
== 0 && v2
.wServicePackMinor
== 0, "Expected wServicePackMinor to be 0, was: %i, %i for %s\n", v1
.wServicePackMinor
, v2
.wServicePackMinor
, shim
);
176 winetest_ok(v1
.wSuiteMask
== 0 && v2
.wSuiteMask
== 0, "Expected wSuiteMask to be 0, was: %i, %i for %s\n", v1
.wSuiteMask
, v2
.wSuiteMask
, shim
);
177 winetest_ok(v1
.wProductType
== 0 && v2
.wProductType
== 0, "Expected wProductType to be 0, was: %i, %i for %s\n", v1
.wProductType
, v2
.wProductType
, shim
);
178 winetest_ok(v1
.wReserved
== 0 && v2
.wReserved
== 0, "Expected wReserved to be 0, was: %i, %i for %s\n", v1
.wReserved
, v2
.wReserved
, shim
);
182 ZeroMemory(&v1
, sizeof(v1
));
183 ZeroMemory(&v2
, sizeof(v2
));
184 if (v1
.dwOSVersionInfoSize
== sizeof(OSVERSIONINFOEXW
))
185 v1
.dwOSVersionInfoSize
= v2
.dwOSVersionInfoSize
= sizeof(OSVERSIONINFOW
);
190 static void verify_shim_imp(PHOOKAPI hook
, const VersionLieInfo
* info
, PCSTR shim
, int same
)
195 skip("Skipping implementation tests for %s\n", shim
);
198 ver
= ((GETVERSIONPROC
)hook
->ReplacementFunction
)();
199 winetest_ok(info
->FullVersion
== ver
, "Expected GetVersion to return 0x%x, was: 0x%x for %s\n", info
->FullVersion
, ver
, shim
);
203 #define verify_shima (winetest_set_location(__FILE__, __LINE__), 0) ? (void)0 : verify_shima_imp
204 #define verify_shimw (winetest_set_location(__FILE__, __LINE__), 0) ? (void)0 : verify_shimw_imp
205 #define verify_shim (winetest_set_location(__FILE__, __LINE__), 0) ? (void)0 : verify_shim_imp
210 static void run_test(LPCSTR shim
, const VersionLieInfo
* info
)
213 WCHAR wide_shim
[50] = { 0 };
216 MultiByteToWideChar(CP_ACP
, 0, shim
, -1, wide_shim
, 50);
217 hook
= pGetHookAPIs("", wide_shim
, &num_shims
);
218 ver
= (info
->dwMajorVersion
<< 8) | info
->dwMinorVersion
;
221 skip("Skipping tests for layers (%s) not present in this os (0x%x)\n", shim
, g_WinVersion
);
224 ok(hook
!= NULL
, "Expected hook to be a valid pointer for %s\n", shim
);
225 if (info
->dwPlatformId
== VER_PLATFORM_WIN32_WINDOWS
)
227 ok(num_shims
== 3, "Expected num_shims to be 3, was: %u for %s\n", num_shims
, shim
);
228 if (hook
&& num_shims
== 3)
230 int off
= info
->dwBuildNumber
== 0x040A08AE ? 0 : 1, same
= 0;
231 expect_shim(hook
+ ((0+off
)%3), "KERNEL32.DLL", "GetVersionExA", shim
, &same
);
232 verify_shima(hook
+ ((0+off
)%3), info
, shim
, same
);
233 expect_shim(hook
+ ((1+off
)%3), "KERNEL32.DLL", "GetVersionExW", shim
, &same
);
234 verify_shimw(hook
+ ((1+off
)%3), info
, shim
, same
, 0);
235 expect_shim(hook
+ ((2+off
)%3), "KERNEL32.DLL", "GetVersion", shim
, &same
);
236 verify_shim(hook
+ ((2+off
)%3), info
, shim
, same
);
241 int shimnum_ok
= num_shims
== 4 || ((ver
< WINVER_WINXP
) && (num_shims
== 3));
242 ok(shimnum_ok
, "Expected num_shims to be 4%s, was: %u for %s\n", ((ver
< WINVER_WINXP
) ? " or 3":""), num_shims
, shim
);
243 if (hook
&& shimnum_ok
)
246 expect_shim(hook
+ 0, "KERNEL32.DLL", "GetVersionExA", shim
, &same
);
247 verify_shima(hook
+ 0, info
, shim
, same
);
248 expect_shim(hook
+ 1, "KERNEL32.DLL", "GetVersionExW", shim
, &same
);
249 verify_shimw(hook
+ 1, info
, shim
, same
, 0);
250 expect_shim(hook
+ 2, "KERNEL32.DLL", "GetVersion", shim
, &same
);
251 verify_shim(hook
+ 2, info
, shim
, same
);
254 expect_shim(hook
+ 3, "NTDLL.DLL", "RtlGetVersion", shim
, &same
);
255 verify_shimw(hook
+ 3, info
, shim
, same
, 1);
262 VersionLieInfo g_Win95
= { 0xC3B60004, 4, 0, 950, VER_PLATFORM_WIN32_WINDOWS
, 0, 0 };
263 VersionLieInfo g_WinNT4SP5
= { 0x05650004, 4, 0, 1381, VER_PLATFORM_WIN32_NT
, 5, 0 };
264 VersionLieInfo g_Win98
= { 0xC0000A04, 4, 10, 0x040A08AE, VER_PLATFORM_WIN32_WINDOWS
, 0, 0 };
266 VersionLieInfo g_Win2000
= { 0x08930005, 5, 0, 2195, VER_PLATFORM_WIN32_NT
, 0, 0 };
267 VersionLieInfo g_Win2000SP1
= { 0x08930005, 5, 0, 2195, VER_PLATFORM_WIN32_NT
, 1, 0 };
268 VersionLieInfo g_Win2000SP2
= { 0x08930005, 5, 0, 2195, VER_PLATFORM_WIN32_NT
, 2, 0 };
269 VersionLieInfo g_Win2000SP3
= { 0x08930005, 5, 0, 2195, VER_PLATFORM_WIN32_NT
, 3, 0 };
271 VersionLieInfo g_WinXP
= { 0x0a280105, 5, 1, 2600, VER_PLATFORM_WIN32_NT
, 0, 0 };
272 VersionLieInfo g_WinXPSP1
= { 0x0a280105, 5, 1, 2600, VER_PLATFORM_WIN32_NT
, 1, 0 };
273 VersionLieInfo g_WinXPSP2
= { 0x0a280105, 5, 1, 2600, VER_PLATFORM_WIN32_NT
, 2, 0 };
274 VersionLieInfo g_WinXPSP3
= { 0x0a280105, 5, 1, 2600, VER_PLATFORM_WIN32_NT
, 3, 0 };
276 VersionLieInfo g_Win2k3RTM
= { 0x0ece0205, 5, 2, 3790, VER_PLATFORM_WIN32_NT
, 0, 0 };
277 VersionLieInfo g_Win2k3SP1
= { 0x0ece0205, 5, 2, 3790, VER_PLATFORM_WIN32_NT
, 1, 0 };
279 VersionLieInfo g_WinVistaRTM
= { 0x17700006, 6, 0, 6000, VER_PLATFORM_WIN32_NT
, 0, 0 };
280 VersionLieInfo g_WinVistaSP1
= { 0x17710006, 6, 0, 6001, VER_PLATFORM_WIN32_NT
, 1, 0 };
281 VersionLieInfo g_WinVistaSP2
= { 0x17720006, 6, 0, 6002, VER_PLATFORM_WIN32_NT
, 2, 0 };
283 VersionLieInfo g_Win7RTM
= { 0x1db00106, 6, 1, 7600, VER_PLATFORM_WIN32_NT
, 0, 0 };
284 VersionLieInfo g_Win7SP1
= { 0x1db10106, 6, 1, 7601, VER_PLATFORM_WIN32_NT
, 1, 0 }; /* ReactOS specific. Windows does not have this version lie */
286 VersionLieInfo g_Win8RTM
= { 0x23f00206, 6, 2, 9200, VER_PLATFORM_WIN32_NT
, 0, 0 };
287 VersionLieInfo g_Win81RTM
= { 0x25800306, 6, 3, 9600, VER_PLATFORM_WIN32_NT
, 0, 0 };
290 DWORD
get_host_winver(void)
292 RTL_OSVERSIONINFOEXW rtlinfo
= {0};
293 void (__stdcall
* pRtlGetVersion
)(RTL_OSVERSIONINFOEXW
*);
294 pRtlGetVersion
= (void (__stdcall
*)(RTL_OSVERSIONINFOEXW
*))GetProcAddress(GetModuleHandleA("ntdll"), "RtlGetVersion");
296 rtlinfo
.dwOSVersionInfoSize
= sizeof(rtlinfo
);
297 pRtlGetVersion(&rtlinfo
);
298 return (rtlinfo
.dwMajorVersion
<< 8) | rtlinfo
.dwMinorVersion
;
301 BOOL
LoadShimDLL(PCWSTR ShimDll
, HMODULE
* module
, tGETHOOKAPIS
* ppGetHookAPIs
)
303 static tSDBGETAPPPATCHDIR pSdbGetAppPatchDir
= NULL
;
305 WCHAR buf
[MAX_PATH
] = {0};
306 if (!pSdbGetAppPatchDir
)
308 dll
= LoadLibraryA("apphelp.dll");
309 pSdbGetAppPatchDir
= (tSDBGETAPPPATCHDIR
)GetProcAddress(dll
, "SdbGetAppPatchDir");
311 if (!pSdbGetAppPatchDir
)
313 skip("Unable to retrieve SdbGetAppPatchDir (%p, %p)\n", dll
, pSdbGetAppPatchDir
);
317 if (!pSdbGetAppPatchDir
|| !SUCCEEDED(pSdbGetAppPatchDir(NULL
, buf
, MAX_PATH
)))
319 skip("Unable to retrieve AppPatch dir, building manually\n");
320 if (!GetSystemWindowsDirectoryW(buf
, MAX_PATH
))
322 skip("Unable to build AppPatch name(1)\n");
325 if (!SUCCEEDED(StringCchCatW(buf
, _countof(buf
), L
"\\AppPatch")))
327 skip("Unable to build AppPatch name(2)\n");
331 if (!SUCCEEDED(StringCchCatW(buf
, _countof(buf
), L
"\\")) ||
332 !SUCCEEDED(StringCchCatW(buf
, _countof(buf
), ShimDll
)))
334 skip("Unable to append dll name\n");
338 dll
= LoadLibraryW(buf
);
341 skip("Unable to load shim dll from AppPatch\n");
342 GetSystemWindowsDirectoryW(buf
, _countof(buf
));
344 if (SUCCEEDED(StringCchCatW(buf
, _countof(buf
), L
"\\System32\\")) &&
345 SUCCEEDED(StringCchCatW(buf
, _countof(buf
), ShimDll
)))
347 dll
= LoadLibraryW(buf
);
352 skip("Unable to load shim dll from System32 (Recent Win10)\n");
357 *ppGetHookAPIs
= (tGETHOOKAPIS
)GetProcAddress(dll
, "GetHookAPIs");
359 return *ppGetHookAPIs
!= NULL
;
363 tGETHOOKAPIS
LoadShimDLL2(PCWSTR ShimDll
)
366 tGETHOOKAPIS pGetHookAPIs
;
368 if (LoadShimDLL(ShimDll
, &module
, &pGetHookAPIs
))
371 skip("No GetHookAPIs found\n");
378 START_TEST(versionlie
)
380 pGetHookAPIs
= LoadShimDLL2(L
"aclayers.dll");
385 g_WinVersion
= get_host_winver();
387 run_test("Win95VersionLie", &g_Win95
);
388 run_test("WinNT4SP5VersionLie", &g_WinNT4SP5
);
389 run_test("Win98VersionLie", &g_Win98
);
390 run_test("Win2000VersionLie", &g_Win2000
);
391 run_test("Win2000SP1VersionLie", &g_Win2000SP1
);
392 run_test("Win2000SP2VersionLie", &g_Win2000SP2
);
393 run_test("Win2000SP3VersionLie", &g_Win2000SP3
);
394 run_test("WinXPVersionLie", &g_WinXP
);
395 run_test("WinXPSP1VersionLie", &g_WinXPSP1
);
396 run_test("WinXPSP2VersionLie", &g_WinXPSP2
);
397 run_test("WinXPSP3VersionLie", &g_WinXPSP3
);
398 run_test("Win2k3RTMVersionLie", &g_Win2k3RTM
);
399 run_test("Win2k3SP1VersionLie", &g_Win2k3SP1
);
400 run_test("VistaRTMVersionLie", &g_WinVistaRTM
);
401 run_test("VistaSP1VersionLie", &g_WinVistaSP1
);
402 run_test("VistaSP2VersionLie", &g_WinVistaSP2
);
403 run_test("Win7RTMVersionLie", &g_Win7RTM
);
404 run_test("Win7SP1VersionLie", &g_Win7SP1
); /* ReactOS specific. Windows does not have this version lie */
405 run_test("Win8RTMVersionLie", &g_Win8RTM
);
406 run_test("Win81RTMVersionLie", &g_Win81RTM
);