ReactOS 0.4.16-dev-336-gb667d82
version.c File Reference
#include <k32.h>
#include <debug.h>
Include dependency graph for version.c:

Go to the source code of this file.

Macros

#define NDEBUG
 

Functions

DWORD WINAPI GetVersion (VOID)
 
BOOL WINAPI GetVersionExW (IN LPOSVERSIONINFOW lpVersionInformation)
 
BOOL WINAPI GetVersionExA (IN LPOSVERSIONINFOA lpVersionInformation)
 
BOOL WINAPI VerifyVersionInfoW (IN LPOSVERSIONINFOEXW lpVersionInformation, IN DWORD dwTypeMask, IN DWORDLONG dwlConditionMask)
 
BOOL WINAPI VerifyVersionInfoA (IN LPOSVERSIONINFOEXA lpVersionInformation, IN DWORD dwTypeMask, IN DWORDLONG dwlConditionMask)
 

Macro Definition Documentation

◆ NDEBUG

#define NDEBUG

Definition at line 12 of file version.c.

Function Documentation

◆ GetVersion()

DWORD WINAPI GetVersion ( VOID  )

Definition at line 22 of file version.c.

23{
25
26 return (DWORD)( ((Peb->OSPlatformId ^ 2) << 30) |
27 (Peb->OSBuildNumber << 16) |
28 (Peb->OSMinorVersion << 8 ) |
30}
#define NtCurrentPeb()
Definition: FLS.c:22
PPEB Peb
Definition: dllmain.c:27
unsigned long DWORD
Definition: ntddk_ex.h:95
ULONG OSMinorVersion
Definition: ntddk_ex.h:301
ULONG OSMajorVersion
Definition: ntddk_ex.h:300
ULONG OSBuildNumber
Definition: ntddk_ex.h:302
ULONG OSPlatformId
Definition: ntddk_ex.h:303

◆ GetVersionExA()

BOOL WINAPI GetVersionExA ( IN LPOSVERSIONINFOA  lpVersionInformation)

Definition at line 69 of file version.c.

70{
71 OSVERSIONINFOEXW VersionInformation;
72 LPOSVERSIONINFOEXA lpVersionInformationEx;
73 UNICODE_STRING CsdVersionW;
75 ANSI_STRING CsdVersionA;
76
77 if ((lpVersionInformation->dwOSVersionInfoSize != sizeof(OSVERSIONINFOA)) &&
78 (lpVersionInformation->dwOSVersionInfoSize != sizeof(OSVERSIONINFOEXA)))
79 {
81 return FALSE;
82 }
83
84 VersionInformation.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXW);
85
86 if (!GetVersionExW((LPOSVERSIONINFOW)&VersionInformation)) return FALSE;
87
88 /* Copy back fields that match both supported structures */
89 lpVersionInformation->dwMajorVersion = VersionInformation.dwMajorVersion;
90 lpVersionInformation->dwMinorVersion = VersionInformation.dwMinorVersion;
91 lpVersionInformation->dwBuildNumber = VersionInformation.dwBuildNumber;
92 lpVersionInformation->dwPlatformId = VersionInformation.dwPlatformId;
93
94 if (lpVersionInformation->dwOSVersionInfoSize == sizeof(OSVERSIONINFOEXA))
95 {
96 lpVersionInformationEx = (PVOID)lpVersionInformation;
97 lpVersionInformationEx->wServicePackMajor = VersionInformation.wServicePackMajor;
98 lpVersionInformationEx->wServicePackMinor = VersionInformation.wServicePackMinor;
99 lpVersionInformationEx->wSuiteMask = VersionInformation.wSuiteMask;
100 lpVersionInformationEx->wProductType = VersionInformation.wProductType;
101 lpVersionInformationEx->wReserved = VersionInformation.wReserved;
102 }
103
104 /* Convert the CSD string */
105 RtlInitEmptyAnsiString(&CsdVersionA,
106 lpVersionInformation->szCSDVersion,
107 sizeof(lpVersionInformation->szCSDVersion));
108 RtlInitUnicodeString(&CsdVersionW, VersionInformation.szCSDVersion);
109 Status = RtlUnicodeStringToAnsiString(&CsdVersionA, &CsdVersionW, FALSE);
110 return (NT_SUCCESS(Status));
111}
LONG NTSTATUS
Definition: precomp.h:26
#define ERROR_INSUFFICIENT_BUFFER
Definition: dderror.h:10
#define FALSE
Definition: types.h:117
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:33
#define SetLastError(x)
Definition: compat.h:752
BOOL WINAPI GetVersionExW(IN LPOSVERSIONINFOW lpVersionInformation)
Definition: version.c:37
Status
Definition: gdiplustypes.h:25
NTSYSAPI NTSTATUS NTAPI RtlUnicodeStringToAnsiString(PANSI_STRING DestinationString, PUNICODE_STRING SourceString, BOOLEAN AllocateDestinationString)
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
USHORT wServicePackMajor
Definition: rtltypes.h:261
USHORT wSuiteMask
Definition: rtltypes.h:263
UCHAR wProductType
Definition: rtltypes.h:264
USHORT wServicePackMinor
Definition: rtltypes.h:262
ULONG dwOSVersionInfoSize
Definition: rtltypes.h:269
ULONG dwMinorVersion
Definition: rtltypes.h:248
ULONG dwPlatformId
Definition: rtltypes.h:250
ULONG dwMajorVersion
Definition: rtltypes.h:247
ULONG dwBuildNumber
Definition: rtltypes.h:249
WCHAR szCSDVersion[128]
Definition: rtltypes.h:251
void * PVOID
Definition: typedefs.h:50
struct _OSVERSIONINFOEXW OSVERSIONINFOEXW

