diff options
-rw-r--r-- | include/m_utils.h | 1 | ||||
-rw-r--r-- | libs/win32/mir_app.lib | bin | 223352 -> 223622 bytes | |||
-rw-r--r-- | libs/win64/mir_app.lib | bin | 219070 -> 219346 bytes | |||
-rw-r--r-- | plugins/PluginUpdater/pu_stub/src/pu_stub.cpp | 15 | ||||
-rw-r--r-- | src/mir_app/src/db_ini.cpp | 10 | ||||
-rw-r--r-- | src/mir_app/src/mir_app.def | 1 | ||||
-rw-r--r-- | src/mir_app/src/mir_app64.def | 1 | ||||
-rw-r--r-- | src/mir_app/src/pu_utils.cpp | 16 |
8 files changed, 35 insertions, 9 deletions
diff --git a/include/m_utils.h b/include/m_utils.h index e3dd39ce58..421f52a3a3 100644 --- a/include/m_utils.h +++ b/include/m_utils.h @@ -421,6 +421,7 @@ namespace PU 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);
MIR_APP_DLL(int) SafeDeleteFile(const wchar_t *pwszFile);
+ MIR_APP_DLL(int) SafeRecycleBin(const wchar_t *pwszFile);
MIR_APP_DLL(int) SafeCreateDirectory(const wchar_t *pwszFolder);
MIR_APP_DLL(int) SafeDeleteDirectory(const wchar_t *pwszDirName);
MIR_APP_DLL(int) SafeCreateFilePath(const wchar_t *pwszFolder);
diff --git a/libs/win32/mir_app.lib b/libs/win32/mir_app.lib Binary files differindex 309e95d48d..b9a50b309c 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 044e331694..3ffdb4de90 100644 --- a/libs/win64/mir_app.lib +++ b/libs/win64/mir_app.lib diff --git a/plugins/PluginUpdater/pu_stub/src/pu_stub.cpp b/plugins/PluginUpdater/pu_stub/src/pu_stub.cpp index 3da0773ec8..9bdbd46177 100644 --- a/plugins/PluginUpdater/pu_stub/src/pu_stub.cpp +++ b/plugins/PluginUpdater/pu_stub/src/pu_stub.cpp @@ -102,7 +102,7 @@ int APIENTRY wWinMain(HINSTANCE /*hInstance*/, HINSTANCE, LPTSTR lpCmdLine, int) log(L"Received command: %d <%s> <%s>", dwAction, ptszFile1, ptszFile2); switch (dwAction) { case 1: // copy - if (!CopyFile(ptszFile1, ptszFile2, FALSE)) + if (!CopyFileW(ptszFile1, ptszFile2, FALSE)) dwError = GetLastError(); break; @@ -160,6 +160,19 @@ int APIENTRY wWinMain(HINSTANCE /*hInstance*/, HINSTANCE, LPTSTR lpCmdLine, int) dwError = 0; break; + case 7: + { + wchar_t tmpPath[MAX_PATH+1]; + _snwprintf_s(tmpPath, _countof(tmpPath), L"%s%c", ptszFile1, 0); + + SHFILEOPSTRUCT shfo = {}; + shfo.wFunc = FO_DELETE; + shfo.pFrom = tmpPath; + shfo.fFlags = FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_SILENT | FOF_ALLOWUNDO; + dwError = SHFileOperation(&shfo); + } + break; + default: dwError = ERROR_UNKNOWN_FEATURE; } diff --git a/src/mir_app/src/db_ini.cpp b/src/mir_app/src/db_ini.cpp index c920716303..a164e9eb83 100644 --- a/src/mir_app/src/db_ini.cpp +++ b/src/mir_app/src/db_ini.cpp @@ -36,14 +36,8 @@ static void MyDeleteFile(const wchar_t *pwszFileName) static void ToRecycleBin(const wchar_t *pwszFileName)
{
- CMStringW tmpPath(pwszFileName);
- tmpPath.AppendChar(0);
-
- SHFILEOPSTRUCT shfo = {};
- shfo.wFunc = FO_DELETE;
- shfo.pFrom = tmpPath;
- shfo.fFlags = FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_SILENT | FOF_ALLOWUNDO;
- SHFileOperation(&shfo);
+ if (PU::PrepareEscalation())
+ PU::SafeRecycleBin(pwszFileName);
}
/////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/mir_app/src/mir_app.def b/src/mir_app/src/mir_app.def index 484658e218..575fe053e1 100644 --- a/src/mir_app/src/mir_app.def +++ b/src/mir_app/src/mir_app.def @@ -789,3 +789,4 @@ _Netlib_SslShutdown@4 @876 NONAME _Netlib_SslWrite@12 @877 NONAME
?AllowTyping@CSrmmBaseDialog@@IBE_NXZ @878 NONAME
?setTyping@CSrmmBaseDialog@@QAEXHPBUUSERINFO@@@Z @879 NONAME
+?SafeRecycleBin@PU@@YGHPB_W@Z @880 NONAME
diff --git a/src/mir_app/src/mir_app64.def b/src/mir_app/src/mir_app64.def index babafe60b3..f867e78aa7 100644 --- a/src/mir_app/src/mir_app64.def +++ b/src/mir_app/src/mir_app64.def @@ -789,3 +789,4 @@ Netlib_SslShutdown @876 NONAME Netlib_SslWrite @877 NONAME
?AllowTyping@CSrmmBaseDialog@@IEBA_NXZ @878 NONAME
?setTyping@CSrmmBaseDialog@@QEAAXHPEBUUSERINFO@@@Z @879 NONAME
+?SafeRecycleBin@PU@@YAHPEB_W@Z @880 NONAME
diff --git a/src/mir_app/src/pu_utils.cpp b/src/mir_app/src/pu_utils.cpp index 64666c2912..3851b4d949 100644 --- a/src/mir_app/src/pu_utils.cpp +++ b/src/mir_app/src/pu_utils.cpp @@ -269,6 +269,22 @@ MIR_APP_DLL(int) PU::SafeDeleteFile(const wchar_t *pwszFile) return TransactPipe(3, pwszFile, nullptr); } +MIR_APP_DLL(int) PU::SafeRecycleBin(const wchar_t *pwszFile) +{ + if (g_hPipe == nullptr) { + CMStringW tmpPath(pwszFile); + tmpPath.AppendChar(0); + + SHFILEOPSTRUCT shfo = {}; + shfo.wFunc = FO_DELETE; + shfo.pFrom = tmpPath; + shfo.fFlags = FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_SILENT | FOF_ALLOWUNDO; + return SHFileOperation(&shfo); + } + + return TransactPipe(7, pwszFile, nullptr); +} + MIR_APP_DLL(int) PU::SafeCreateDirectory(const wchar_t *pwszFolder) { if (g_hPipe == nullptr) |