@@ -135,6 +135,12 @@ static void print_msg(const char *msg);
135135static void adjust_data_dir (void );
136136
137137#if defined(WIN32 ) || defined(__CYGWIN__ )
138+ #if (_MSC_VER >= 1800 )
139+ #include <versionhelpers.h>
140+ #else
141+ static bool IsWindowsXPOrGreater (void );
142+ static bool IsWindows7OrGreater (void );
143+ #endif
138144static bool pgwin32_IsInstalled (SC_HANDLE );
139145static char * pgwin32_CommandLine (bool );
140146static void pgwin32_doRegister (void );
@@ -1226,6 +1232,29 @@ do_kill(pgpid_t pid)
12261232
12271233#if defined(WIN32 ) || defined(__CYGWIN__ )
12281234
1235+ #if (_MSC_VER < 1800 )
1236+ static bool
1237+ IsWindowsXPOrGreater (void )
1238+ {
1239+ OSVERSIONINFO osv ;
1240+ osv .dwOSVersionInfoSize = sizeof (osv );
1241+
1242+ /* Windows XP = Version 5.1 */
1243+ return (!GetVersionEx (& osv ) || /* could not get version */
1244+ osv .dwMajorVersion > 5 || (osv .dwMajorVersion == 5 && osv .dwMinorVersion >= 1 ));
1245+ }
1246+
1247+ static bool IsWindows7OrGreater (void )
1248+ {
1249+ OSVERSIONINFO osv ;
1250+ osv .dwOSVersionInfoSize = sizeof (osv );
1251+
1252+ /* Windows 7 = Version 6.0 */
1253+ return (!GetVersionEx (& osv ) || /* could not get version */
1254+ osv .dwMajorVersion > 6 || (osv .dwMajorVersion == 6 && osv .dwMinorVersion >= 0 ));
1255+ }
1256+ #endif
1257+
12291258static bool
12301259pgwin32_IsInstalled (SC_HANDLE hSCM )
12311260{
@@ -1655,12 +1684,7 @@ CreateRestrictedProcess(char *cmd, PROCESS_INFORMATION *processInfo, bool as_ser
16551684 * IsProcessInJob() is not available on < WinXP, so there is no need
16561685 * to log the error every time in that case
16571686 */
1658- OSVERSIONINFO osv ;
1659-
1660- osv .dwOSVersionInfoSize = sizeof (osv );
1661- if (!GetVersionEx (& osv ) || /* could not get version */
1662- (osv .dwMajorVersion == 5 && osv .dwMinorVersion > 0 ) || /* 5.1=xp, 5.2=2003, etc */
1663- osv .dwMajorVersion > 5 ) /* anything newer should have the API */
1687+ if (IsWindowsXPOrGreater ())
16641688
16651689 /*
16661690 * Log error if we can't get version, or if we're on WinXP/2003 or
@@ -1692,7 +1716,6 @@ CreateRestrictedProcess(char *cmd, PROCESS_INFORMATION *processInfo, bool as_ser
16921716 JOBOBJECT_BASIC_LIMIT_INFORMATION basicLimit ;
16931717 JOBOBJECT_BASIC_UI_RESTRICTIONS uiRestrictions ;
16941718 JOBOBJECT_SECURITY_LIMIT_INFORMATION securityLimit ;
1695- OSVERSIONINFO osv ;
16961719
16971720 ZeroMemory (& basicLimit , sizeof (basicLimit ));
16981721 ZeroMemory (& uiRestrictions , sizeof (uiRestrictions ));
@@ -1708,10 +1731,7 @@ CreateRestrictedProcess(char *cmd, PROCESS_INFORMATION *processInfo, bool as_ser
17081731
17091732 if (as_service )
17101733 {
1711- osv .dwOSVersionInfoSize = sizeof (osv );
1712- if (!GetVersionEx (& osv ) ||
1713- osv .dwMajorVersion < 6 ||
1714- (osv .dwMajorVersion == 6 && osv .dwMinorVersion == 0 ))
1734+ if (!IsWindows7OrGreater ())
17151735 {
17161736 /*
17171737 * On Windows 7 (and presumably later),
0 commit comments