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
This commit is contained in:
parent
caf00a1195
commit
6eaea6479f
4 changed files with 11 additions and 59 deletions
|
@ -369,18 +369,8 @@ void RenameViaWininit(const TCHAR* prevName, const TCHAR* newName)
|
||||||
|
|
||||||
BOOL DeleteFileOnReboot(TCHAR *pszFile)
|
BOOL DeleteFileOnReboot(TCHAR *pszFile)
|
||||||
{
|
{
|
||||||
BOOL fOk = FALSE;
|
BOOL fOk =
|
||||||
HMODULE hLib=GetModuleHandle(_T("KERNEL32.dll"));
|
MoveFileEx(pszFile, NULL, MOVEFILE_DELAY_UNTIL_REBOOT);
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#ifndef _WIN64
|
#ifndef _WIN64
|
||||||
if (!fOk)
|
if (!fOk)
|
||||||
{
|
{
|
||||||
|
|
|
@ -337,28 +337,15 @@ end:
|
||||||
if (g_exec_flags.reboot_called)
|
if (g_exec_flags.reboot_called)
|
||||||
{
|
{
|
||||||
const DWORD reason = SHTDN_REASON_FLAG_PLANNED | SHTDN_REASON_MAJOR_APPLICATION | SHTDN_REASON_MINOR_INSTALLATION;
|
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);
|
BOOL (WINAPI *IS)(LPTSTR,LPTSTR,DWORD,DWORD,DWORD);
|
||||||
#ifdef _WIN64
|
HANDLE hToken;
|
||||||
OPT=OpenProcessToken, LPV=LookupPrivilegeValue, ATP=AdjustTokenPrivileges;
|
TOKEN_PRIVILEGES tkp;
|
||||||
#else
|
if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
|
||||||
OPT=myGetProcAddress(MGA_OpenProcessToken);
|
|
||||||
LPV=myGetProcAddress(MGA_LookupPrivilegeValue);
|
|
||||||
ATP=myGetProcAddress(MGA_AdjustTokenPrivileges);
|
|
||||||
if (OPT && LPV && ATP)
|
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
HANDLE hToken;
|
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid);
|
||||||
TOKEN_PRIVILEGES tkp;
|
tkp.PrivilegeCount = 1;
|
||||||
if (OPT(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
|
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
|
||||||
{
|
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0);
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
IS=myGetProcAddress(MGA_InitiateShutdown);
|
IS=myGetProcAddress(MGA_InitiateShutdown);
|
||||||
|
|
|
@ -595,22 +595,9 @@ void RenameViaWininit(const TCHAR* prevName, const TCHAR* newName)
|
||||||
void NSISCALL MoveFileOnReboot(LPCTSTR pszExisting, LPCTSTR pszNew)
|
void NSISCALL MoveFileOnReboot(LPCTSTR pszExisting, LPCTSTR pszNew)
|
||||||
{
|
{
|
||||||
#ifndef _WIN64 // Shut up GCC unused warning
|
#ifndef _WIN64 // Shut up GCC unused warning
|
||||||
BOOL fOk = FALSE;
|
BOOL fOk =
|
||||||
#endif
|
#endif
|
||||||
typedef BOOL (WINAPI *mfea_t)(LPCTSTR lpExistingFileName,LPCTSTR lpNewFileName,DWORD dwFlags);
|
MoveFileEx(pszExisting, pszNew, MOVEFILE_DELAY_UNTIL_REBOOT|MOVEFILE_REPLACE_EXISTING);
|
||||||
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);
|
|
||||||
}
|
|
||||||
#ifndef _WIN64
|
#ifndef _WIN64
|
||||||
if (!fOk)
|
if (!fOk)
|
||||||
{
|
{
|
||||||
|
@ -1078,12 +1065,8 @@ struct MGA_FUNC MGA_FUNCS[] = {
|
||||||
#ifdef _UNICODE
|
#ifdef _UNICODE
|
||||||
#ifndef _WIN64
|
#ifndef _WIN64
|
||||||
{"KERNEL32", "GetDiskFreeSpaceExW"},
|
{"KERNEL32", "GetDiskFreeSpaceExW"},
|
||||||
{"KERNEL32", "MoveFileExW"},
|
|
||||||
{"KERNEL32", "GetUserDefaultUILanguage"},
|
{"KERNEL32", "GetUserDefaultUILanguage"},
|
||||||
{"ADVAPI32", "RegDeleteKeyExW"},
|
{"ADVAPI32", "RegDeleteKeyExW"},
|
||||||
{"ADVAPI32", "OpenProcessToken"},
|
|
||||||
{"ADVAPI32", "LookupPrivilegeValueW"},
|
|
||||||
{"ADVAPI32", "AdjustTokenPrivileges"},
|
|
||||||
#endif
|
#endif
|
||||||
{"ADVAPI32", "InitiateShutdownW"},
|
{"ADVAPI32", "InitiateShutdownW"},
|
||||||
{"SHLWAPI", "SHAutoComplete"},
|
{"SHLWAPI", "SHAutoComplete"},
|
||||||
|
@ -1091,12 +1074,8 @@ struct MGA_FUNC MGA_FUNCS[] = {
|
||||||
};
|
};
|
||||||
#else
|
#else
|
||||||
{"KERNEL32", "GetDiskFreeSpaceExA"},
|
{"KERNEL32", "GetDiskFreeSpaceExA"},
|
||||||
{"KERNEL32", "MoveFileExA"},
|
|
||||||
{"KERNEL32", "GetUserDefaultUILanguage"},
|
{"KERNEL32", "GetUserDefaultUILanguage"},
|
||||||
{"ADVAPI32", "RegDeleteKeyExA"},
|
{"ADVAPI32", "RegDeleteKeyExA"},
|
||||||
{"ADVAPI32", "OpenProcessToken"},
|
|
||||||
{"ADVAPI32", "LookupPrivilegeValueA"},
|
|
||||||
{"ADVAPI32", "AdjustTokenPrivileges"},
|
|
||||||
{"ADVAPI32", "InitiateShutdownA"},
|
{"ADVAPI32", "InitiateShutdownA"},
|
||||||
{"SHLWAPI", "SHAutoComplete"},
|
{"SHLWAPI", "SHAutoComplete"},
|
||||||
{"SHFOLDER", "SHGetFolderPathA"}
|
{"SHFOLDER", "SHGetFolderPathA"}
|
||||||
|
|
|
@ -121,12 +121,8 @@ void NSISCALL mini_memcpy(void *out, const void *in, UINT_PTR cb);
|
||||||
enum myGetProcAddressFunctions {
|
enum myGetProcAddressFunctions {
|
||||||
#ifndef _WIN64
|
#ifndef _WIN64
|
||||||
MGA_GetDiskFreeSpaceEx,
|
MGA_GetDiskFreeSpaceEx,
|
||||||
MGA_MoveFileEx,
|
|
||||||
MGA_GetUserDefaultUILanguage,
|
MGA_GetUserDefaultUILanguage,
|
||||||
MGA_RegDeleteKeyEx,
|
MGA_RegDeleteKeyEx,
|
||||||
MGA_OpenProcessToken,
|
|
||||||
MGA_LookupPrivilegeValue,
|
|
||||||
MGA_AdjustTokenPrivileges,
|
|
||||||
#endif
|
#endif
|
||||||
MGA_InitiateShutdown,
|
MGA_InitiateShutdown,
|
||||||
MGA_SHAutoComplete, // x64 can link to shlwapi directly but as long as MGA_SHGetFolderPath is used we can stick with myGetProcAddress
|
MGA_SHAutoComplete, // x64 can link to shlwapi directly but as long as MGA_SHGetFolderPath is used we can stick with myGetProcAddress
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue