Try to work around the mingw-w64 kernel32:OpenThreadToken library issue
git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@7192 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
parent
8f0822bc5a
commit
5c78d6fafe
9 changed files with 41 additions and 24 deletions
|
@ -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
|
||||
|
||||
|
|
|
@ -5,11 +5,11 @@ files = Split("""
|
|||
""")
|
||||
|
||||
libs = Split("""
|
||||
kernel32
|
||||
oleaut32
|
||||
advapi32
|
||||
user32
|
||||
oleaut32
|
||||
ole32
|
||||
user32
|
||||
kernel32
|
||||
""")
|
||||
|
||||
Import('BuildUtil env GetArcCPU')
|
||||
|
|
|
@ -31,7 +31,6 @@ resources = Split("""
|
|||
""")
|
||||
|
||||
libs = Split("""
|
||||
kernel32
|
||||
advapi32
|
||||
user32
|
||||
gdi32
|
||||
|
@ -42,6 +41,7 @@ libs = Split("""
|
|||
comctl32
|
||||
wininet
|
||||
winmm
|
||||
kernel32
|
||||
""")
|
||||
|
||||
docs = Split("""
|
||||
|
|
|
@ -9,10 +9,10 @@ files = Split("""
|
|||
""")
|
||||
|
||||
libs = Split("""
|
||||
kernel32
|
||||
user32
|
||||
advapi32
|
||||
wsock32
|
||||
user32
|
||||
kernel32
|
||||
""")
|
||||
|
||||
docs = Split("""
|
||||
|
|
|
@ -5,9 +5,9 @@ files = Split("""
|
|||
""")
|
||||
|
||||
libs = Split("""
|
||||
kernel32
|
||||
advapi32
|
||||
user32
|
||||
kernel32
|
||||
""")
|
||||
|
||||
examples = Split("""
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -5,9 +5,9 @@ files = Split("""
|
|||
""")
|
||||
|
||||
libs = Split("""
|
||||
kernel32
|
||||
user32
|
||||
advapi32
|
||||
user32
|
||||
kernel32
|
||||
""")
|
||||
|
||||
examples = Split("""
|
||||
|
|
|
@ -14,12 +14,12 @@ resources = Split("""
|
|||
rc = 'res.rc'
|
||||
|
||||
libs = Split("""
|
||||
user32
|
||||
gdi32
|
||||
comctl32
|
||||
comdlg32
|
||||
advapi32
|
||||
shell32
|
||||
comctl32
|
||||
comdlg32
|
||||
user32
|
||||
gdi32
|
||||
z
|
||||
""")
|
||||
|
||||
|
|
|
@ -35,14 +35,14 @@ zlib_files = Split("""
|
|||
""")
|
||||
|
||||
libs = Split("""
|
||||
kernel32
|
||||
user32
|
||||
gdi32
|
||||
shell32
|
||||
advapi32
|
||||
shell32
|
||||
ole32
|
||||
comdlg32
|
||||
comctl32
|
||||
ole32
|
||||
user32
|
||||
gdi32
|
||||
kernel32
|
||||
uuid
|
||||
""")
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue