summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/m_utils.h1
-rw-r--r--libs/win32/mir_app.libbin223352 -> 223622 bytes
-rw-r--r--libs/win64/mir_app.libbin219070 -> 219346 bytes
-rw-r--r--plugins/PluginUpdater/pu_stub/src/pu_stub.cpp15
-rw-r--r--src/mir_app/src/db_ini.cpp10
-rw-r--r--src/mir_app/src/mir_app.def1
-rw-r--r--src/mir_app/src/mir_app64.def1
-rw-r--r--src/mir_app/src/pu_utils.cpp16
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
index 309e95d48d..b9a50b309c 100644
--- a/libs/win32/mir_app.lib
+++ b/libs/win32/mir_app.lib
Binary files differ
diff --git a/libs/win64/mir_app.lib b/libs/win64/mir_app.lib
index 044e331694..3ffdb4de90 100644
--- a/libs/win64/mir_app.lib
+++ b/libs/win64/mir_app.lib
Binary files differ
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)