|
|
@ -135,6 +135,12 @@ static void print_msg(const char *msg); |
|
|
|
static void adjust_data_dir(void); |
|
|
|
static void adjust_data_dir(void); |
|
|
|
|
|
|
|
|
|
|
|
#if defined(WIN32) || defined(__CYGWIN__) |
|
|
|
#if defined(WIN32) || defined(__CYGWIN__) |
|
|
|
|
|
|
|
#if (_MSC_VER >= 1800) |
|
|
|
|
|
|
|
#include <versionhelpers.h> |
|
|
|
|
|
|
|
#else |
|
|
|
|
|
|
|
static bool IsWindowsXPOrGreater(void); |
|
|
|
|
|
|
|
static bool IsWindows7OrGreater(void); |
|
|
|
|
|
|
|
#endif |
|
|
|
static bool pgwin32_IsInstalled(SC_HANDLE); |
|
|
|
static bool pgwin32_IsInstalled(SC_HANDLE); |
|
|
|
static char *pgwin32_CommandLine(bool); |
|
|
|
static char *pgwin32_CommandLine(bool); |
|
|
|
static void pgwin32_doRegister(void); |
|
|
|
static void pgwin32_doRegister(void); |
|
|
@ -1226,6 +1232,29 @@ do_kill(pgpid_t pid) |
|
|
|
|
|
|
|
|
|
|
|
#if defined(WIN32) || defined(__CYGWIN__) |
|
|
|
#if defined(WIN32) || defined(__CYGWIN__) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#if (_MSC_VER < 1800) |
|
|
|
|
|
|
|
static bool |
|
|
|
|
|
|
|
IsWindowsXPOrGreater(void) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
OSVERSIONINFO osv; |
|
|
|
|
|
|
|
osv.dwOSVersionInfoSize = sizeof(osv); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* Windows XP = Version 5.1 */ |
|
|
|
|
|
|
|
return (!GetVersionEx(&osv) || /* could not get version */ |
|
|
|
|
|
|
|
osv.dwMajorVersion > 5 || (osv.dwMajorVersion == 5 && osv.dwMinorVersion >= 1)); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static bool IsWindows7OrGreater(void) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
OSVERSIONINFO osv; |
|
|
|
|
|
|
|
osv.dwOSVersionInfoSize = sizeof(osv); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* Windows 7 = Version 6.0 */ |
|
|
|
|
|
|
|
return (!GetVersionEx(&osv) || /* could not get version */ |
|
|
|
|
|
|
|
osv.dwMajorVersion > 6 || (osv.dwMajorVersion == 6 && osv.dwMinorVersion >= 0)); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
static bool |
|
|
|
static bool |
|
|
|
pgwin32_IsInstalled(SC_HANDLE hSCM) |
|
|
|
pgwin32_IsInstalled(SC_HANDLE hSCM) |
|
|
|
{ |
|
|
|
{ |
|
|
@ -1655,12 +1684,7 @@ CreateRestrictedProcess(char *cmd, PROCESS_INFORMATION *processInfo, bool as_ser |
|
|
|
* IsProcessInJob() is not available on < WinXP, so there is no need |
|
|
|
* IsProcessInJob() is not available on < WinXP, so there is no need |
|
|
|
* to log the error every time in that case |
|
|
|
* to log the error every time in that case |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
OSVERSIONINFO osv; |
|
|
|
if (IsWindowsXPOrGreater()) |
|
|
|
|
|
|
|
|
|
|
|
osv.dwOSVersionInfoSize = sizeof(osv); |
|
|
|
|
|
|
|
if (!GetVersionEx(&osv) || /* could not get version */ |
|
|
|
|
|
|
|
(osv.dwMajorVersion == 5 && osv.dwMinorVersion > 0) || /* 5.1=xp, 5.2=2003, etc */ |
|
|
|
|
|
|
|
osv.dwMajorVersion > 5) /* anything newer should have the API */ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
/*
|
|
|
|
* Log error if we can't get version, or if we're on WinXP/2003 or |
|
|
|
* 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 |
|
|
|
JOBOBJECT_BASIC_LIMIT_INFORMATION basicLimit; |
|
|
|
JOBOBJECT_BASIC_LIMIT_INFORMATION basicLimit; |
|
|
|
JOBOBJECT_BASIC_UI_RESTRICTIONS uiRestrictions; |
|
|
|
JOBOBJECT_BASIC_UI_RESTRICTIONS uiRestrictions; |
|
|
|
JOBOBJECT_SECURITY_LIMIT_INFORMATION securityLimit; |
|
|
|
JOBOBJECT_SECURITY_LIMIT_INFORMATION securityLimit; |
|
|
|
OSVERSIONINFO osv; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ZeroMemory(&basicLimit, sizeof(basicLimit)); |
|
|
|
ZeroMemory(&basicLimit, sizeof(basicLimit)); |
|
|
|
ZeroMemory(&uiRestrictions, sizeof(uiRestrictions)); |
|
|
|
ZeroMemory(&uiRestrictions, sizeof(uiRestrictions)); |
|
|
@ -1708,10 +1731,7 @@ CreateRestrictedProcess(char *cmd, PROCESS_INFORMATION *processInfo, bool as_ser |
|
|
|
|
|
|
|
|
|
|
|
if (as_service) |
|
|
|
if (as_service) |
|
|
|
{ |
|
|
|
{ |
|
|
|
osv.dwOSVersionInfoSize = sizeof(osv); |
|
|
|
if (!IsWindows7OrGreater()) |
|
|
|
if (!GetVersionEx(&osv) || |
|
|
|
|
|
|
|
osv.dwMajorVersion < 6 || |
|
|
|
|
|
|
|
(osv.dwMajorVersion == 6 && osv.dwMinorVersion == 0)) |
|
|
|
|
|
|
|
{ |
|
|
|
{ |
|
|
|
/*
|
|
|
|
/*
|
|
|
|
* On Windows 7 (and presumably later), |
|
|
|
* On Windows 7 (and presumably later), |
|
|
|