mirror of
https://github.com/valinet/ExplorerPatcher.git
synced 2025-02-17 11:08:41 +01:00
Weather: Rearchitected component lifetime
This commit is contained in:
parent
668c234207
commit
b7a1ced429
@ -1322,6 +1322,11 @@ static BOOL GUI_Build(HDC hDC, HWND hwnd, POINT pt)
|
|||||||
HWND hShellTrayWnd = FindWindowW(L"Shell_TrayWnd", NULL);
|
HWND hShellTrayWnd = FindWindowW(L"Shell_TrayWnd", NULL);
|
||||||
if (hShellTrayWnd)
|
if (hShellTrayWnd)
|
||||||
{
|
{
|
||||||
|
HANDLE hEvent = NULL;
|
||||||
|
if (GetAsyncKeyState(VK_SHIFT))
|
||||||
|
{
|
||||||
|
hEvent = CreateEventW(NULL, FALSE, FALSE, _T(EP_SETUP_EVENTNAME));
|
||||||
|
}
|
||||||
WCHAR wszPath[MAX_PATH];
|
WCHAR wszPath[MAX_PATH];
|
||||||
ZeroMemory(wszPath, MAX_PATH * sizeof(WCHAR));
|
ZeroMemory(wszPath, MAX_PATH * sizeof(WCHAR));
|
||||||
PDWORD_PTR res = -1;
|
PDWORD_PTR res = -1;
|
||||||
@ -1362,6 +1367,10 @@ static BOOL GUI_Build(HDC hDC, HWND hwnd, POINT pt)
|
|||||||
wcscat_s(wszPath, MAX_PATH, L"\\explorer.exe");
|
wcscat_s(wszPath, MAX_PATH, L"\\explorer.exe");
|
||||||
Sleep(1000);
|
Sleep(1000);
|
||||||
GUI_RegSetValueExW(NULL, L"Virtualized_" _T(EP_CLSID) L"_TaskbarPosition", NULL, NULL, &dwTaskbarPosition, NULL);
|
GUI_RegSetValueExW(NULL, L"Virtualized_" _T(EP_CLSID) L"_TaskbarPosition", NULL, NULL, &dwTaskbarPosition, NULL);
|
||||||
|
if (hEvent)
|
||||||
|
{
|
||||||
|
CloseHandle(hEvent);
|
||||||
|
}
|
||||||
ShellExecuteW(
|
ShellExecuteW(
|
||||||
NULL,
|
NULL,
|
||||||
L"open",
|
L"open",
|
||||||
|
@ -18,4 +18,5 @@
|
|||||||
#define EP_SETUP_HELPER_SWITCH "/CreateExplorerShellUnelevatedAfterServicing"
|
#define EP_SETUP_HELPER_SWITCH "/CreateExplorerShellUnelevatedAfterServicing"
|
||||||
#define EP_DWM_SERVICENAME "ep_dwm_" EP_CLSID_LITE
|
#define EP_DWM_SERVICENAME "ep_dwm_" EP_CLSID_LITE
|
||||||
#define EP_DWM_EVENTNAME "Global\\ep_dwm_2_" EP_CLSID_LITE
|
#define EP_DWM_EVENTNAME "Global\\ep_dwm_2_" EP_CLSID_LITE
|
||||||
|
#define EP_SETUP_EVENTNAME "Global\\ep_setup_" EP_CLSID_LITE
|
||||||
#endif
|
#endif
|
@ -8110,9 +8110,25 @@ DWORD Inject(BOOL bIsExplorer)
|
|||||||
|
|
||||||
|
|
||||||
wszEPWeatherKillswitch = calloc(sizeof(WCHAR), MAX_PATH);
|
wszEPWeatherKillswitch = calloc(sizeof(WCHAR), MAX_PATH);
|
||||||
rand_string(wszEPWeatherKillswitch, MAX_PATH / 2);
|
srand(time(NULL));
|
||||||
wcscat_s(wszEPWeatherKillswitch, MAX_PATH, _T(EP_Weather_Killswitch));
|
rand_string(wszEPWeatherKillswitch, MAX_PATH / 2 - 1);
|
||||||
|
swprintf_s(wszEPWeatherKillswitch, sizeof(_T(EP_Weather_Killswitch)) / sizeof(WCHAR), L"%s", _T(EP_Weather_Killswitch));
|
||||||
|
wszEPWeatherKillswitch[wcslen(wszEPWeatherKillswitch)] = L'_';
|
||||||
|
//wprintf(L"%s\n", wszEPWeatherKillswitch);
|
||||||
hEPWeatherKillswitch = CreateMutexW(NULL, TRUE, wszEPWeatherKillswitch);
|
hEPWeatherKillswitch = CreateMutexW(NULL, TRUE, wszEPWeatherKillswitch);
|
||||||
|
/*while (TRUE)
|
||||||
|
{
|
||||||
|
hEPWeatherKillswitch = CreateMutexW(NULL, TRUE, wszEPWeatherKillswitch);
|
||||||
|
if (GetLastError() == ERROR_ALREADY_EXISTS)
|
||||||
|
{
|
||||||
|
WaitForSingleObject(hEPWeatherKillswitch, INFINITE);
|
||||||
|
CloseHandle(hEPWeatherKillswitch);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}*/
|
||||||
|
|
||||||
|
|
||||||
#ifdef _WIN64
|
#ifdef _WIN64
|
||||||
|
@ -540,6 +540,8 @@ int WINAPI wWinMain(
|
|||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CreateEventW(NULL, FALSE, FALSE, _T(EP_SETUP_EVENTNAME));
|
||||||
|
|
||||||
SHGetFolderPathW(NULL, SPECIAL_FOLDER, NULL, SHGFP_TYPE_CURRENT, wszPath);
|
SHGetFolderPathW(NULL, SPECIAL_FOLDER, NULL, SHGFP_TYPE_CURRENT, wszPath);
|
||||||
wcscat_s(wszPath, MAX_PATH, _T(APP_RELATIVE_PATH));
|
wcscat_s(wszPath, MAX_PATH, _T(APP_RELATIVE_PATH));
|
||||||
bOk = CreateDirectoryW(wszPath, NULL);
|
bOk = CreateDirectoryW(wszPath, NULL);
|
||||||
|
@ -3,9 +3,17 @@
|
|||||||
#include "ep_weather_provider_google_script.h"
|
#include "ep_weather_provider_google_script.h"
|
||||||
#include "ep_weather_error_html.h"
|
#include "ep_weather_error_html.h"
|
||||||
|
|
||||||
EPWeather* EPWeather_Instance;
|
EPWeather* EPWeather_Instance = NULL;
|
||||||
|
SRWLOCK Lock_EPWeather_Instance = { .Ptr = SRWLOCK_INIT };
|
||||||
FARPROC SHRegGetValueFromHKCUHKLMFunc;
|
FARPROC SHRegGetValueFromHKCUHKLMFunc;
|
||||||
|
|
||||||
|
static DWORD epw_Weather_ReleaseBecauseClientDiedThread(EPWeather* _this)
|
||||||
|
{
|
||||||
|
Sleep(5000);
|
||||||
|
while (_this->lpVtbl->Release(_this));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static void epw_Weather_SetTextScaleFactorFromRegistry(EPWeather* _this, HKEY hKey, BOOL bRefresh)
|
static void epw_Weather_SetTextScaleFactorFromRegistry(EPWeather* _this, HKEY hKey, BOOL bRefresh)
|
||||||
{
|
{
|
||||||
DWORD dwTextScaleFactor = 100, dwSize = sizeof(DWORD);
|
DWORD dwTextScaleFactor = 100, dwSize = sizeof(DWORD);
|
||||||
@ -57,6 +65,7 @@ ULONG STDMETHODCALLTYPE INetworkListManagerEvents_AddRefRelease(void* _this)
|
|||||||
|
|
||||||
HRESULT STDMETHODCALLTYPE INetworkListManagerEvents_ConnectivityChanged(void* _this2, NLM_CONNECTIVITY newConnectivity)
|
HRESULT STDMETHODCALLTYPE INetworkListManagerEvents_ConnectivityChanged(void* _this2, NLM_CONNECTIVITY newConnectivity)
|
||||||
{
|
{
|
||||||
|
AcquireSRWLockShared(&Lock_EPWeather_Instance);
|
||||||
EPWeather* _this = EPWeather_Instance; // GetWindowLongPtrW(FindWindowW(_T(EPW_WEATHER_CLASSNAME), NULL), GWLP_USERDATA);
|
EPWeather* _this = EPWeather_Instance; // GetWindowLongPtrW(FindWindowW(_T(EPW_WEATHER_CLASSNAME), NULL), GWLP_USERDATA);
|
||||||
if (_this)
|
if (_this)
|
||||||
{
|
{
|
||||||
@ -75,6 +84,7 @@ HRESULT STDMETHODCALLTYPE INetworkListManagerEvents_ConnectivityChanged(void* _t
|
|||||||
printf("[Network Events] Killed refresh timer.\n");
|
printf("[Network Events] Killed refresh timer.\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
ReleaseSRWLockShared(&Lock_EPWeather_Instance);
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -132,7 +142,9 @@ HRESULT STDMETHODCALLTYPE ICoreWebView2_get_AllowSingleSignOnUsingOSPrimaryAccou
|
|||||||
|
|
||||||
HRESULT STDMETHODCALLTYPE ICoreWebView2_CreateCoreWebView2EnvironmentCompleted(ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler* _this, HRESULT hr, ICoreWebView2Environment* pCoreWebView2Environemnt)
|
HRESULT STDMETHODCALLTYPE ICoreWebView2_CreateCoreWebView2EnvironmentCompleted(ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler* _this, HRESULT hr, ICoreWebView2Environment* pCoreWebView2Environemnt)
|
||||||
{
|
{
|
||||||
|
AcquireSRWLockShared(&Lock_EPWeather_Instance);
|
||||||
pCoreWebView2Environemnt->lpVtbl->CreateCoreWebView2Controller(pCoreWebView2Environemnt, EPWeather_Instance->hWnd /* FindWindowW(_T(EPW_WEATHER_CLASSNAME), NULL) */, &EPWeather_ICoreWebView2CreateCoreWebView2ControllerCompletedHandler);
|
pCoreWebView2Environemnt->lpVtbl->CreateCoreWebView2Controller(pCoreWebView2Environemnt, EPWeather_Instance->hWnd /* FindWindowW(_T(EPW_WEATHER_CLASSNAME), NULL) */, &EPWeather_ICoreWebView2CreateCoreWebView2ControllerCompletedHandler);
|
||||||
|
ReleaseSRWLockShared(&Lock_EPWeather_Instance);
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -263,6 +275,8 @@ HRESULT STDMETHODCALLTYPE _ep_weather_ReboundBrowser(EPWeather* _this, LONG64 dw
|
|||||||
|
|
||||||
HRESULT STDMETHODCALLTYPE ICoreWebView2_CreateCoreWebView2ControllerCompleted(ICoreWebView2CreateCoreWebView2ControllerCompletedHandler* _this2, HRESULT hr, ICoreWebView2Controller* pCoreWebView2Controller)
|
HRESULT STDMETHODCALLTYPE ICoreWebView2_CreateCoreWebView2ControllerCompleted(ICoreWebView2CreateCoreWebView2ControllerCompletedHandler* _this2, HRESULT hr, ICoreWebView2Controller* pCoreWebView2Controller)
|
||||||
{
|
{
|
||||||
|
AcquireSRWLockShared(&Lock_EPWeather_Instance);
|
||||||
|
|
||||||
EPWeather* _this = EPWeather_Instance; // GetWindowLongPtrW(FindWindowW(_T(EPW_WEATHER_CLASSNAME), NULL), GWLP_USERDATA);
|
EPWeather* _this = EPWeather_Instance; // GetWindowLongPtrW(FindWindowW(_T(EPW_WEATHER_CLASSNAME), NULL), GWLP_USERDATA);
|
||||||
if (!_this->pCoreWebView2Controller)
|
if (!_this->pCoreWebView2Controller)
|
||||||
{
|
{
|
||||||
@ -318,11 +332,14 @@ HRESULT STDMETHODCALLTYPE ICoreWebView2_CreateCoreWebView2ControllerCompleted(IC
|
|||||||
|
|
||||||
_epw_Weather_NavigateToProvider(_this);
|
_epw_Weather_NavigateToProvider(_this);
|
||||||
|
|
||||||
|
ReleaseSRWLockShared(&Lock_EPWeather_Instance);
|
||||||
|
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT STDMETHODCALLTYPE ICoreWebView2_CallDevToolsProtocolMethodCompleted(ICoreWebView2CallDevToolsProtocolMethodCompletedHandler* _this, HRESULT errorCode, LPCWSTR returnObjectAsJson)
|
HRESULT STDMETHODCALLTYPE ICoreWebView2_CallDevToolsProtocolMethodCompleted(ICoreWebView2CallDevToolsProtocolMethodCompletedHandler* _this, HRESULT errorCode, LPCWSTR returnObjectAsJson)
|
||||||
{
|
{
|
||||||
|
AcquireSRWLockShared(&Lock_EPWeather_Instance);
|
||||||
if (EPWeather_Instance)
|
if (EPWeather_Instance)
|
||||||
{
|
{
|
||||||
wprintf(L"[CallDevToolsProtocolMethodCompleted] 0x%x [[ %s ]]\n", errorCode, returnObjectAsJson);
|
wprintf(L"[CallDevToolsProtocolMethodCompleted] 0x%x [[ %s ]]\n", errorCode, returnObjectAsJson);
|
||||||
@ -338,11 +355,13 @@ HRESULT STDMETHODCALLTYPE ICoreWebView2_CallDevToolsProtocolMethodCompleted(ICor
|
|||||||
}
|
}
|
||||||
CoTaskMemFree(uri);
|
CoTaskMemFree(uri);
|
||||||
}
|
}
|
||||||
|
ReleaseSRWLockShared(&Lock_EPWeather_Instance);
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT STDMETHODCALLTYPE ICoreWebView2_NavigationCompleted(ICoreWebView2NavigationCompletedEventHandler* _this2, ICoreWebView2* pCoreWebView2, ICoreWebView2NavigationCompletedEventArgs* pCoreWebView2NavigationCompletedEventArgs)
|
HRESULT STDMETHODCALLTYPE ICoreWebView2_NavigationCompleted(ICoreWebView2NavigationCompletedEventHandler* _this2, ICoreWebView2* pCoreWebView2, ICoreWebView2NavigationCompletedEventArgs* pCoreWebView2NavigationCompletedEventArgs)
|
||||||
{
|
{
|
||||||
|
AcquireSRWLockShared(&Lock_EPWeather_Instance);
|
||||||
EPWeather* _this = EPWeather_Instance; // GetWindowLongPtrW(FindWindowW(_T(EPW_WEATHER_CLASSNAME), NULL), GWLP_USERDATA);
|
EPWeather* _this = EPWeather_Instance; // GetWindowLongPtrW(FindWindowW(_T(EPW_WEATHER_CLASSNAME), NULL), GWLP_USERDATA);
|
||||||
BOOL bIsSuccess = FALSE;
|
BOOL bIsSuccess = FALSE;
|
||||||
pCoreWebView2NavigationCompletedEventArgs->lpVtbl->get_IsSuccess(pCoreWebView2NavigationCompletedEventArgs, &bIsSuccess);
|
pCoreWebView2NavigationCompletedEventArgs->lpVtbl->get_IsSuccess(pCoreWebView2NavigationCompletedEventArgs, &bIsSuccess);
|
||||||
@ -365,11 +384,13 @@ HRESULT STDMETHODCALLTYPE ICoreWebView2_NavigationCompleted(ICoreWebView2Navigat
|
|||||||
}
|
}
|
||||||
_this->pCoreWebView2Controller->lpVtbl->put_IsVisible(_this->pCoreWebView2Controller, FALSE);
|
_this->pCoreWebView2Controller->lpVtbl->put_IsVisible(_this->pCoreWebView2Controller, FALSE);
|
||||||
_this->pCoreWebView2Controller->lpVtbl->put_IsVisible(_this->pCoreWebView2Controller, TRUE);
|
_this->pCoreWebView2Controller->lpVtbl->put_IsVisible(_this->pCoreWebView2Controller, TRUE);
|
||||||
|
ReleaseSRWLockShared(&Lock_EPWeather_Instance);
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT STDMETHODCALLTYPE ICoreWebView2_ExecuteScriptCompleted(ICoreWebView2ExecuteScriptCompletedHandler* _this2, HRESULT hr, LPCWSTR pResultObjectAsJson)
|
HRESULT STDMETHODCALLTYPE ICoreWebView2_ExecuteScriptCompleted(ICoreWebView2ExecuteScriptCompletedHandler* _this2, HRESULT hr, LPCWSTR pResultObjectAsJson)
|
||||||
{
|
{
|
||||||
|
AcquireSRWLockShared(&Lock_EPWeather_Instance);
|
||||||
EPWeather* _this = EPWeather_Instance; // GetWindowLongPtrW(FindWindowW(_T(EPW_WEATHER_CLASSNAME), NULL), GWLP_USERDATA);
|
EPWeather* _this = EPWeather_Instance; // GetWindowLongPtrW(FindWindowW(_T(EPW_WEATHER_CLASSNAME), NULL), GWLP_USERDATA);
|
||||||
if (_this)
|
if (_this)
|
||||||
{
|
{
|
||||||
@ -394,6 +415,7 @@ HRESULT STDMETHODCALLTYPE ICoreWebView2_ExecuteScriptCompleted(ICoreWebView2Exec
|
|||||||
printf("consent granted\n");
|
printf("consent granted\n");
|
||||||
PostMessageW(EPWeather_Instance->hWnd, EP_WEATHER_WM_FETCH_DATA, 0, 0);
|
PostMessageW(EPWeather_Instance->hWnd, EP_WEATHER_WM_FETCH_DATA, 0, 0);
|
||||||
SetTimer(EPWeather_Instance->hWnd, EP_WEATHER_TIMER_REQUEST_REFRESH, EP_WEATHER_TIMER_REQUEST_REFRESH_DELAY * 5, NULL);
|
SetTimer(EPWeather_Instance->hWnd, EP_WEATHER_TIMER_REQUEST_REFRESH, EP_WEATHER_TIMER_REQUEST_REFRESH_DELAY * 5, NULL);
|
||||||
|
ReleaseSRWLockShared(&Lock_EPWeather_Instance);
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -522,11 +544,13 @@ HRESULT STDMETHODCALLTYPE ICoreWebView2_ExecuteScriptCompleted(ICoreWebView2Exec
|
|||||||
SetTimer(_this->hWnd, EP_WEATHER_TIMER_REQUEST_REPAINT, EP_WEATHER_TIMER_REQUEST_REPAINT_DELAY, NULL);
|
SetTimer(_this->hWnd, EP_WEATHER_TIMER_REQUEST_REPAINT, EP_WEATHER_TIMER_REQUEST_REPAINT_DELAY, NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
ReleaseSRWLockShared(&Lock_EPWeather_Instance);
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT STDMETHODCALLTYPE ICoreWebView2_PermissionRequested(ICoreWebView2PermissionRequestedEventHandler* _this2, ICoreWebView2* pCoreWebView2, ICoreWebView2PermissionRequestedEventArgs* pCoreWebView2PermissionRequestedEventArgs)
|
HRESULT STDMETHODCALLTYPE ICoreWebView2_PermissionRequested(ICoreWebView2PermissionRequestedEventHandler* _this2, ICoreWebView2* pCoreWebView2, ICoreWebView2PermissionRequestedEventArgs* pCoreWebView2PermissionRequestedEventArgs)
|
||||||
{
|
{
|
||||||
|
AcquireSRWLockShared(&Lock_EPWeather_Instance);
|
||||||
COREWEBVIEW2_PERMISSION_KIND kind;
|
COREWEBVIEW2_PERMISSION_KIND kind;
|
||||||
pCoreWebView2PermissionRequestedEventArgs->lpVtbl->get_PermissionKind(pCoreWebView2PermissionRequestedEventArgs, &kind);
|
pCoreWebView2PermissionRequestedEventArgs->lpVtbl->get_PermissionKind(pCoreWebView2PermissionRequestedEventArgs, &kind);
|
||||||
if (kind == COREWEBVIEW2_PERMISSION_KIND_GEOLOCATION)
|
if (kind == COREWEBVIEW2_PERMISSION_KIND_GEOLOCATION)
|
||||||
@ -535,17 +559,22 @@ HRESULT STDMETHODCALLTYPE ICoreWebView2_PermissionRequested(ICoreWebView2Permiss
|
|||||||
printf("[Permissions] Geolocation permission request: %d\n", r);
|
printf("[Permissions] Geolocation permission request: %d\n", r);
|
||||||
pCoreWebView2PermissionRequestedEventArgs->lpVtbl->put_State(pCoreWebView2PermissionRequestedEventArgs, r ? COREWEBVIEW2_PERMISSION_STATE_ALLOW : COREWEBVIEW2_PERMISSION_STATE_DENY);
|
pCoreWebView2PermissionRequestedEventArgs->lpVtbl->put_State(pCoreWebView2PermissionRequestedEventArgs, r ? COREWEBVIEW2_PERMISSION_STATE_ALLOW : COREWEBVIEW2_PERMISSION_STATE_DENY);
|
||||||
}
|
}
|
||||||
|
ReleaseSRWLockShared(&Lock_EPWeather_Instance);
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
ULONG STDMETHODCALLTYPE epw_Weather_AddRef(EPWeather* _this)
|
ULONG STDMETHODCALLTYPE epw_Weather_AddRef(EPWeather* _this)
|
||||||
{
|
{
|
||||||
return InterlockedIncrement64(&(_this->cbCount));
|
ULONG value = InterlockedIncrement64(&(_this->cbCount));
|
||||||
|
printf("[General] AddRef: %d\n", value);
|
||||||
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
ULONG STDMETHODCALLTYPE epw_Weather_Release(EPWeather* _this)
|
ULONG STDMETHODCALLTYPE epw_Weather_Release(EPWeather* _this)
|
||||||
{
|
{
|
||||||
ULONG value = InterlockedDecrement64(&(_this->cbCount));
|
ULONG value = InterlockedDecrement64(&(_this->cbCount));
|
||||||
|
printf("[General] Release: %d\n", value);
|
||||||
|
|
||||||
if (value == 0)
|
if (value == 0)
|
||||||
{
|
{
|
||||||
if (_this->hMainThread)
|
if (_this->hMainThread)
|
||||||
@ -606,8 +635,21 @@ ULONG STDMETHODCALLTYPE epw_Weather_Release(EPWeather* _this)
|
|||||||
if (!dwOutstandingObjects && !dwOutstandingLocks)
|
if (!dwOutstandingObjects && !dwOutstandingLocks)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
printf("[General] Outstanding objects: %d, outstanding locks: %d\n", dwOutstandingObjects, dwOutstandingLocks);
|
||||||
|
|
||||||
TerminateProcess(GetCurrentProcess(), 0);
|
#if defined(DEBUG) | defined(_DEBUG)
|
||||||
|
printf("\nDumping memory leaks:\n");
|
||||||
|
_CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE);
|
||||||
|
_CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDOUT);
|
||||||
|
_CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_FILE);
|
||||||
|
_CrtSetReportFile(_CRT_ERROR, _CRTDBG_FILE_STDOUT);
|
||||||
|
_CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_FILE);
|
||||||
|
_CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDOUT);
|
||||||
|
_CrtDumpMemoryLeaks();
|
||||||
|
printf("Memory dump complete.\n\n");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//TerminateProcess(GetCurrentProcess(), 0);
|
||||||
|
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
@ -947,6 +989,7 @@ HRESULT STDMETHODCALLTYPE epw_Weather_SetWindowCornerPreference(EPWeather* _this
|
|||||||
DWORD WINAPI epw_Weather_MainThread(EPWeather* _this)
|
DWORD WINAPI epw_Weather_MainThread(EPWeather* _this)
|
||||||
{
|
{
|
||||||
HRESULT hr = S_OK;
|
HRESULT hr = S_OK;
|
||||||
|
BOOL bShouldReleaseBecauseClientDied = FALSE;
|
||||||
|
|
||||||
SetProcessDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2);
|
SetProcessDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2);
|
||||||
|
|
||||||
@ -978,8 +1021,8 @@ DWORD WINAPI epw_Weather_MainThread(EPWeather* _this)
|
|||||||
wc.hCursor = LoadCursorW(NULL, IDC_ARROW);
|
wc.hCursor = LoadCursorW(NULL, IDC_ARROW);
|
||||||
if (!RegisterClassW(&wc))
|
if (!RegisterClassW(&wc))
|
||||||
{
|
{
|
||||||
_this->hrLastError = HRESULT_FROM_WIN32(GetLastError());
|
//_this->hrLastError = HRESULT_FROM_WIN32(GetLastError());
|
||||||
goto cleanup;
|
//goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
_this->hWnd = CreateWindowExW(0, _T(EPW_WEATHER_CLASSNAME), L"", WS_OVERLAPPED | WS_CAPTION, _this->rc.left, _this->rc.top, _this->rc.right - _this->rc.left, _this->rc.bottom - _this->rc.top, NULL, NULL, epw_hModule, _this); // 1030, 630
|
_this->hWnd = CreateWindowExW(0, _T(EPW_WEATHER_CLASSNAME), L"", WS_OVERLAPPED | WS_CAPTION, _this->rc.left, _this->rc.top, _this->rc.right - _this->rc.left, _this->rc.bottom - _this->rc.top, NULL, NULL, epw_hModule, _this); // 1030, 630
|
||||||
@ -1081,12 +1124,23 @@ DWORD WINAPI epw_Weather_MainThread(EPWeather* _this)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (dwRes == WAIT_ABANDONED_0 + 1 || dwRes == WAIT_OBJECT_0 + 1)
|
else if (dwRes == WAIT_ABANDONED_0 + 1)// || dwRes == WAIT_OBJECT_0 + 1)
|
||||||
{
|
{
|
||||||
if (dwRes == WAIT_OBJECT_0 + 1) ReleaseMutex(_this->hSignalKillSwitch);
|
printf("[General] Client has died.\n");
|
||||||
CloseHandle(_this->hSignalKillSwitch);
|
|
||||||
|
if (OpenEventW(READ_CONTROL, FALSE, _T(EP_SETUP_EVENTNAME)))
|
||||||
|
{
|
||||||
|
printf("[General] Servicing is in progress, terminating...\n");
|
||||||
TerminateProcess(GetCurrentProcess(), 0);
|
TerminateProcess(GetCurrentProcess(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//if (dwRes == WAIT_OBJECT_0 + 1) ReleaseMutex(_this->hSignalKillSwitch);
|
||||||
|
CloseHandle(_this->hSignalKillSwitch);
|
||||||
|
//TerminateProcess(GetCurrentProcess(), 0);
|
||||||
|
_this->hSignalKillSwitch = NULL;
|
||||||
|
bShouldReleaseBecauseClientDied = TRUE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
else if (dwRes == WAIT_OBJECT_0 + 2)
|
else if (dwRes == WAIT_OBJECT_0 + 2)
|
||||||
{
|
{
|
||||||
epw_Weather_SetTextScaleFactorFromRegistry(_this, HKEY_CURRENT_USER, TRUE);
|
epw_Weather_SetTextScaleFactorFromRegistry(_this, HKEY_CURRENT_USER, TRUE);
|
||||||
@ -1128,23 +1182,23 @@ DWORD WINAPI epw_Weather_MainThread(EPWeather* _this)
|
|||||||
{
|
{
|
||||||
_this->pCoreWebView2Controller->lpVtbl->Release(_this->pCoreWebView2Controller);
|
_this->pCoreWebView2Controller->lpVtbl->Release(_this->pCoreWebView2Controller);
|
||||||
}
|
}
|
||||||
if (_this->cbTemperature && _this->wszTemperature)
|
if (_this->wszTemperature)
|
||||||
{
|
{
|
||||||
free(_this->wszTemperature);
|
free(_this->wszTemperature);
|
||||||
}
|
}
|
||||||
if (_this->cbUnit && _this->wszUnit)
|
if (_this->wszUnit)
|
||||||
{
|
{
|
||||||
free(_this->wszUnit);
|
free(_this->wszUnit);
|
||||||
}
|
}
|
||||||
if (_this->cbCondition && _this->wszCondition)
|
if (_this->wszCondition)
|
||||||
{
|
{
|
||||||
free(_this->wszCondition);
|
free(_this->wszCondition);
|
||||||
}
|
}
|
||||||
if (_this->cbImage && _this->pImage)
|
if (_this->pImage)
|
||||||
{
|
{
|
||||||
free(_this->pImage);
|
free(_this->pImage);
|
||||||
}
|
}
|
||||||
if (_this->cbLocation && _this->wszLocation)
|
if (_this->wszLocation)
|
||||||
{
|
{
|
||||||
free(_this->wszLocation);
|
free(_this->wszLocation);
|
||||||
}
|
}
|
||||||
@ -1152,13 +1206,17 @@ DWORD WINAPI epw_Weather_MainThread(EPWeather* _this)
|
|||||||
{
|
{
|
||||||
DestroyWindow(_this->hWnd);
|
DestroyWindow(_this->hWnd);
|
||||||
}
|
}
|
||||||
UnregisterClassW(_T(EPW_WEATHER_CLASSNAME), epw_hModule);
|
//UnregisterClassW(_T(EPW_WEATHER_CLASSNAME), epw_hModule);
|
||||||
if (_this->pTaskList)
|
if (_this->pTaskList)
|
||||||
{
|
{
|
||||||
_this->pTaskList->lpVtbl->Release(_this->pTaskList);
|
_this->pTaskList->lpVtbl->Release(_this->pTaskList);
|
||||||
}
|
}
|
||||||
CoUninitialize();
|
CoUninitialize();
|
||||||
SetEvent(_this->hInitializeEvent);
|
SetEvent(_this->hInitializeEvent);
|
||||||
|
if (bShouldReleaseBecauseClientDied)
|
||||||
|
{
|
||||||
|
//SHCreateThread(epw_Weather_ReleaseBecauseClientDiedThread, _this, CTF_NOADDREFLIB, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -1177,11 +1235,13 @@ HRESULT STDMETHODCALLTYPE epw_Weather_Initialize(EPWeather* _this, WCHAR wszName
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (EPWeather_Instance)
|
/*if (EPWeather_Instance)
|
||||||
{
|
{
|
||||||
return E_FAIL;
|
return E_FAIL;
|
||||||
}
|
}*/
|
||||||
|
AcquireSRWLockExclusive(&Lock_EPWeather_Instance);
|
||||||
EPWeather_Instance = _this;
|
EPWeather_Instance = _this;
|
||||||
|
ReleaseSRWLockExclusive(&Lock_EPWeather_Instance);
|
||||||
|
|
||||||
if (dwUpdateSchedule < 0)
|
if (dwUpdateSchedule < 0)
|
||||||
{
|
{
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
#include "ep_weather.h"
|
#include "ep_weather.h"
|
||||||
#include "ep_weather_utility.h"
|
#include "ep_weather_utility.h"
|
||||||
#include "../ep_weather_host_stub/ep_weather_host_h.h"
|
#include "../ep_weather_host_stub/ep_weather_host_h.h"
|
||||||
|
#include "../ExplorerPatcher/def.h"
|
||||||
#include <windowsx.h>
|
#include <windowsx.h>
|
||||||
#include <ShlObj.h>
|
#include <ShlObj.h>
|
||||||
#include <Shobjidl.h>
|
#include <Shobjidl.h>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user