1
0
mirror of https://github.com/valinet/ExplorerPatcher.git synced 2025-02-21 21:00:21 +01:00

Update success notification is displayed correctly for all settings; fixed posible null dereferencing in the updater

This commit is contained in:
Valentin Radu 2021-12-23 01:50:54 +02:00
parent 30b36b08c2
commit 277f235810
3 changed files with 143 additions and 91 deletions

View File

@ -240,9 +240,44 @@ DWORD CheckForUpdatesThread(LPVOID unused)
hEvents[1] = CreateEventW(NULL, FALSE, FALSE, L"EP_Ev_InstallUpdates_" _T(EP_CLSID));
if (hEvents[0] && hEvents[1])
{
if (bShowUpdateToast)
{
ShowUpdateSuccessNotification(hModule, notifier, notifFactory, &toast);
HKEY hKey = NULL;
RegCreateKeyExW(
HKEY_CURRENT_USER,
TEXT(REGPATH),
0,
NULL,
REG_OPTION_NON_VOLATILE,
KEY_READ | KEY_WOW64_64KEY | KEY_WRITE,
NULL,
&hKey,
NULL
);
if (hKey == NULL || hKey == INVALID_HANDLE_VALUE)
{
hKey = NULL;
}
if (hKey)
{
bShowUpdateToast = FALSE;
RegSetValueExW(
hKey,
TEXT("IsUpdatePending"),
0,
REG_DWORD,
&bShowUpdateToast,
sizeof(DWORD)
);
RegCloseKey(hKey);
}
}
if (dwUpdatePolicy != UPDATE_POLICY_MANUAL)
{
InstallUpdatesIfAvailable(hModule, bShowUpdateToast, notifier, notifFactory, &toast, UPDATES_OP_DEFAULT, bAllocConsole, dwUpdatePolicy);
InstallUpdatesIfAvailable(hModule, notifier, notifFactory, &toast, UPDATES_OP_DEFAULT, bAllocConsole, dwUpdatePolicy);
}
DWORD dwRet = 0;
while (TRUE)
@ -251,12 +286,12 @@ DWORD CheckForUpdatesThread(LPVOID unused)
{
case WAIT_OBJECT_0:
{
InstallUpdatesIfAvailable(hModule, bShowUpdateToast, notifier, notifFactory, &toast, UPDATES_OP_CHECK, bAllocConsole, dwUpdatePolicy);
InstallUpdatesIfAvailable(hModule, notifier, notifFactory, &toast, UPDATES_OP_CHECK, bAllocConsole, dwUpdatePolicy);
break;
}
case WAIT_OBJECT_0 + 1:
{
InstallUpdatesIfAvailable(hModule, bShowUpdateToast, notifier, notifFactory, &toast, UPDATES_OP_INSTALL, bAllocConsole, dwUpdatePolicy);
InstallUpdatesIfAvailable(hModule, notifier, notifFactory, &toast, UPDATES_OP_INSTALL, bAllocConsole, dwUpdatePolicy);
break;
}
default:

View File

@ -319,8 +319,11 @@ BOOL IsUpdateAvailableHelper(
#endif
if (*toast)
{
if (notifier)
{
notifier->lpVtbl->Hide(notifier, *toast);
}
(*toast)->lpVtbl->Release((*toast));
(*toast) = NULL;
}
@ -636,20 +639,13 @@ BOOL UpdateProduct(
);
}
BOOL InstallUpdatesIfAvailable(
BOOL ShowUpdateSuccessNotification(
HMODULE hModule,
BOOL bIsPostUpdate,
__x_ABI_CWindows_CUI_CNotifications_CIToastNotifier* notifier,
__x_ABI_CWindows_CUI_CNotifications_CIToastNotificationFactory* notifFactory,
__x_ABI_CWindows_CUI_CNotifications_CIToastNotification** toast,
DWORD dwOperation,
DWORD bAllocConsole,
DWORD dwUpdatePolicy
__x_ABI_CWindows_CUI_CNotifications_CIToastNotification** toast
)
{
wchar_t wszInfoURL[MAX_PATH];
ZeroMemory(wszInfoURL, MAX_PATH * sizeof(wchar_t));
wcscat_s(wszInfoURL, MAX_PATH, _T(UPDATES_RELEASE_INFO_URL_STABLE));
wchar_t buf[TOAST_BUFSIZ];
DWORD dwLeftMost = 0;
DWORD dwSecondLeft = 0;
@ -657,8 +653,6 @@ BOOL InstallUpdatesIfAvailable(
DWORD dwRightMost = 0;
QueryVersionInfo(hModule, VS_VERSION_INFO, &dwLeftMost, &dwSecondLeft, &dwSecondRight, &dwRightMost);
if (bIsPostUpdate)
{
__x_ABI_CWindows_CData_CXml_CDom_CIXmlDocument* inputXml = NULL;
const wchar_t text[] =
L"<toast displayTimestamp=\"2021-08-29T00:00:00.000Z\" scenario=\"reminder\" "
@ -680,13 +674,19 @@ BOOL InstallUpdatesIfAvailable(
NULL
);
if (*toast)
{
if (notifier)
{
notifier->lpVtbl->Hide(notifier, *toast);
}
(*toast)->lpVtbl->Release((*toast));
(*toast) = NULL;
}
if (notifFactory)
{
notifFactory->lpVtbl->CreateToastNotification(notifFactory, inputXml, toast);
if (*toast)
}
if ((*toast) && notifier)
{
notifier->lpVtbl->Show(notifier, *toast);
}
@ -695,40 +695,28 @@ BOOL InstallUpdatesIfAvailable(
inputXml->lpVtbl->Release(inputXml);
}
HKEY hKey = NULL;
DWORD dwSize = 0;
RegCreateKeyExW(
HKEY_CURRENT_USER,
TEXT(REGPATH),
0,
NULL,
REG_OPTION_NON_VOLATILE,
KEY_READ | KEY_WOW64_64KEY | KEY_WRITE,
NULL,
&hKey,
NULL
);
if (hKey == NULL || hKey == INVALID_HANDLE_VALUE)
{
hKey = NULL;
}
if (hKey)
{
dwSize = FALSE;
RegSetValueExW(
hKey,
TEXT("IsUpdatePending"),
0,
REG_DWORD,
&dwSize,
sizeof(DWORD)
);
RegCloseKey(hKey);
}
SwitchToThread();
}
}
BOOL InstallUpdatesIfAvailable(
HMODULE hModule,
__x_ABI_CWindows_CUI_CNotifications_CIToastNotifier* notifier,
__x_ABI_CWindows_CUI_CNotifications_CIToastNotificationFactory* notifFactory,
__x_ABI_CWindows_CUI_CNotifications_CIToastNotification** toast,
DWORD dwOperation,
DWORD bAllocConsole,
DWORD dwUpdatePolicy
)
{
wchar_t wszInfoURL[MAX_PATH];
ZeroMemory(wszInfoURL, MAX_PATH * sizeof(wchar_t));
wcscat_s(wszInfoURL, MAX_PATH, _T(UPDATES_RELEASE_INFO_URL_STABLE));
wchar_t buf[TOAST_BUFSIZ];
DWORD dwLeftMost = 0;
DWORD dwSecondLeft = 0;
DWORD dwSecondRight = 0;
DWORD dwRightMost = 0;
QueryVersionInfo(hModule, VS_VERSION_INFO, &dwLeftMost, &dwSecondLeft, &dwSecondRight, &dwRightMost);
if (bAllocConsole)
{
@ -803,13 +791,19 @@ BOOL InstallUpdatesIfAvailable(
if (dwOperation == UPDATES_OP_CHECK || dwOperation == UPDATES_OP_INSTALL)
{
if (*toast)
{
if (notifier)
{
notifier->lpVtbl->Hide(notifier, *toast);
}
(*toast)->lpVtbl->Release((*toast));
(*toast) = NULL;
}
if (notifFactory)
{
notifFactory->lpVtbl->CreateToastNotification(notifFactory, inputXml, toast);
if ((*toast))
}
if ((*toast) && notifier)
{
notifier->lpVtbl->Show(notifier, *toast);
}
@ -862,13 +856,19 @@ BOOL InstallUpdatesIfAvailable(
if (bOk || (!bOk && (dwOperation == UPDATES_OP_INSTALL)))
{
if (*toast)
{
if (notifier)
{
notifier->lpVtbl->Hide(notifier, *toast);
}
(*toast)->lpVtbl->Release((*toast));
(*toast) = NULL;
}
if (notifFactory)
{
notifFactory->lpVtbl->CreateToastNotification(notifFactory, inputXml, toast);
if ((*toast))
}
if ((*toast) && notifier)
{
notifier->lpVtbl->Show(notifier, *toast);
}
@ -901,13 +901,19 @@ BOOL InstallUpdatesIfAvailable(
NULL
);
if (*toast)
{
if (notifier)
{
notifier->lpVtbl->Hide(notifier, *toast);
}
(*toast)->lpVtbl->Release((*toast));
(*toast) = NULL;
}
if (notifFactory)
{
notifFactory->lpVtbl->CreateToastNotification(notifFactory, inputXml, toast);
if ((*toast))
}
if ((*toast) && notifier)
{
notifier->lpVtbl->Show(notifier, *toast);
}
@ -963,13 +969,19 @@ BOOL InstallUpdatesIfAvailable(
NULL
);
if (*toast)
{
if (notifier)
{
notifier->lpVtbl->Hide(notifier, *toast);
}
(*toast)->lpVtbl->Release((*toast));
(*toast) = NULL;
}
if (notifFactory)
{
notifFactory->lpVtbl->CreateToastNotification(notifFactory, inputXml, toast);
if ((*toast))
}
if ((*toast) && notifier)
{
notifier->lpVtbl->Show(notifier, *toast);
}

View File

@ -37,9 +37,14 @@ typedef struct IsUpdateAvailableParameters
};
BOOL IsUpdatePolicy(LPCWSTR wszDataStore, DWORD dwUpdatePolicy);
BOOL ShowUpdateSuccessNotification(
HMODULE hModule,
__x_ABI_CWindows_CUI_CNotifications_CIToastNotifier* notifier,
__x_ABI_CWindows_CUI_CNotifications_CIToastNotificationFactory* notifFactory,
__x_ABI_CWindows_CUI_CNotifications_CIToastNotification** toast
);
BOOL InstallUpdatesIfAvailable(
HMODULE hModule,
BOOL bIsPostUpdate,
__x_ABI_CWindows_CUI_CNotifications_CIToastNotifier* notifier,
__x_ABI_CWindows_CUI_CNotifications_CIToastNotificationFactory* notifFactory,
__x_ABI_CWindows_CUI_CNotifications_CIToastNotification** toast,