Referenced by acmGetVersion(), IsOS(), IsWindowsXPorLaterCompatible(), START_TEST(), test_GetVersionEx(), test_initvar(), test_VerifyVersionInfo(), and verify_shima_imp().

◆ GetVersionExW()

BOOL WINAPI GetVersionExW ( IN LPOSVERSIONINFOW  lpVersionInformation)

Definition at line 37 of file version.c.

38{
40 LPOSVERSIONINFOEXW lpVersionInformationEx;
41
42 if ((lpVersionInformation->dwOSVersionInfoSize != sizeof(OSVERSIONINFOW)) &&
43 (lpVersionInformation->dwOSVersionInfoSize != sizeof(OSVERSIONINFOEXW)))
44 {
46 return FALSE;
47 }
48
49 Status = RtlGetVersion((PRTL_OSVERSIONINFOW)lpVersionInformation);
51 {
52 if (lpVersionInformation->dwOSVersionInfoSize == sizeof(OSVERSIONINFOEXW))
53 {
54 lpVersionInformationEx = (PVOID)lpVersionInformation;
55 lpVersionInformationEx->wReserved = 0;
56 }
57
58 return TRUE;
59 }
60
61 return FALSE;
62}
#define TRUE
Definition: types.h:120
NTSTATUS NTAPI RtlGetVersion(IN OUT PRTL_OSVERSIONINFOW lpVersionInformation)
Definition: version.c:158
#define STATUS_SUCCESS
Definition: shellext.h:65

Referenced by _LocalGetPrintServerHandleData(), AllSysInfo(), build_systeminfo_tree(), crt_process_init(), DllMain(), dump_system_info(), ensure_useragent(), FILEDLG95_InitControls(), fill_operatingsystem(), get_app_version(), CConfiguration::GetSystemInformation(), GetVersionExA(), init_driver_info(), InitOsVersion(), IsPreVistaOSVersion(), IsWindowsOS(), NetrServerGetInfo(), PrintOSVersion(), ReportProductInfoEvent(), ServiceInit(), START_TEST(), test_assoc_perceived(), TEST_LocaleTests(), and verify_shimw_imp().

◆ VerifyVersionInfoA()

BOOL WINAPI VerifyVersionInfoA ( IN LPOSVERSIONINFOEXA  lpVersionInformation,
IN DWORD  dwTypeMask,
IN DWORDLONG  dwlConditionMask 
)

Definition at line 161 of file version.c.

