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 BASE BSC32 /nologo
|
||||||
# ADD BSC32 /nologo
|
# ADD BSC32 /nologo
|
||||||
LINK32=link.exe
|
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 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 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 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
|
# SUBTRACT LINK32 /pdb:none
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "exdll - Win32 Debug"
|
!ELSEIF "$(CFG)" == "exdll - Win32 Debug"
|
||||||
|
@ -79,8 +79,8 @@ BSC32=bscmake.exe
|
||||||
# ADD BASE BSC32 /nologo
|
# ADD BASE BSC32 /nologo
|
||||||
# ADD BSC32 /nologo
|
# ADD BSC32 /nologo
|
||||||
LINK32=link.exe
|
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 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 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 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
|
!ENDIF
|
||||||
|
|
||||||
|
|
|
@ -5,11 +5,11 @@ files = Split("""
|
||||||
""")
|
""")
|
||||||
|
|
||||||
libs = Split("""
|
libs = Split("""
|
||||||
kernel32
|
|
||||||
oleaut32
|
|
||||||
advapi32
|
advapi32
|
||||||
user32
|
oleaut32
|
||||||
ole32
|
ole32
|
||||||
|
user32
|
||||||
|
kernel32
|
||||||
""")
|
""")
|
||||||
|
|
||||||
Import('BuildUtil env GetArcCPU')
|
Import('BuildUtil env GetArcCPU')
|
||||||
|
|
|
@ -31,7 +31,6 @@ resources = Split("""
|
||||||
""")
|
""")
|
||||||
|
|
||||||
libs = Split("""
|
libs = Split("""
|
||||||
kernel32
|
|
||||||
advapi32
|
advapi32
|
||||||
user32
|
user32
|
||||||
gdi32
|
gdi32
|
||||||
|
@ -42,6 +41,7 @@ libs = Split("""
|
||||||
comctl32
|
comctl32
|
||||||
wininet
|
wininet
|
||||||
winmm
|
winmm
|
||||||
|
kernel32
|
||||||
""")
|
""")
|
||||||
|
|
||||||
docs = Split("""
|
docs = Split("""
|
||||||
|
|
|
@ -9,10 +9,10 @@ files = Split("""
|
||||||
""")
|
""")
|
||||||
|
|
||||||
libs = Split("""
|
libs = Split("""
|
||||||
kernel32
|
|
||||||
user32
|
|
||||||
advapi32
|
advapi32
|
||||||
wsock32
|
wsock32
|
||||||
|
user32
|
||||||
|
kernel32
|
||||||
""")
|
""")
|
||||||
|
|
||||||
docs = Split("""
|
docs = Split("""
|
||||||
|
|
|
@ -5,9 +5,9 @@ files = Split("""
|
||||||
""")
|
""")
|
||||||
|
|
||||||
libs = Split("""
|
libs = Split("""
|
||||||
kernel32
|
|
||||||
advapi32
|
advapi32
|
||||||
user32
|
user32
|
||||||
|
kernel32
|
||||||
""")
|
""")
|
||||||
|
|
||||||
examples = Split("""
|
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);
|
typedef BOOL (WINAPI*CHECKTOKENMEMBERSHIP)(HANDLE TokenHandle,PSID SidToCheck,PBOOL IsMember);
|
||||||
CHECKTOKENMEMBERSHIP _CheckTokenMembership=NULL;
|
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,
|
void __declspec(dllexport) GetName(HWND hwndParent, int string_size,
|
||||||
TCHAR *variables, stack_t **stacktop)
|
TCHAR *variables, stack_t **stacktop)
|
||||||
{
|
{
|
||||||
|
@ -74,8 +92,7 @@ TCHAR* GetAccountTypeHelper(BOOL CheckTokenForGroupDeny)
|
||||||
// GetUserName is in advapi32.dll so we can avoid Load/Freelibrary
|
// GetUserName is in advapi32.dll so we can avoid Load/Freelibrary
|
||||||
_CheckTokenMembership=
|
_CheckTokenMembership=
|
||||||
#ifndef _WIN64
|
#ifndef _WIN64
|
||||||
(CHECKTOKENMEMBERSHIP) GetProcAddress(
|
(CHECKTOKENMEMBERSHIP) GetAA32ProcAddress("CheckTokenMembership");
|
||||||
GetModuleHandle(_T("ADVAPI32")), "CheckTokenMembership");
|
|
||||||
#else
|
#else
|
||||||
CheckTokenMembership;
|
CheckTokenMembership;
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -5,9 +5,9 @@ files = Split("""
|
||||||
""")
|
""")
|
||||||
|
|
||||||
libs = Split("""
|
libs = Split("""
|
||||||
kernel32
|
|
||||||
user32
|
|
||||||
advapi32
|
advapi32
|
||||||
|
user32
|
||||||
|
kernel32
|
||||||
""")
|
""")
|
||||||
|
|
||||||
examples = Split("""
|
examples = Split("""
|
||||||
|
|
|
@ -14,12 +14,12 @@ resources = Split("""
|
||||||
rc = 'res.rc'
|
rc = 'res.rc'
|
||||||
|
|
||||||
libs = Split("""
|
libs = Split("""
|
||||||
user32
|
|
||||||
gdi32
|
|
||||||
comctl32
|
|
||||||
comdlg32
|
|
||||||
advapi32
|
advapi32
|
||||||
shell32
|
shell32
|
||||||
|
comctl32
|
||||||
|
comdlg32
|
||||||
|
user32
|
||||||
|
gdi32
|
||||||
z
|
z
|
||||||
""")
|
""")
|
||||||
|
|
||||||
|
|
|
@ -35,14 +35,14 @@ zlib_files = Split("""
|
||||||
""")
|
""")
|
||||||
|
|
||||||
libs = Split("""
|
libs = Split("""
|
||||||
kernel32
|
|
||||||
user32
|
|
||||||
gdi32
|
|
||||||
shell32
|
|
||||||
advapi32
|
advapi32
|
||||||
|
shell32
|
||||||
|
ole32
|
||||||
comdlg32
|
comdlg32
|
||||||
comctl32
|
comctl32
|
||||||
ole32
|
user32
|
||||||
|
gdi32
|
||||||
|
kernel32
|
||||||
uuid
|
uuid
|
||||||
""")
|
""")
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue