diff options
author | George Hazan <ghazan@miranda.im> | 2022-08-05 17:47:29 +0300 |
---|---|---|
committer | George Hazan <ghazan@miranda.im> | 2022-08-05 17:47:29 +0300 |
commit | 1f3b7b5cfc7ca3bf335ed3fc062a0009e0a9dcb8 (patch) | |
tree | 4a82446b0571835ec396b075d345e263fdd2f5a7 | |
parent | de19bf751523d8c78701accc110eae5538cffca4 (diff) |
fixes #3143 (autoexec_*.ini не стираются после импорта, хотя для этого достаточно прав)
-rw-r--r-- | include/m_utils.h | 2 | ||||
-rw-r--r-- | libs/win32/mir_app.lib | bin | 227550 -> 227570 bytes | |||
-rw-r--r-- | libs/win64/mir_app.lib | bin | 223646 -> 223672 bytes | |||
-rw-r--r-- | src/mir_app/src/db_ini.cpp | 6 | ||||
-rw-r--r-- | src/mir_app/src/mir_app.def | 2 | ||||
-rw-r--r-- | src/mir_app/src/mir_app64.def | 2 | ||||
-rw-r--r-- | src/mir_app/src/pu_utils.cpp | 27 |
7 files changed, 23 insertions, 16 deletions
diff --git a/include/m_utils.h b/include/m_utils.h index a9914f93f7..e7bff67f1a 100644 --- a/include/m_utils.h +++ b/include/m_utils.h @@ -486,7 +486,7 @@ namespace PU MIR_APP_DLL(bool) IsProcessElevated();
// Launches pu_stub.exe with elevated priviledges if needed
- MIR_APP_DLL(bool) PrepareEscalation();
+ MIR_APP_DLL(bool) PrepareEscalation(const wchar_t *pwszFile = nullptr);
MIR_APP_DLL(int) SafeCopyFile(const wchar_t *pSrc, const wchar_t *pDst);
MIR_APP_DLL(int) SafeMoveFile(const wchar_t *pSrc, const wchar_t *pDst);
diff --git a/libs/win32/mir_app.lib b/libs/win32/mir_app.lib Binary files differindex 6d2db7c7aa..649d08771d 100644 --- a/libs/win32/mir_app.lib +++ b/libs/win32/mir_app.lib diff --git a/libs/win64/mir_app.lib b/libs/win64/mir_app.lib Binary files differindex 73e5cdf867..81024ccfa7 100644 --- a/libs/win64/mir_app.lib +++ b/libs/win64/mir_app.lib diff --git a/src/mir_app/src/db_ini.cpp b/src/mir_app/src/db_ini.cpp index 8c8ac9d1f4..8ce8f88385 100644 --- a/src/mir_app/src/db_ini.cpp +++ b/src/mir_app/src/db_ini.cpp @@ -30,19 +30,19 @@ static HANDLE hIniChangeNotification; static void MyMoveFile(const wchar_t *pwszFrom, const wchar_t *pwszTo)
{
- if (PU::PrepareEscalation())
+ if (PU::PrepareEscalation(pwszTo))
PU::SafeMoveFile(pwszFrom, pwszTo);
}
static void MyDeleteFile(const wchar_t *pwszFileName)
{
- if (PU::PrepareEscalation())
+ if (PU::PrepareEscalation(pwszFileName))
PU::SafeDeleteFile(pwszFileName);
}
static void ToRecycleBin(const wchar_t *pwszFileName)
{
- if (PU::PrepareEscalation())
+ if (PU::PrepareEscalation(pwszFileName))
PU::SafeRecycleBin(pwszFileName);
}
diff --git a/src/mir_app/src/mir_app.def b/src/mir_app/src/mir_app.def index f49cd58964..3bb3706b0b 100644 --- a/src/mir_app/src/mir_app.def +++ b/src/mir_app/src/mir_app.def @@ -738,7 +738,7 @@ Chat_CreateMenu @824 NONAME _Netlib_GetTlsUnique@12 @831 NONAME
?IsDirect@PU@@YG_NXZ @832 NONAME
?IsProcessElevated@PU@@YG_NXZ @833 NONAME
-?PrepareEscalation@PU@@YG_NXZ @834 NONAME
+?PrepareEscalation@PU@@YG_NPB_W@Z @834 NONAME
?SafeCopyFile@PU@@YGHPB_W0@Z @835 NONAME
?SafeCreateDirectory@PU@@YGHPB_W@Z @836 NONAME
?SafeCreateFilePath@PU@@YGHPB_W@Z @837 NONAME
diff --git a/src/mir_app/src/mir_app64.def b/src/mir_app/src/mir_app64.def index 249613f8b9..3f49b78264 100644 --- a/src/mir_app/src/mir_app64.def +++ b/src/mir_app/src/mir_app64.def @@ -738,7 +738,7 @@ Chat_CreateMenu @824 NONAME Netlib_GetTlsUnique @831 NONAME
?IsDirect@PU@@YA_NXZ @832 NONAME
?IsProcessElevated@PU@@YA_NXZ @833 NONAME
-?PrepareEscalation@PU@@YA_NXZ @834 NONAME
+?PrepareEscalation@PU@@YA_NPEB_W@Z @834 NONAME
?SafeCopyFile@PU@@YAHPEB_W0@Z @835 NONAME
?SafeCreateDirectory@PU@@YAHPEB_W@Z @836 NONAME
?SafeCreateFilePath@PU@@YAHPEB_W@Z @837 NONAME
diff --git a/src/mir_app/src/pu_utils.cpp b/src/mir_app/src/pu_utils.cpp index 622f483705..9495031fe7 100644 --- a/src/mir_app/src/pu_utils.cpp +++ b/src/mir_app/src/pu_utils.cpp @@ -133,21 +133,27 @@ Cleanup: ///////////////////////////////////////////////////////////////////////////////////////// // Launches pu_stub.exe with elevated priviledges if needed -MIR_APP_DLL(bool) PU::PrepareEscalation() +MIR_APP_DLL(bool) PU::PrepareEscalation(const wchar_t *pwszFile) { + CMStringW wszFilePath; // First try to create a file near Miranda32.exe - wchar_t szPath[MAX_PATH]; - GetModuleFileName(nullptr, szPath, _countof(szPath)); - wchar_t *ext = wcsrchr(szPath, '.'); - if (ext != nullptr) - *ext = '\0'; - wcscat(szPath, L".test"); + if (pwszFile == nullptr) { + wchar_t szPath[MAX_PATH]; + GetModuleFileName(nullptr, szPath, _countof(szPath)); + wchar_t *ext = wcsrchr(szPath, '.'); + if (ext != nullptr) + *ext = '\0'; + wszFilePath = szPath; + } + else wszFilePath = pwszFile; + + wszFilePath.Append(L".test"); - HANDLE hFile = CreateFile(szPath, GENERIC_WRITE, FILE_SHARE_READ, nullptr, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, nullptr); + HANDLE hFile = CreateFileW(wszFilePath, GENERIC_WRITE, FILE_SHARE_READ, nullptr, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, nullptr); if (hFile != INVALID_HANDLE_VALUE) { // we are admins or UAC is disable, cool CloseHandle(hFile); - DeleteFileW(szPath); + DeleteFileW(wszFilePath); return true; } @@ -168,7 +174,8 @@ MIR_APP_DLL(bool) PU::PrepareEscalation() } else { wchar_t cmdLine[100], *p; - GetModuleFileName(nullptr, szPath, ARRAYSIZE(szPath)); + wchar_t szPath[MAX_PATH]; + GetModuleFileName(nullptr, szPath, _countof(szPath)); if ((p = wcsrchr(szPath, '\\')) != nullptr) wcscpy(p + 1, L"pu_stub.exe"); mir_snwprintf(cmdLine, L"%d", GetCurrentProcessId()); |