summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorGeorge Hazan <ghazan@miranda.im>2020-09-14 20:09:54 +0300
committerGeorge Hazan <ghazan@miranda.im>2020-09-14 20:09:54 +0300
commit8b207363ce680529b39464c6209d1ad8cfc8c86c (patch)
tree249935d918ca0c2c8a7f470da7c242b14441b978 /plugins
parentba8b1153a5e43780d1d6ad59e5c2a1fcfcfdf116 (diff)
Plugin Updater: code cleaning
Diffstat (limited to 'plugins')
-rw-r--r--plugins/PluginUpdater/src/DlgListNew.cpp2
-rw-r--r--plugins/PluginUpdater/src/DlgUpdate.cpp3
-rw-r--r--plugins/PluginUpdater/src/Options.cpp3
-rw-r--r--plugins/PluginUpdater/src/Utils.cpp34
-rw-r--r--plugins/PluginUpdater/src/stdafx.h17
-rw-r--r--plugins/PluginUpdater/src/unzipfile.cpp4
6 files changed, 25 insertions, 38 deletions
diff --git a/plugins/PluginUpdater/src/DlgListNew.cpp b/plugins/PluginUpdater/src/DlgListNew.cpp
index 721934af09..b470cff31c 100644
--- a/plugins/PluginUpdater/src/DlgListNew.cpp
+++ b/plugins/PluginUpdater/src/DlgListNew.cpp
@@ -291,8 +291,6 @@ public:
void Unpack()
{
- AutoHandle pipe(hPipe);
-
// create needed folders after escalating priviledges. Folders creates when we actually install updates
TFileName wszTempFolder, wszBackupFolder;
CreateWorkFolders(wszTempFolder, wszBackupFolder);
diff --git a/plugins/PluginUpdater/src/DlgUpdate.cpp b/plugins/PluginUpdater/src/DlgUpdate.cpp
index 732a6e04d6..d27012b5b7 100644
--- a/plugins/PluginUpdater/src/DlgUpdate.cpp
+++ b/plugins/PluginUpdater/src/DlgUpdate.cpp
@@ -47,7 +47,6 @@ class CUpdateDLg : public CDlgBase
VARSW wszMirandaPath(L"%miranda_path%");
{
ThreadWatch threadId(pDlg->dwThreadId);
- AutoHandle pipe(hPipe);
// Create needed folders after escalating priviledges. Folders creates when we actually install updates
TFileName wszTempFolder, wszBackupFolder;
@@ -400,8 +399,6 @@ static void DlgUpdateSilent(void *param)
return;
}
- AutoHandle pipe(hPipe);
-
// Create needed folders after escalating priviledges. Folders creates when we actually install updates
TFileName wszTempFolder, wszBackupFolder;
CreateWorkFolders(wszTempFolder, wszBackupFolder);
diff --git a/plugins/PluginUpdater/src/Options.cpp b/plugins/PluginUpdater/src/Options.cpp
index 7880d0269c..c796524d7f 100644
--- a/plugins/PluginUpdater/src/Options.cpp
+++ b/plugins/PluginUpdater/src/Options.cpp
@@ -288,7 +288,8 @@ public:
FindClose(hFind);
}
- RemoveBackupFolders();
+ if (PrepareEscalation())
+ RemoveBackupFolders();
// if user tried to change the channel, run the update dialog immediately
if (bStartUpdate)
diff --git a/plugins/PluginUpdater/src/Utils.cpp b/plugins/PluginUpdater/src/Utils.cpp
index 3b346ffd46..5126bc04b8 100644
--- a/plugins/PluginUpdater/src/Utils.cpp
+++ b/plugins/PluginUpdater/src/Utils.cpp
@@ -20,7 +20,7 @@ Boston, MA 02111-1307, USA.
#include "stdafx.h"
HNETLIBUSER hNetlibUser = nullptr;
-HANDLE hPipe = nullptr;
+HANDLE g_hPipe = nullptr;
/////////////////////////////////////////////////////////////////////////////////////
@@ -398,12 +398,16 @@ bool PrepareEscalation()
if (IsRunAsAdmin())
return true;
+ // if pipe already opened?
+ if (g_hPipe != nullptr)
+ return true;
+
// Elevate the process. Create a pipe for a stub first
TFileName wzPipeName;
mir_snwprintf(wzPipeName, L"\\\\.\\pipe\\Miranda_Pu_%d", GetCurrentProcessId());
- hPipe = CreateNamedPipe(wzPipeName, PIPE_ACCESS_DUPLEX, PIPE_READMODE_BYTE | PIPE_WAIT, 1, 1024, 1024, NMPWAIT_USE_DEFAULT_WAIT, nullptr);
- if (hPipe == INVALID_HANDLE_VALUE) {
- hPipe = nullptr;
+ g_hPipe = CreateNamedPipe(wzPipeName, PIPE_ACCESS_DUPLEX, PIPE_READMODE_BYTE | PIPE_WAIT, 1, 1024, 1024, NMPWAIT_USE_DEFAULT_WAIT, nullptr);
+ if (g_hPipe == INVALID_HANDLE_VALUE) {
+ g_hPipe = nullptr;
}
else {
wchar_t cmdLine[100], *p;
@@ -420,8 +424,8 @@ bool PrepareEscalation()
sei.hwnd = nullptr;
sei.nShow = SW_NORMAL;
if (ShellExecuteEx(&sei)) {
- if (hPipe != nullptr)
- ConnectNamedPipe(hPipe, nullptr);
+ if (g_hPipe != nullptr)
+ ConnectNamedPipe(g_hPipe, nullptr);
return true;
}
@@ -472,6 +476,8 @@ void RemoveBackupFolders()
} while (FindNextFileW(hFind, &fdata));
// remove all folders with lesser dates if there're more than 10 folders
+ if (PrepareEscalation())
+
while (arNames.getCount() > g_plugin.iNumberBackups) {
mir_snwprintf(wszMask, L"%s\\Backups\\%s", g_wszRoot, arNames[0].c_str());
SafeDeleteDirectory(wszMask);
@@ -500,11 +506,11 @@ int TransactPipe(int opcode, const wchar_t *p1, const wchar_t *p2)
else *dst++ = 0;
DWORD dwBytes = 0, dwError;
- if (!WriteFile(hPipe, buf, (DWORD)((BYTE *)dst - buf), &dwBytes, nullptr))
+ if (!WriteFile(g_hPipe, buf, (DWORD)((BYTE *)dst - buf), &dwBytes, nullptr))
return GetLastError();
dwError = 0;
- if (!ReadFile(hPipe, &dwError, sizeof(DWORD), &dwBytes, nullptr))
+ if (!ReadFile(g_hPipe, &dwError, sizeof(DWORD), &dwBytes, nullptr))
return GetLastError();
if (dwBytes != sizeof(DWORD))
return ERROR_BAD_ARGUMENTS;
@@ -514,7 +520,7 @@ int TransactPipe(int opcode, const wchar_t *p1, const wchar_t *p2)
int SafeCopyFile(const wchar_t *pSrc, const wchar_t *pDst)
{
- if (hPipe == nullptr)
+ if (g_hPipe == nullptr)
return CopyFileW(pSrc, pDst, FALSE);
return TransactPipe(1, pSrc, pDst);
@@ -522,7 +528,7 @@ int SafeCopyFile(const wchar_t *pSrc, const wchar_t *pDst)
int SafeMoveFile(const wchar_t *pSrc, const wchar_t *pDst)
{
- if (hPipe == nullptr) {
+ if (g_hPipe == nullptr) {
if (!DeleteFileW(pDst)) {
DWORD dwError = GetLastError();
if (dwError != ERROR_ACCESS_DENIED && dwError != ERROR_FILE_NOT_FOUND)
@@ -560,7 +566,7 @@ int SafeMoveFile(const wchar_t *pSrc, const wchar_t *pDst)
int SafeDeleteFile(const wchar_t *pwszFile)
{
- if (hPipe == nullptr)
+ if (g_hPipe == nullptr)
return DeleteFile(pwszFile);
return TransactPipe(3, pwszFile, nullptr);
@@ -568,7 +574,7 @@ int SafeDeleteFile(const wchar_t *pwszFile)
int SafeCreateDirectory(const wchar_t *pwszFolder)
{
- if (hPipe == nullptr)
+ if (g_hPipe == nullptr)
return CreateDirectoryTreeW(pwszFolder);
return TransactPipe(4, pwszFolder, nullptr);
@@ -576,7 +582,7 @@ int SafeCreateDirectory(const wchar_t *pwszFolder)
int SafeDeleteDirectory(const wchar_t *pwszDirName)
{
- if (hPipe == nullptr)
+ if (g_hPipe == nullptr)
return DeleteDirectoryTreeW(pwszDirName);
return TransactPipe(6, pwszDirName, nullptr);
@@ -584,7 +590,7 @@ int SafeDeleteDirectory(const wchar_t *pwszDirName)
int SafeCreateFilePath(const wchar_t *pwszFolder)
{
- if (hPipe == nullptr) {
+ if (g_hPipe == nullptr) {
CreatePathToFileW(pwszFolder);
return 0;
}
diff --git a/plugins/PluginUpdater/src/stdafx.h b/plugins/PluginUpdater/src/stdafx.h
index efaf4787a3..28525666c9 100644
--- a/plugins/PluginUpdater/src/stdafx.h
+++ b/plugins/PluginUpdater/src/stdafx.h
@@ -153,7 +153,7 @@ using namespace std;
extern DWORD g_mirandaVersion;
extern wchar_t g_wszRoot[MAX_PATH], g_wszTempPath[MAX_PATH];
-extern HANDLE hPipe;
+extern HANDLE g_hPipe;
extern HNETLIBUSER hNetlibUser;
extern IconItem iconList[];
@@ -181,21 +181,6 @@ void UninitListNew(void);
int OptInit(WPARAM, LPARAM);
-class AutoHandle : private MNonCopyable
-{
- HANDLE &m_handle;
-
-public:
- AutoHandle(HANDLE &_handle) : m_handle(_handle) {}
- ~AutoHandle()
- {
- if (m_handle) {
- ::CloseHandle(m_handle);
- m_handle = nullptr;
- }
- }
-};
-
class ThreadWatch
{
DWORD &pId;
diff --git a/plugins/PluginUpdater/src/unzipfile.cpp b/plugins/PluginUpdater/src/unzipfile.cpp
index e837509ef3..fb3bb2ae5a 100644
--- a/plugins/PluginUpdater/src/unzipfile.cpp
+++ b/plugins/PluginUpdater/src/unzipfile.cpp
@@ -69,7 +69,7 @@ int extractCurrentFile(unzFile uf, wchar_t *pwszDestPath, wchar_t *pwszBackPath,
SafeCreateFilePath(wszDestFile);
wchar_t *pwszFile2unzip;
- if (hPipe == nullptr) // direct mode
+ if (g_hPipe == nullptr) // direct mode
pwszFile2unzip = wszDestFile;
else {
TFileName wszTempPath;
@@ -103,7 +103,7 @@ int extractCurrentFile(unzFile uf, wchar_t *pwszDestPath, wchar_t *pwszBackPath,
CloseHandle(hFile);
unzCloseCurrentFile(uf); /* don't lose the error */
- if (hPipe)
+ if (g_hPipe)
SafeMoveFile(pwszFile2unzip, wszDestFile);
}
return err;