22#define WIN32_NO_STATUS
35#define GET_PROC(func) \
36 p##func = (void *)GetProcAddress(hmod, #func);
39#define ACPI 0x41435049
40#define FIRM 0x4649524D
41#define RSMB 0x52534D42
84#if defined(__REACTOS__) && DLL_EXPORT_VERSION >= 0x600
92 win_skip(
"GetProductInfo() not available\n");
105 "got %ld and 0x%lx (expected TRUE and a valid PRODUCT_* value)\n",
res, product);
108 "got %ld and 0x%lx with 0x%lx (expected FALSE and PRODUCT_UNDEFINED with LastError untouched)\n",
116 res = pGetProductInfo(6, 1, 0, 0,
NULL);
118 "got %ld with 0x%lx (expected FALSE with LastError untouched\n",
res,
GetLastError());
136 ok(!
ret,
"Expected GetVersionExA to fail\n");
139 "Expected ERROR_INSUFFICIENT_BUFFER or 0xdeadbeef (Win9x), got %ld\n",
145 ok(!
ret,
"Expected GetVersionExA to fail\n");
148 "Expected ERROR_INSUFFICIENT_BUFFER or 0xdeadbeef (Win9x), got %ld\n",
154 ok(!
ret,
"Expected GetVersionExA to fail\n");
157 "Expected ERROR_INSUFFICIENT_BUFFER or 0xdeadbeef (Win9x), got %ld\n",
163 ok(
ret,
"Expected GetVersionExA to succeed\n");
170 ok(
ret,
"GetVersionExA failed.\n");
181 SRCVERSION_CURRENT = 1,
182 SRCVERSION_INC_MINOR = 2,
183 SRCVERSION_INC_SP_MINOR = 3,
184 SRCVERSION_INC_SP_MAJOR = 4,
185 SRCVERSION_DEC_SP_MAJOR = 5,
186 SRCVERSION_DEC_MAJOR = 6,
187 SRCVERSION_INC_BUILD = 7,
188 SRCVERSION_REQUIRES_SP = 0x1000,
191 struct verify_version_test
205 } verify_version_tests[] =
209 SRCVERSION_INC_MINOR,
217 SRCVERSION_INC_MINOR,
241 SRCVERSION_INC_MINOR,
249 SRCVERSION_INC_MINOR,
257 SRCVERSION_INC_MINOR,
265 SRCVERSION_INC_SP_MINOR,
273 SRCVERSION_INC_SP_MINOR,
281 SRCVERSION_INC_SP_MAJOR,
289 SRCVERSION_INC_SP_MINOR,
297 SRCVERSION_INC_SP_MINOR,
305 SRCVERSION_INC_SP_MINOR,
314 SRCVERSION_INC_SP_MINOR,
323 SRCVERSION_INC_SP_MINOR,
333 SRCVERSION_INC_SP_MINOR,
343 SRCVERSION_INC_SP_MAJOR,
351 SRCVERSION_INC_SP_MAJOR,
359 SRCVERSION_INC_SP_MAJOR,
367 SRCVERSION_INC_SP_MAJOR,
375 SRCVERSION_INC_SP_MAJOR,
383 SRCVERSION_INC_SP_MAJOR,
392 SRCVERSION_INC_SP_MAJOR,
400 SRCVERSION_DEC_MAJOR,
416 SRCVERSION_INC_SP_MAJOR,
425 SRCVERSION_INC_SP_MAJOR,
434 SRCVERSION_INC_SP_MAJOR,
470 SRCVERSION_INC_SP_MINOR,
477 SRCVERSION_INC_SP_MAJOR,
484 SRCVERSION_INC_SP_MAJOR,
491 SRCVERSION_INC_SP_MAJOR,
498 SRCVERSION_INC_SP_MAJOR,
505 SRCVERSION_INC_MINOR,
512 SRCVERSION_INC_MINOR,
526 SRCVERSION_INC_BUILD,
533 SRCVERSION_INC_BUILD,
540 SRCVERSION_DEC_SP_MAJOR | SRCVERSION_REQUIRES_SP,
547 SRCVERSION_DEC_SP_MAJOR | SRCVERSION_REQUIRES_SP,
554 SRCVERSION_DEC_SP_MAJOR | SRCVERSION_REQUIRES_SP,
562 SRCVERSION_DEC_SP_MAJOR | SRCVERSION_REQUIRES_SP,
571 SRCVERSION_DEC_SP_MAJOR | SRCVERSION_REQUIRES_SP,
580 SRCVERSION_DEC_SP_MAJOR | SRCVERSION_REQUIRES_SP,
589 SRCVERSION_DEC_SP_MAJOR | SRCVERSION_REQUIRES_SP,
607 servicepack =
info.wServicePackMajor;
608 if (servicepack == 0)
609 skip(
"There is no ServicePack on this system. Some tests will be skipped.\n");
612 if (
info.dwMajorVersion == 6 &&
info.dwMinorVersion == 2)
616 ok(!pRtlGetVersion(&rtlinfo),
"RtlGetVersion failed\n");
620 skip(
"GetVersionEx and VerifyVersionInfo are faking values\n");
627 struct verify_version_test *
test = &verify_version_tests[
i];
631 if (servicepack == 0 && srcinfo & SRCVERSION_REQUIRES_SP)
633 srcinfo &= ~SRCVERSION_REQUIRES_SP;
635 info.dwOSVersionInfoSize =
sizeof(
info);
640 case SRCVERSION_ZERO:
643 case SRCVERSION_INC_MINOR:
644 info.dwMinorVersion++;
646 case SRCVERSION_INC_SP_MINOR:
647 info.wServicePackMinor++;
649 case SRCVERSION_INC_SP_MAJOR:
650 info.wServicePackMajor++;
652 case SRCVERSION_DEC_SP_MAJOR:
653 info.wServicePackMajor--;
655 case SRCVERSION_DEC_MAJOR:
656 info.dwMajorVersion--;
658 case SRCVERSION_INC_BUILD:
659 info.dwBuildNumber++;
683 info.dwMajorVersion = 3;
684 info.dwMinorVersion = 10;
690 info.dwMinorVersion = 0;
691 info.wServicePackMajor = 10;
697 info.wServicePackMajor = 0;
698 info.wServicePackMinor = 10;
707 info.dwOSVersionInfoSize = 0;
722 if (!pGetSystemFirmwareTable || !pEnumSystemFirmwareTables)
724 win_skip(
"SystemFirmwareTable functions not available\n");
729 ok(!!sfti,
"Failed to allocate memory\n");
734 if (expected_len == 0)
736 win_skip(
"SystemFirmwareTableInformation is not available\n");
753 expected_len -= min_sfti_len;
757 ok(
len == expected_len,
"Expected length %lu, got %u\n", expected_len,
len);
760 len = pGetSystemFirmwareTable(
RSMB, 0, smbios_table, expected_len);
761 ok(
len == expected_len,
"Expected length %lu, got %u\n", expected_len,
len);
763 "Expected prologue %02x %02x %02x %02x %02x %02x, got %02x %02x %02x %02x %02x %02x\n",
766 smbios_table[0], smbios_table[1], smbios_table[2],
767 smbios_table[3], smbios_table[4], smbios_table[5]);
776 ok( expected_len == min_sfti_len +
sizeof(
UINT),
"wrong len %lu\n", expected_len );
783 len = pEnumSystemFirmwareTables(
RSMB, smbios_table,
len );
785 ok( *(
UINT *)smbios_table == 0,
"wrong table id %x\n", *(
UINT *)smbios_table );
786 free( smbios_table );
832 id->version.Minor,
id->version.Build,
id->version.Revision,
842 {{.Major = 1, .Minor = 2, .Build = 3, .Revision = 4}},
854 if (!pPackageIdFromFullName)
856 win_skip(
"PackageIdFromFullName not available.\n");
861 skip(
"test_PackageIdFromFullName() broken on Win8.1 and older\n");
870 memset(id_buffer, 0xcc,
sizeof(id_buffer));
872 size =
sizeof(id_buffer);
875 ok(
size == expected_size,
"Got unexpected length %u, expected %u.\n",
size, expected_size);
881 ok(!
id->publisher,
"Got unexpected publisher %s.\n",
debugstr_w(
id->publisher));
883 id->processorArchitecture);
884 ok(
id->version.Version == 0x0001000200030004,
"Got unexpected Version %s.\n",
886 ok((
BYTE *)
id->name == id_buffer +
sizeof(*
id),
"Got unexpected name %p, buffer %p.\n",
id->name, id_buffer);
888 "Got unexpected resourceId %p, buffer %p.\n",
id->resourceId, id_buffer);
890 "Got unexpected publisherId %p, buffer %p.\n",
id->resourceId, id_buffer);
895 size =
sizeof(id_buffer);
896 ret = pPackageIdFromFullName(
NULL, 0, &
size, id_buffer);
898 ok(
size ==
sizeof(id_buffer),
"Got unexpected size %u.\n",
size);
900 size =
sizeof(id_buffer);
903 ok(
size ==
sizeof(id_buffer),
"Got unexpected size %u.\n",
size);
905 size = expected_size - 1;
908 ok(
size == expected_size - 1,
"Got unexpected size %u.\n",
size);
910 size = expected_size - 1;
913 ok(
size == expected_size,
"Got unexpected size %u.\n",
size);
918 ok(
size == expected_size,
"Got unexpected size %u.\n",
size);
922 test_id = test_package_id;
925 size = expected_size;
928 "Got unexpected ret %lu.\n",
ret);
931 ok(
size == expected_size,
"Got unexpected length %u, expected %u.\n",
size, expected_size);
932 ok(
id->processorArchitecture ==
arch_data[
i].code,
"Got unexpected processorArchitecture %u, arch %S.\n",
936 size =
sizeof(id_buffer);
937 ret = pPackageIdFromFullName(
L"TestPackage_1.2.3.4_X86_TestResourceId_0abcdefghjkme", 0, &
size, id_buffer);
940 size =
sizeof(id_buffer);
941 ret = pPackageIdFromFullName(
L"TestPackage_1.2.3.4_X86_TestResourceId_abcdefghjkme", 0, &
size, id_buffer);
944 size =
sizeof(id_buffer);
945 ret = pPackageIdFromFullName(
L"TestPackage_1.2.3.4_X86_TestResourceId_0abcdefghjkmee", 0, &
size, id_buffer);
948 size =
sizeof(id_buffer);
949 ret = pPackageIdFromFullName(
L"TestPackage_1.2.3_X86_TestResourceId_0abcdefghjkme", 0, &
size, id_buffer);
952 size =
sizeof(id_buffer);
953 ret = pPackageIdFromFullName(
L"TestPackage_1.2.3.4_X86_TestResourceId_0abcdefghjkme_", 0, &
size, id_buffer);
956 size =
sizeof(id_buffer);
957 ret = pPackageIdFromFullName(
L"TestPackage_1.2.3.4_X86__0abcdefghjkme", 0, &
size, id_buffer);
961 size =
sizeof(id_buffer);
962 ret = pPackageIdFromFullName(
L"TestPackage_1.2.3.4_X86_0abcdefghjkme", 0, &
size, id_buffer);
966#define TEST_VERSION_WIN7 1
967#define TEST_VERSION_WIN8 2
968#define TEST_VERSION_WIN8_1 4
969#define TEST_VERSION_WIN10 8
997 info.dwOSVersionInfoSize =
sizeof(
info);
1002 info.dwMajorVersion);
1005 info.dwMinorVersion);
1010 static const char manifest_header[] =
1011 "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>"
1012 "<assembly manifestVersion=\"1.0\" xmlns=\"urn:schemas-microsoft-com:asm.v1\""
1013 " xmlns:asmv3=\"urn:schemas-microsoft-com:asm.v3\">\n"
1014 "\t<compatibility xmlns=\"urn:schemas-microsoft-com:compatibility.v1\">\n"
1015 "\t\t<application>\n";
1016 static const char manifest_footer[] =
1017 "\t\t</application>\n"
1018 "\t</compatibility>\n"
1020 static const char *version_guids[] =
1022 "{35138b9a-5d96-4fbd-8e2d-a2440225f93a}",
1023 "{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}",
1024 "{1f676c76-80e1-4239-95bb-83d0f6d0da78}",
1025 "{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}",
1027 LONG hdr_offset, offset_major, offset_minor;
1041 if (!pRtlGetVersion)
1043 win_skip(
"RtlGetVersion is not supported, skipping tests.\n");
1048 ok(!pRtlGetVersion(&rtlinfo),
"RtlGetVersion failed.\n");
1070 sprintf(tmp_exe_name,
"tmp%u.exe",
i);
1095 sprintf(
str,
"\t\t\t<supportedOS Id=\"%s\"/>\n", version_guids[
j]);
1103 sprintf(
str,
"%s version pe_os_version %u", tmp_exe_name,
i);
1113 ok(!
code,
"Test %u failed.\n",
i);
#define ERROR_INSUFFICIENT_BUFFER
NTSTATUS NTAPI RtlGetVersion(IN OUT PRTL_OSVERSIONINFOW lpVersionInformation)
#define ERROR_INVALID_PARAMETER
#define ReadFile(a, b, c, d, e)
#define INVALID_HANDLE_VALUE
#define CreateFileA(a, b, c, d, e, f, g)
static __inline const char * wine_dbgstr_longlong(ULONGLONG ll)
#define HeapFree(x, y, z)
#define FILE_ATTRIBUTE_NORMAL
static const WCHAR version[]
BOOL WINAPI CopyFileA(IN LPCSTR lpExistingFileName, IN LPCSTR lpNewFileName, IN BOOL bFailIfExists)
BOOL WINAPI DeleteFileA(IN LPCSTR lpFileName)
BOOL WINAPI WriteFile(IN HANDLE hFile, IN LPCVOID lpBuffer, IN DWORD nNumberOfBytesToWrite OPTIONAL, OUT LPDWORD lpNumberOfBytesWritten, IN LPOVERLAPPED lpOverlapped OPTIONAL)
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
BOOL WINAPI GetExitCodeProcess(IN HANDLE hProcess, IN LPDWORD lpExitCode)
BOOL WINAPI DECLSPEC_HOTPATCH CreateProcessA(LPCSTR lpApplicationName, LPSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCSTR lpCurrentDirectory, LPSTARTUPINFOA lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation)
UINT WINAPI GetSystemFirmwareTable(_In_ DWORD FirmwareTableProviderSignature, _In_ DWORD FirmwareTableID, _Out_writes_bytes_to_opt_(BufferSize, return) PVOID pFirmwareTableBuffer, _In_ DWORD BufferSize)
UINT WINAPI EnumSystemFirmwareTables(_In_ DWORD FirmwareTableProviderSignature, _Out_writes_bytes_to_opt_(BufferSize, return) PVOID pFirmwareTableEnumBuffer, _In_ DWORD BufferSize)
BOOL WINAPI VerifyVersionInfoA(IN LPOSVERSIONINFOEXA lpVersionInformation, IN DWORD dwTypeMask, IN DWORDLONG dwlConditionMask)
BOOL WINAPI GetVersionExA(IN LPOSVERSIONINFOA lpVersionInformation)
int WINAPI lstrcmpW(LPCWSTR str1, LPCWSTR str2)
BOOL WINAPI DECLSPEC_HOTPATCH GetProductInfo(DWORD os_major, DWORD os_minor, DWORD sp_major, DWORD sp_minor, DWORD *type)
LONG WINAPI PackageIdFromFullName(const WCHAR *full_name, UINT32 flags, UINT32 *buffer_length, BYTE *buffer)
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
_ACRTIMP int __cdecl atoi(const char *)
_ACRTIMP size_t __cdecl strlen(const char *)
_ACRTIMP int __cdecl strcmp(const char *, const char *)
enum _SYSTEM_INFORMATION_CLASS SYSTEM_INFORMATION_CLASS
GLuint GLuint GLsizei count
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
@ SystemFirmwareTable_Enumerate
@ SystemFirmwareTable_Get
static const SecPkgInfoA infoA
static PEXPLICIT_ACCESSW *static HMODULE hmod
static PROCESS_INFORMATION pi
static void packagefullname_from_packageid(WCHAR *buffer, size_t count, const PACKAGE_ID *id)
static const WCHAR * arch_string_from_code(UINT32 arch)
static void test_SystemFirmwareTable(void)
unsigned int expected_minor
static const struct @1826 test_pe_os_version_tests[]
static void init_function_pointers(void)
static void test_PackageIdFromFullName(void)
unsigned int pe_version_major
static void test_pe_os_version_child(unsigned int test)
static void test_VerifyVersionInfo(void)
static void test_pe_os_version(void)
#define TEST_VERSION_WIN8
static unsigned int get_package_str_size(const WCHAR *str)
static unsigned int get_package_id_size(const PACKAGE_ID *id)
#define TEST_VERSION_WIN10
unsigned int pe_version_minor
unsigned int expected_major
#define TEST_VERSION_WIN7
static UINT32 BYTE *static void ULONG
static void test_GetVersionEx(void)
static const struct @1825 arch_data[]
#define TEST_VERSION_WIN8_1
static void test_GetProductInfo(void)
unsigned int manifest_versions
@ SystemFirmwareTableInformation
#define PROCESSOR_ARCHITECTURE_ARM
#define PROCESSOR_ARCHITECTURE_UNKNOWN
#define PROCESSOR_ARCHITECTURE_AMD64
#define PROCESSOR_ARCHITECTURE_INTEL
#define VER_SERVICEPACKMINOR
#define VER_GREATER_EQUAL
#define VER_SERVICEPACKMAJOR
#define PRODUCT_ENTERPRISE_S_N_EVALUATION
#define PRODUCT_UNDEFINED
int winetest_get_mainargs(char ***pargv)
ULONGLONG NTAPI VerSetConditionMask(IN ULONGLONG ConditionMask, IN ULONG TypeMask, IN UCHAR Condition)
#define _WIN32_WINNT_WIN10
#define STATUS_BUFFER_TOO_SMALL
NTSYSAPI NTSTATUS NTAPI NtQuerySystemInformation(IN SYSTEM_INFORMATION_CLASS SystemInfoClass, OUT PVOID SystemInfoBuffer, IN ULONG SystemInfoBufferSize, OUT PULONG BytesReturned OPTIONAL)
UINT32 processorArchitecture
ULONG dwOSVersionInfoSize
ULONG dwOSVersionInfoSize
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
#define FIELD_OFFSET(t, f)
#define STATUS_INVALID_DEVICE_REQUEST
DWORD WINAPI GetLastError(void)
#define ERROR_OLD_WIN_VERSION
#define PROCESSOR_ARCHITECTURE_NEUTRAL
#define PROCESSOR_ARCHITECTURE_ARM64
struct _OSVERSIONINFOA OSVERSIONINFOA
struct _OSVERSIONINFOEXA OSVERSIONINFOEXA
struct _OSVERSIONINFOEXW RTL_OSVERSIONINFOEXW