ReactOS 0.4.17-dev-1196-gb6224c3
apitest.h
Go to the documentation of this file.
1#ifndef _APITEST_H
2#define _APITEST_H
3
4/* The user must #define STANDALONE if it uses this header in testlist.c */
5#define WIN32_NO_STATUS
6#include <wine/test.h>
7#undef WIN32_NO_STATUS
8
9/* See kmtests/include/kmt_test.h */
10#define InvalidPointer ((PVOID)0x5555555555555555ULL)
11// #define InvalidPointer ((PVOID)0x0123456789ABCDEFULL)
12
13/* Magic pointers come from KUSER_SHARED_DATA; needed to get true NT version on Windows 8+ */
14#define KUSER_SHARED_DATA_UMPTR 0x7FFE0000
15#define GetMajorNTVersion() (*(ULONG*)(KUSER_SHARED_DATA_UMPTR + 0x026C))
16#define GetMinorNTVersion() (*(ULONG*)(KUSER_SHARED_DATA_UMPTR + 0x0270))
17#define GetNTVersion() ((GetMajorNTVersion() << 8) | GetMinorNTVersion())
18#define GENERATE_NTDDI(Major, Minor, ServicePack, Subversion) \
19 (((Major) << 24) | ((Minor) << 16) | ((ServicePack) << 8) | (Subversion))
20#define NTDDI_MIN 0UL
21#define NTDDI_MAX 0xFFFFFFFFUL
22
24{
25 ULONG NTBuildNo, NTMajor, NTMinor, ServicePack, Subversion;
26
28 {
29 NTMajor = GetMajorNTVersion();
30 NTMinor = GetMinorNTVersion();
31 ServicePack = 0;
32
33 if (NTMajor > 6)
34 NTBuildNo = (*(ULONG*)(KUSER_SHARED_DATA_UMPTR + 0x0260));
35 else
36 NTBuildNo = 0;
37
38 switch (NTBuildNo)
39 {
40 // Windows 10
41 case 10240: Subversion = 0; break; // 1507
42 case 10586: Subversion = 1; break; // 1511
43 case 14393: Subversion = 2; break; // 1607
44 case 15063: Subversion = 3; break; // 1703
45 case 16299: Subversion = 4; break; // 1709
46 case 17134: Subversion = 5; break; // 1803
47 case 17763: Subversion = 6; break; // 1809
48 case 18362: Subversion = 7; break; // 1903
49 case 18363: Subversion = 8; break; // 1909
50 case 19041: Subversion = 9; break; // 2004
51 case 19042: Subversion = 10; break; // 20H2
52 case 19043: Subversion = 11; break; // 21H1
53 case 19044: Subversion = 12; break; // 21H2
54 case 19045: Subversion = 13; break; // 22H2
55
56 // Windows 11
57 case 22000: Subversion = 11; break; // 21H2 / Cobalt -> NTDDI_WIN11
58 case 22621: Subversion = 12; break; // 22H2 / Nickel -> NTDDI_WIN11_NI
59 case 22631: Subversion = 14; break; // 23H2 / Zinc -> NTDDI_WIN11_ZN
60 case 26100: Subversion = 16; break; // 24H2 / Germanium -> NTDDI_WIN11_GE
61 case 26200: Subversion = 17; break; // 25H2 / Selenium -> NTDDI_WIN11_SE
62 case 26300: Subversion = 17; break; // 26H2 / Selenium -> NTDDI_WIN11_SE (?)
63
64 default: Subversion = 0; break; // Unknown build
65 }
66 }
67 else
68 {
69 OSVERSIONINFOEXW OSVersion;
70
71 OSVersion.dwOSVersionInfoSize = sizeof(OSVersion);
72
73 if (GetVersionExW((LPOSVERSIONINFOW)&OSVersion))
74 {
75 NTMajor = OSVersion.dwMajorVersion;
76 NTMinor = OSVersion.dwMinorVersion;
77 ServicePack = OSVersion.wServicePackMajor;
78 Subversion = 0;
79 }
80 else
81 {
82 trace("Estimating an NTDDI value, GetVersionEx failed.\n");
83 NTMajor = GetMajorNTVersion();
84 NTMinor = GetMinorNTVersion();
85 ServicePack = 0;
86 Subversion = 0;
87 }
88 }
89
90 return GENERATE_NTDDI(NTMajor, NTMinor, ServicePack, Subversion);
91}
92
93#include <pseh/pseh2.h>
94
95#define StartSeh() \
96{ \
97 NTSTATUS ExceptionStatus = STATUS_SUCCESS; \
98 _SEH2_TRY \
99 {
100
101#define EndSeh(ExpectedStatus) \
102 } \
103 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) \
104 { \
105 ExceptionStatus = _SEH2_GetExceptionCode(); \
106 } \
107 _SEH2_END; \
108 ok(ExceptionStatus == (ExpectedStatus), \
109 "Exception 0x%08lx, expected 0x%08lx\n", \
110 ExceptionStatus, (ExpectedStatus)); \
111}
112
113#define ok_hr(status, expected) ok_hex(status, expected)
114#define ok_hr_(file, line, status, expected) ok_hex_(file, line, status, expected)
115
116#define ok_eq_print(value, expected, spec) ok((value) == (expected), #value " = " spec ", expected " spec "\n", value, expected)
117#define ok_eq_print_(file, line, value, expected, spec) ok_(file,line)((value) == (expected), #value " = " spec ", expected " spec "\n", value, expected)
118#define ok_eq_pointer(value, expected) ok_eq_print(value, expected, "%p")
119#define ok_eq_int(value, expected) ok_eq_print(value, expected, "%d")
120#define ok_eq_uint(value, expected) ok_eq_print(value, expected, "%u")
121#define ok_eq_long(value, expected) ok_eq_print(value, expected, "%ld")
122#define ok_eq_ulong(value, expected) ok_eq_print(value, expected, "%lu")
123#define ok_eq_longlong(value, expected) ok_eq_print(value, expected, "%I64d")
124#define ok_eq_ulonglong(value, expected) ok_eq_print(value, expected, "%I64u")
125#define ok_eq_char(value, expected) ok_eq_print(value, expected, "%c")
126#define ok_eq_wchar(value, expected) ok_eq_print(value, expected, "%C")
127#ifndef _WIN64
128#define ok_eq_size(value, expected) ok_eq_print(value, (SIZE_T)(expected), "%lu")
129#define ok_eq_longptr(value, expected) ok_eq_print(value, (LONG_PTR)(expected), "%ld")
130#define ok_eq_ulongptr(value, expected) ok_eq_print(value, (ULONG_PTR)(expected), "%lu")
131#elif defined _WIN64
132#define ok_eq_size(value, expected) ok_eq_print(value, (SIZE_T)(expected), "%I64u")
133#define ok_eq_longptr(value, expected) ok_eq_print(value, (LONG_PTR)(expected), "%I64d")
134#define ok_eq_ulongptr(value, expected) ok_eq_print(value, (ULONG_PTR)(expected), "%I64u")
135#endif /* defined _WIN64 */
136#define ok_eq_hex(value, expected) ok_eq_print((unsigned long)value, (unsigned long)expected, "0x%08lx")
137#define ok_bool_true(value, desc) ok((value) == TRUE, desc " FALSE, expected TRUE\n")
138#define ok_bool_false(value, desc) ok((value) == FALSE, desc " TRUE, expected FALSE\n")
139#define ok_eq_bool(value, expected) ok((value) == (expected), #value " = %s, expected %s\n", \
140 (value) ? "TRUE" : "FALSE", \
141 (expected) ? "TRUE" : "FALSE")
142#define ok_eq_str(value, expected) ok(!strcmp(value, expected), #value " = \"%s\", expected \"%s\"\n", value, expected)
143#define ok_eq_wstr(value, expected) ok(!wcscmp(value, expected), #value " = \"%ls\", expected \"%ls\"\n", value, expected)
144#define ok_eq_tag(value, expected) ok_eq_print(value, expected, "0x%08lx")
145
146#define ok_eq_hex_(file, line, value, expected) ok_eq_print_(file, line, value, expected, "0x%08lx")
147#define ok_eq_hex64_(file, line, value, expected) ok_eq_print_(file, line, value, expected, "%I64x")
148#define ok_eq_hex64(value, expected) ok_eq_print((unsigned long long)value, (unsigned long long)expected, "%I64x")
149#define ok_eq_xmm(value, expected) ok((value).Low == (expected).Low, #value " = %I64x'%08I64x, expected %I64x'%08I64x\n", (value).Low, (value).High, (expected).Low, (expected).High)
150
151#endif /* _APITEST_H */
#define GetMajorNTVersion()
Definition: apitest.h:15
#define GetNTVersion()
Definition: apitest.h:17
#define GENERATE_NTDDI(Major, Minor, ServicePack, Subversion)
Definition: apitest.h:18
#define GetMinorNTVersion()
Definition: apitest.h:16
#define KUSER_SHARED_DATA_UMPTR
Definition: apitest.h:14
static ULONG GetNTDDIVersion(VOID)
Definition: apitest.h:23
#define trace
Definition: atltest.h:70
BOOL WINAPI GetVersionExW(IN LPOSVERSIONINFOW lpVersionInformation)
Definition: version.c:37
#define _WIN32_WINNT_WINBLUE
Definition: sdkddkver.h:30
ULONG dwMajorVersion
Definition: rtltypes.h:270
ULONG dwMinorVersion
Definition: rtltypes.h:271
ULONG dwOSVersionInfoSize
Definition: rtltypes.h:269
USHORT wServicePackMajor
Definition: rtltypes.h:275
uint32_t ULONG
Definition: typedefs.h:59