164{
165 OSVERSIONINFOEXW viex;
166
167 /* NOTE: szCSDVersion is ignored, we don't need to convert it to Unicode */
168 viex.dwOSVersionInfoSize = sizeof(viex);
169 viex.dwMajorVersion = lpVersionInformation->dwMajorVersion;
170 viex.dwMinorVersion = lpVersionInformation->dwMinorVersion;
171 viex.dwBuildNumber = lpVersionInformation->dwBuildNumber;
172 viex.dwPlatformId = lpVersionInformation->dwPlatformId;
173 viex.wServicePackMajor = lpVersionInformation->wServicePackMajor;
174 viex.wServicePackMinor = lpVersionInformation->wServicePackMinor;
175 viex.wSuiteMask = lpVersionInformation->wSuiteMask;
176 viex.wProductType = lpVersionInformation->wProductType;
177 viex.wReserved = lpVersionInformation->wReserved;
178 return VerifyVersionInfoW(&viex, dwTypeMask, dwlConditionMask);
179}
BOOL WINAPI VerifyVersionInfoW(IN LPOSVERSIONINFOEXW lpVersionInformation, IN DWORD dwTypeMask, IN DWORDLONG dwlConditionMask)
Definition: version.c:118
ULONG dwMajorVersion
Definition: rtltypes.h:270
ULONG dwMinorVersion
Definition: rtltypes.h:271
USHORT wServicePackMinor
Definition: rtltypes.h:276
ULONG dwPlatformId
Definition: rtltypes.h:273
UCHAR wProductType
Definition: rtltypes.h:278
USHORT wSuiteMask
Definition: rtltypes.h:277
ULONG dwBuildNumber
Definition: rtltypes.h:272
USHORT wServicePackMajor
Definition: rtltypes.h:275

Referenced by test_VerifyVersionInfo().

◆ VerifyVersionInfoW()

BOOL WINAPI VerifyVersionInfoW ( IN LPOSVERSIONINFOEXW  lpVersionInformation,
IN DWORD  dwTypeMask,
IN DWORDLONG  dwlConditionMask 
)

Definition at line 118 of file version.c.

121{
123
124 Status = RtlVerifyVersionInfo((PRTL_OSVERSIONINFOEXW)lpVersionInformation,
125 dwTypeMask,
126 dwlConditionMask);
127 switch (Status)
128 {
131 return FALSE;
132
134 if (lpVersionInformation)
135 {
136 DPRINT1("VerifyVersionInfo -- Version mismatch(%d.%d.%d:%d)\n",
137 (dwTypeMask & VER_MAJORVERSION) ? lpVersionInformation->dwMajorVersion : -1,
138 (dwTypeMask & VER_MINORVERSION) ? lpVersionInformation->dwMinorVersion : -1,
139 (dwTypeMask & VER_BUILDNUMBER) ? lpVersionInformation->dwBuildNumber : -1,
140 (dwTypeMask & VER_PLATFORMID) ? lpVersionInformation->dwPlatformId : -1);
141 }
142 else
143 {
144 DPRINT1("VerifyVersionInfo -- Version mismatch(NULL)\n");
145 }
147 return FALSE;
148
149 default:
150 /* RtlVerifyVersionInfo shouldn't report any other failure code! */
152 return TRUE;
153 }
154}
#define DPRINT1
Definition: precomp.h:8
NTSYSAPI NTSTATUS WINAPI RtlVerifyVersionInfo(const RTL_OSVERSIONINFOEXW *, DWORD, DWORDLONG)
#define ASSERT(a)
Definition: mode.c:44
#define VER_BUILDNUMBER
Definition: rtltypes.h:230
#define VER_MAJORVERSION
Definition: rtltypes.h:229
#define VER_PLATFORMID
Definition: rtltypes.h:231
#define VER_MINORVERSION
Definition: rtltypes.h:228
#define STATUS_REVISION_MISMATCH
Definition: ntstatus.h:325
#define STATUS_INVALID_PARAMETER
Definition: udferr_usr.h:135
#define ERROR_OLD_WIN_VERSION
Definition: winerror.h:672
#define ERROR_BAD_ARGUMENTS
Definition: winerror.h:232

Referenced by IsActiveSessionCountLimited(), IsWindows8OrGreater(), IsWindowsServer(), IsWindowsVersionOrGreater(), VerifyVersionInfoA(), and winver_equal_or_newer().