From 20866470fa7d3e4433769dd13e2897ab7224b8d3 Mon Sep 17 00:00:00 2001 From: anders_k Date: Mon, 27 Jul 2015 20:41:17 +0000 Subject: [PATCH] Added PESubsysVer attribute git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@6592 212acab6-be3b-0410-9dea-997c60f758d6 --- Docs/src/history.but | 2 ++ Source/build.cpp | 7 +++++++ Source/build.h | 2 +- Source/script.cpp | 10 ++++++++++ Source/tokens.cpp | 1 + Source/tokens.h | 1 + 6 files changed, 22 insertions(+), 1 deletion(-) diff --git a/Docs/src/history.but b/Docs/src/history.but index b728089d..03f1c99e 100644 --- a/Docs/src/history.but +++ b/Docs/src/history.but @@ -26,6 +26,8 @@ Released on ?, 201? \b nsDialogs and InstallOptions now use the system link color +\b Added PESubsysVer attribute + \H{v3.0b1} 3.0 Beta 1 Released on October 6th, 2014 diff --git a/Source/build.cpp b/Source/build.cpp index 547147ff..7738c06c 100644 --- a/Source/build.cpp +++ b/Source/build.cpp @@ -278,6 +278,7 @@ CEXEBuild::CEXEBuild(signed char pponly) : res_editor=0; PEDllCharacteristics = IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE|IMAGE_DLLCHARACTERISTICS_NO_SEH|IMAGE_DLLCHARACTERISTICS_NX_COMPAT|IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE; //forums.winamp.com/showthread.php?t=344755 + PESubsysVerMaj = PESubsysVerMin = (WORD) -1; manifest_comctl = manifest::comctl_old; manifest_exec_level = manifest::exec_level_none; manifest_dpiaware = manifest::dpiaware_notset; @@ -2404,6 +2405,12 @@ int CEXEBuild::UpdatePEHeader() // workaround for bug #2697027, #2725883, #2803097 headers->OptionalHeader.MajorImageVersion = FIX_ENDIAN_INT16(6); headers->OptionalHeader.MinorImageVersion = FIX_ENDIAN_INT16(0); + // Override SubsystemVersion? + if (PESubsysVerMaj != (WORD) -1) + { + headers->OptionalHeader.MajorSubsystemVersion = FIX_ENDIAN_INT16(PESubsysVerMaj); + headers->OptionalHeader.MinorSubsystemVersion = FIX_ENDIAN_INT16(PESubsysVerMin); + } // DllCharacteristics headers->OptionalHeader.DllCharacteristics = FIX_ENDIAN_INT16(PEDllCharacteristics); } catch (std::runtime_error& err) { diff --git a/Source/build.h b/Source/build.h index ca471016..a4b98d4e 100644 --- a/Source/build.h +++ b/Source/build.h @@ -531,7 +531,7 @@ class CEXEBuild { int deflateToFile(FILE *fp, char *buf, int len); // len==0 to flush #endif - WORD PEDllCharacteristics; + WORD PEDllCharacteristics, PESubsysVerMaj, PESubsysVerMin; manifest::comctl manifest_comctl; manifest::exec_level manifest_exec_level; manifest::dpiaware manifest_dpiaware; diff --git a/Source/script.cpp b/Source/script.cpp index b7af3acf..618288ff 100644 --- a/Source/script.cpp +++ b/Source/script.cpp @@ -2829,6 +2829,16 @@ int CEXEBuild::doCommand(int which_token, LineParser &line) SCRIPT_MSG(_T("PEDllCharacteristics: 0x%.4x -> 0x%.4x\n"), org, PEDllCharacteristics); } return PS_OK; + + case TOK_PESUBSYSVER: + { + unsigned int mj, mi; + if (2 == _stscanf(line.gettoken_str(1), _T("%u.%u"), &mj, &mi)) + if (mj <= 0xffff && mi <= 0xffff) + return (PESubsysVerMaj = (WORD) mj, PESubsysVerMin = (WORD) mi, PS_OK); + } + PRINTHELP(); + return PS_ERROR; case TOK_REQEXECLEVEL: switch (line.gettoken_enum(1,_T("none\0user\0highest\0admin\0"))) diff --git a/Source/tokens.cpp b/Source/tokens.cpp index 51e9bfbb..14d5216a 100644 --- a/Source/tokens.cpp +++ b/Source/tokens.cpp @@ -239,6 +239,7 @@ static tokenType tokenlist[TOK__LAST] = {TOK_WRITEREGEXPANDSTR,_T("WriteRegExpandStr"),4,0,_T("rootkey subkey entry_name new_value_string\n root_key=(HKCR|HKLM|HKCU|HKU|HKCC|HKDD|HKPD|SHCTX)"),TP_CODE}, {TOK_WRITEUNINSTALLER,_T("WriteUninstaller"),1,0,_T("uninstall_exe_name"),TP_CODE}, {TOK_PEDLLCHARACTERISTICS, _T("PEDllCharacteristics"),2,0,_T("addbits removebits"),TP_GLOBAL}, +{TOK_PESUBSYSVER, _T("PESubsysVer"),1,0,_T("major.minor"),TP_GLOBAL}, {TOK_XPSTYLE, _T("XPStyle"),1,0,_T("(on|off)"),TP_GLOBAL}, {TOK_REQEXECLEVEL, _T("RequestExecutionLevel"),1,0,_T("none|user|highest|admin"),TP_GLOBAL}, {TOK_MANIFEST_DPIAWARE,_T("ManifestDPIAware"),1,0,_T("notset|true|false"),TP_GLOBAL}, diff --git a/Source/tokens.h b/Source/tokens.h index 879b4810..089b25b5 100644 --- a/Source/tokens.h +++ b/Source/tokens.h @@ -60,6 +60,7 @@ enum TOK_FILEERRORTEXT, TOK_INSTPROGRESSFLAGS, TOK_PEDLLCHARACTERISTICS, + TOK_PESUBSYSVER, TOK_XPSTYLE, TOK_REQEXECLEVEL, TOK_MANIFEST_DPIAWARE,