diff --git a/Contrib/ExDLL/exdll.dsp b/Contrib/ExDLL/exdll.dsp index c9e31ca7..81b80533 100644 --- a/Contrib/ExDLL/exdll.dsp +++ b/Contrib/ExDLL/exdll.dsp @@ -52,8 +52,8 @@ BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib nsis\pluginapi.lib /nologo /entry:"DllMain" /dll /machine:I386 /nodefaultlib /out:"../../Plugins/exdll.dll" /opt:nowin98 +# ADD BASE LINK32 user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib /nologo /dll /machine:I386 +# ADD LINK32 user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib nsis\pluginapi.lib /nologo /entry:"DllMain" /dll /machine:I386 /nodefaultlib /out:"../../Plugins/exdll.dll" /opt:nowin98 # SUBTRACT LINK32 /pdb:none !ELSEIF "$(CFG)" == "exdll - Win32 Debug" @@ -79,8 +79,8 @@ BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib nsis\pluginapi.lib /nologo /dll /debug /machine:I386 /pdbtype:sept +# ADD BASE LINK32 user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept +# ADD LINK32 user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib nsis\pluginapi.lib /nologo /dll /debug /machine:I386 /pdbtype:sept !ENDIF diff --git a/Contrib/Library/RegTool/SConscript b/Contrib/Library/RegTool/SConscript index 570f0b81..05569446 100644 --- a/Contrib/Library/RegTool/SConscript +++ b/Contrib/Library/RegTool/SConscript @@ -5,11 +5,11 @@ files = Split(""" """) libs = Split(""" - kernel32 - oleaut32 advapi32 - user32 + oleaut32 ole32 + user32 + kernel32 """) Import('BuildUtil env GetArcCPU') diff --git a/Contrib/Makensisw/SConscript b/Contrib/Makensisw/SConscript index dd1a8e83..d7a6f7e0 100644 --- a/Contrib/Makensisw/SConscript +++ b/Contrib/Makensisw/SConscript @@ -31,7 +31,6 @@ resources = Split(""" """) libs = Split(""" - kernel32 advapi32 user32 gdi32 @@ -42,6 +41,7 @@ libs = Split(""" comctl32 wininet winmm + kernel32 """) docs = Split(""" diff --git a/Contrib/NSISdl/SConscript b/Contrib/NSISdl/SConscript index 01a04da9..1ab93c8f 100644 --- a/Contrib/NSISdl/SConscript +++ b/Contrib/NSISdl/SConscript @@ -9,10 +9,10 @@ files = Split(""" """) libs = Split(""" - kernel32 - user32 advapi32 wsock32 + user32 + kernel32 """) docs = Split(""" diff --git a/Contrib/UserInfo/SConscript b/Contrib/UserInfo/SConscript index a22bde82..26636214 100644 --- a/Contrib/UserInfo/SConscript +++ b/Contrib/UserInfo/SConscript @@ -5,9 +5,9 @@ files = Split(""" """) libs = Split(""" - kernel32 advapi32 user32 + kernel32 """) examples = Split(""" diff --git a/Contrib/UserInfo/UserInfo.c b/Contrib/UserInfo/UserInfo.c index 0be11854..eb1d6322 100644 --- a/Contrib/UserInfo/UserInfo.c +++ b/Contrib/UserInfo/UserInfo.c @@ -13,6 +13,24 @@ FORCEINLINE DWORD NoDepr_GetVersion() { __pragma(warning(push))__pragma(warning( typedef BOOL (WINAPI*CHECKTOKENMEMBERSHIP)(HANDLE TokenHandle,PSID SidToCheck,PBOOL IsMember); CHECKTOKENMEMBERSHIP _CheckTokenMembership=NULL; +static FARPROC GetAA32ProcAddress(LPCSTR FuncName) +{ + return GetProcAddress(GetModuleHandleA("ADVAPI32"), FuncName); +} + +#if defined(NSIS_FORCERUNTIMELINKING) //__MINGW64_VERSION_MAJOR+0 >= 1 +// OpenThreadToken is exported by kernel32.lib in mingw-w64 breaking < Win7 where it only exists in advapi32. +// sourceforge.net/p/mingw-w64/bugs/235/# & 821 with fix adapted from the negrutiu NSIS fork. +// We try to work around this by specifying advapi32 before kernel32 in the list of libraries but if that fails, set the preceding define. +#define OpenThreadToken DelayedOpenThreadToken +static BOOL WINAPI DelayedOpenThreadToken(HANDLE Thread, DWORD Access, BOOL OpenAsSelf, HANDLE*Token) +{ + typedef BOOL (WINAPI*OTT)(HANDLE, DWORD, BOOL, HANDLE*); + OTT func = (OTT) GetAA32ProcAddress("OpenThreadToken"); + return func(Thread, Access, OpenAsSelf, Token); +} +#endif + void __declspec(dllexport) GetName(HWND hwndParent, int string_size, TCHAR *variables, stack_t **stacktop) { @@ -74,8 +92,7 @@ TCHAR* GetAccountTypeHelper(BOOL CheckTokenForGroupDeny) // GetUserName is in advapi32.dll so we can avoid Load/Freelibrary _CheckTokenMembership= #ifndef _WIN64 - (CHECKTOKENMEMBERSHIP) GetProcAddress( - GetModuleHandle(_T("ADVAPI32")), "CheckTokenMembership"); + (CHECKTOKENMEMBERSHIP) GetAA32ProcAddress("CheckTokenMembership"); #else CheckTokenMembership; #endif diff --git a/Contrib/nsExec/SConscript b/Contrib/nsExec/SConscript index 044094b7..0c4aad1a 100644 --- a/Contrib/nsExec/SConscript +++ b/Contrib/nsExec/SConscript @@ -5,9 +5,9 @@ files = Split(""" """) libs = Split(""" - kernel32 - user32 advapi32 + user32 + kernel32 """) examples = Split(""" diff --git a/Contrib/zip2exe/SConscript b/Contrib/zip2exe/SConscript index d11ce01d..97ecaf9c 100644 --- a/Contrib/zip2exe/SConscript +++ b/Contrib/zip2exe/SConscript @@ -14,12 +14,12 @@ resources = Split(""" rc = 'res.rc' libs = Split(""" - user32 - gdi32 - comctl32 - comdlg32 advapi32 shell32 + comctl32 + comdlg32 + user32 + gdi32 z """) diff --git a/Source/exehead/SConscript b/Source/exehead/SConscript index e6fd3893..f0299ad8 100644 --- a/Source/exehead/SConscript +++ b/Source/exehead/SConscript @@ -35,14 +35,14 @@ zlib_files = Split(""" """) libs = Split(""" - kernel32 - user32 - gdi32 - shell32 advapi32 + shell32 + ole32 comdlg32 comctl32 - ole32 + user32 + gdi32 + kernel32 uuid """)