From 925aa905d94a2e86e268b342b719b355a4437223 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Sun, 6 Oct 2024 12:51:19 +0300 Subject: [PATCH] [win] updatesvc, online-installer: refactoring utils --- .../extras/online-installer/src/utils.cpp | 5 +- .../update-daemon/src/platform_win/utils.cpp | 55 ++++++++----------- 2 files changed, 26 insertions(+), 34 deletions(-) diff --git a/win-linux/extras/online-installer/src/utils.cpp b/win-linux/extras/online-installer/src/utils.cpp index f75f0de09..1153056b2 100644 --- a/win-linux/extras/online-installer/src/utils.cpp +++ b/win-linux/extras/online-installer/src/utils.cpp @@ -80,9 +80,10 @@ namespace NS_Utils size_t size = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, errID, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&msgBuff, 0, NULL); wstring msg = _TR(LABEL_ERR_COMMON) + wstring(L" ") + std::to_wstring(errID); - if (size > 0) + if (size > 0) { msg.append(L"\n" + wstring(msgBuff, (int)size)); - LocalFree(msgBuff); + LocalFree(msgBuff); + } return msg; } diff --git a/win-linux/extras/update-daemon/src/platform_win/utils.cpp b/win-linux/extras/update-daemon/src/platform_win/utils.cpp index 8d6a708d8..a202a2a43 100644 --- a/win-linux/extras/update-daemon/src/platform_win/utils.cpp +++ b/win-linux/extras/update-daemon/src/platform_win/utils.cpp @@ -67,6 +67,27 @@ static DWORD GetActiveSessionId() return sesId; } +static bool GetDuplicateToken(HANDLE &hTokenDup) +{ + DWORD sesId = GetActiveSessionId(); + if (sesId == 0xFFFFFFFF) { + NS_Logger::WriteLog(ADVANCED_ERROR_MESSAGE); + return false; + } + HANDLE hUserToken = NULL; + if (!WTSQueryUserToken(sesId, &hUserToken)) { + NS_Logger::WriteLog(ADVANCED_ERROR_MESSAGE); + return false; + } + if (!DuplicateTokenEx(hUserToken, MAXIMUM_ALLOWED, NULL, SecurityImpersonation, TokenPrimary, &hTokenDup)) { + CloseHandle(hUserToken); + NS_Logger::WriteLog(ADVANCED_ERROR_MESSAGE); + return false; + } + CloseHandle(hUserToken); + return true; +} + namespace NS_Utils { bool run_as_app = false; @@ -314,26 +335,14 @@ namespace NS_File return false; } - DWORD dwSessionId = GetActiveSessionId(); - if (dwSessionId == 0xFFFFFFFF) { - return false; - } - - HANDLE hUserToken = NULL; - if (!WTSQueryUserToken(dwSessionId, &hUserToken)) { - return false; - } - HANDLE hTokenDup = NULL; - if (!DuplicateTokenEx(hUserToken, MAXIMUM_ALLOWED, NULL, SecurityImpersonation, TokenPrimary, &hTokenDup)) { - CloseHandle(hUserToken); + if (!GetDuplicateToken(hTokenDup)) { return false; } LPVOID lpvEnv = NULL; if (!CreateEnvironmentBlock(&lpvEnv, hTokenDup, TRUE)) { CloseHandle(hTokenDup); - CloseHandle(hUserToken); return false; } @@ -352,12 +361,10 @@ namespace NS_File CloseHandle(pi.hProcess); DestroyEnvironmentBlock(lpvEnv); CloseHandle(hTokenDup); - CloseHandle(hUserToken); return true; } DestroyEnvironmentBlock(lpvEnv); CloseHandle(hTokenDup); - CloseHandle(hUserToken); return false; } @@ -554,33 +561,17 @@ namespace NS_File return fallbackTempPath(); } - DWORD sesId = GetActiveSessionId(); - if (sesId == 0xFFFFFFFF) { - NS_Logger::WriteLog(ADVANCED_ERROR_MESSAGE); - return fallbackTempPath(); - } - - HANDLE hUserToken = NULL; - if (!WTSQueryUserToken(sesId, &hUserToken)) { - NS_Logger::WriteLog(ADVANCED_ERROR_MESSAGE); - return fallbackTempPath(); - } - HANDLE hTokenDup = NULL; - if (!DuplicateTokenEx(hUserToken, MAXIMUM_ALLOWED, NULL, SecurityImpersonation, TokenPrimary, &hTokenDup)) { - CloseHandle(hUserToken); - NS_Logger::WriteLog(ADVANCED_ERROR_MESSAGE); + if (!GetDuplicateToken(hTokenDup)) { return fallbackTempPath(); } WCHAR buff[MAX_PATH] = {0}; if (ExpandEnvironmentStringsForUser(hTokenDup, L"%TEMP%", buff, MAX_PATH)) { CloseHandle(hTokenDup); - CloseHandle(hUserToken); return fromNativeSeparators(buff); } CloseHandle(hTokenDup); - CloseHandle(hUserToken); NS_Logger::WriteLog(ADVANCED_ERROR_MESSAGE); return fallbackTempPath(); }