From 6eaea6479f06b134f94240361dd020b05acb96d4 Mon Sep 17 00:00:00 2001 From: anders_k Date: Sun, 15 Nov 2015 23:06:57 +0000 Subject: [PATCH] No need to delayload MoveFileEx, OpenProcessToken, LookupPrivilegeValueW and AdjustTokenPrivileges on Win9x. git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@6635 212acab6-be3b-0410-9dea-997c60f758d6 --- Contrib/Library/RegTool/RegTool.c | 14 ++------------ Source/exehead/Main.c | 27 +++++++-------------------- Source/exehead/util.c | 25 ++----------------------- Source/exehead/util.h | 4 ---- 4 files changed, 11 insertions(+), 59 deletions(-) diff --git a/Contrib/Library/RegTool/RegTool.c b/Contrib/Library/RegTool/RegTool.c index 7e4e38ae..450165be 100644 --- a/Contrib/Library/RegTool/RegTool.c +++ b/Contrib/Library/RegTool/RegTool.c @@ -369,18 +369,8 @@ void RenameViaWininit(const TCHAR* prevName, const TCHAR* newName) BOOL DeleteFileOnReboot(TCHAR *pszFile) { - BOOL fOk = FALSE; - HMODULE hLib=GetModuleHandle(_T("KERNEL32.dll")); - if (hLib) - { - typedef BOOL (WINAPI *mfea_t)(LPCTSTR lpExistingFileName,LPCTSTR lpNewFileName,DWORD dwFlags); - mfea_t mfea; - mfea=(mfea_t) GetProcAddress(hLib,_CRT_STRINGIZE(MoveFileEx)); - if (mfea) - { - fOk=mfea(pszFile, NULL, MOVEFILE_DELAY_UNTIL_REBOOT); - } - } + BOOL fOk = + MoveFileEx(pszFile, NULL, MOVEFILE_DELAY_UNTIL_REBOOT); #ifndef _WIN64 if (!fOk) { diff --git a/Source/exehead/Main.c b/Source/exehead/Main.c index fb5c85c9..ba830693 100644 --- a/Source/exehead/Main.c +++ b/Source/exehead/Main.c @@ -337,28 +337,15 @@ end: if (g_exec_flags.reboot_called) { const DWORD reason = SHTDN_REASON_FLAG_PLANNED | SHTDN_REASON_MAJOR_APPLICATION | SHTDN_REASON_MINOR_INSTALLATION; - BOOL (WINAPI *OPT)(HANDLE, DWORD,PHANDLE); - BOOL (WINAPI *LPV)(LPCTSTR,LPCTSTR,PLUID); - BOOL (WINAPI *ATP)(HANDLE,BOOL,PTOKEN_PRIVILEGES,DWORD,PTOKEN_PRIVILEGES,PDWORD); BOOL (WINAPI *IS)(LPTSTR,LPTSTR,DWORD,DWORD,DWORD); - #ifdef _WIN64 - OPT=OpenProcessToken, LPV=LookupPrivilegeValue, ATP=AdjustTokenPrivileges; - #else - OPT=myGetProcAddress(MGA_OpenProcessToken); - LPV=myGetProcAddress(MGA_LookupPrivilegeValue); - ATP=myGetProcAddress(MGA_AdjustTokenPrivileges); - if (OPT && LPV && ATP) - #endif + HANDLE hToken; + TOKEN_PRIVILEGES tkp; + if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) { - HANDLE hToken; - TOKEN_PRIVILEGES tkp; - if (OPT(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) - { - LPV(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid); - tkp.PrivilegeCount = 1; - tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; - ATP(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0); - } + LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid); + tkp.PrivilegeCount = 1; + tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; + AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0); } IS=myGetProcAddress(MGA_InitiateShutdown); diff --git a/Source/exehead/util.c b/Source/exehead/util.c index 03c57602..4fe45890 100644 --- a/Source/exehead/util.c +++ b/Source/exehead/util.c @@ -595,22 +595,9 @@ void RenameViaWininit(const TCHAR* prevName, const TCHAR* newName) void NSISCALL MoveFileOnReboot(LPCTSTR pszExisting, LPCTSTR pszNew) { #ifndef _WIN64 // Shut up GCC unused warning - BOOL fOk = FALSE; + BOOL fOk = #endif - typedef BOOL (WINAPI *mfea_t)(LPCTSTR lpExistingFileName,LPCTSTR lpNewFileName,DWORD dwFlags); - mfea_t mfea; - #ifdef _WIN64 - mfea=MoveFileEx; - #else - mfea=(mfea_t) myGetProcAddress(MGA_MoveFileEx); - if (mfea) - #endif - { -#ifndef _WIN64 // Shut up GCC unused warning - fOk= -#endif - mfea(pszExisting, pszNew, MOVEFILE_DELAY_UNTIL_REBOOT|MOVEFILE_REPLACE_EXISTING); - } + MoveFileEx(pszExisting, pszNew, MOVEFILE_DELAY_UNTIL_REBOOT|MOVEFILE_REPLACE_EXISTING); #ifndef _WIN64 if (!fOk) { @@ -1078,12 +1065,8 @@ struct MGA_FUNC MGA_FUNCS[] = { #ifdef _UNICODE #ifndef _WIN64 {"KERNEL32", "GetDiskFreeSpaceExW"}, - {"KERNEL32", "MoveFileExW"}, {"KERNEL32", "GetUserDefaultUILanguage"}, {"ADVAPI32", "RegDeleteKeyExW"}, - {"ADVAPI32", "OpenProcessToken"}, - {"ADVAPI32", "LookupPrivilegeValueW"}, - {"ADVAPI32", "AdjustTokenPrivileges"}, #endif {"ADVAPI32", "InitiateShutdownW"}, {"SHLWAPI", "SHAutoComplete"}, @@ -1091,12 +1074,8 @@ struct MGA_FUNC MGA_FUNCS[] = { }; #else {"KERNEL32", "GetDiskFreeSpaceExA"}, - {"KERNEL32", "MoveFileExA"}, {"KERNEL32", "GetUserDefaultUILanguage"}, {"ADVAPI32", "RegDeleteKeyExA"}, - {"ADVAPI32", "OpenProcessToken"}, - {"ADVAPI32", "LookupPrivilegeValueA"}, - {"ADVAPI32", "AdjustTokenPrivileges"}, {"ADVAPI32", "InitiateShutdownA"}, {"SHLWAPI", "SHAutoComplete"}, {"SHFOLDER", "SHGetFolderPathA"} diff --git a/Source/exehead/util.h b/Source/exehead/util.h index e9533e7d..06323caf 100644 --- a/Source/exehead/util.h +++ b/Source/exehead/util.h @@ -121,12 +121,8 @@ void NSISCALL mini_memcpy(void *out, const void *in, UINT_PTR cb); enum myGetProcAddressFunctions { #ifndef _WIN64 MGA_GetDiskFreeSpaceEx, - MGA_MoveFileEx, MGA_GetUserDefaultUILanguage, MGA_RegDeleteKeyEx, - MGA_OpenProcessToken, - MGA_LookupPrivilegeValue, - MGA_AdjustTokenPrivileges, #endif MGA_InitiateShutdown, MGA_SHAutoComplete, // x64 can link to shlwapi directly but as long as MGA_SHGetFolderPath is used we can stick with myGetProcAddress