urlmon: Unregister window class on DLL unload.
This commit is contained in:
parent
16acd97eb0
commit
9ca4f9b65a
|
@ -83,14 +83,36 @@ static LRESULT WINAPI notif_wnd_proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM
|
|||
return DefWindowProcW(hwnd, msg, wParam, lParam);
|
||||
}
|
||||
|
||||
static const WCHAR wszURLMonikerNotificationWindow[] =
|
||||
{'U','R','L',' ','M','o','n','i','k','e','r',' ',
|
||||
'N','o','t','i','f','i','c','a','t','i','o','n',' ','W','i','n','d','o','w',0};
|
||||
|
||||
static ATOM notif_wnd_class;
|
||||
|
||||
static BOOL WINAPI register_notif_wnd_class(INIT_ONCE *once, void *param, void **context)
|
||||
{
|
||||
static WNDCLASSEXW wndclass = {
|
||||
sizeof(wndclass), 0, notif_wnd_proc, 0, 0,
|
||||
NULL, NULL, NULL, NULL, NULL,
|
||||
wszURLMonikerNotificationWindow, NULL
|
||||
};
|
||||
|
||||
wndclass.hInstance = hProxyDll;
|
||||
notif_wnd_class = RegisterClassExW(&wndclass);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void unregister_notif_wnd_class(void)
|
||||
{
|
||||
if(notif_wnd_class)
|
||||
UnregisterClassW(MAKEINTRESOURCEW(notif_wnd_class), hProxyDll);
|
||||
}
|
||||
|
||||
HWND get_notif_hwnd(void)
|
||||
{
|
||||
static ATOM wnd_class = 0;
|
||||
tls_data_t *tls_data;
|
||||
|
||||
static const WCHAR wszURLMonikerNotificationWindow[] =
|
||||
{'U','R','L',' ','M','o','n','i','k','e','r',' ',
|
||||
'N','o','t','i','f','i','c','a','t','i','o','n',' ','W','i','n','d','o','w',0};
|
||||
static INIT_ONCE init_once = INIT_ONCE_STATIC_INIT;
|
||||
|
||||
tls_data = get_tls_data();
|
||||
if(!tls_data)
|
||||
|
@ -101,23 +123,11 @@ HWND get_notif_hwnd(void)
|
|||
return tls_data->notif_hwnd;
|
||||
}
|
||||
|
||||
if(!wnd_class) {
|
||||
static WNDCLASSEXW wndclass = {
|
||||
sizeof(wndclass), 0,
|
||||
notif_wnd_proc, 0, 0,
|
||||
NULL, NULL, NULL, NULL, NULL,
|
||||
wszURLMonikerNotificationWindow,
|
||||
NULL
|
||||
};
|
||||
InitOnceExecuteOnce(&init_once, register_notif_wnd_class, NULL, NULL);
|
||||
if(!notif_wnd_class)
|
||||
return NULL;
|
||||
|
||||
wndclass.hInstance = hProxyDll;
|
||||
|
||||
wnd_class = RegisterClassExW(&wndclass);
|
||||
if (!wnd_class && GetLastError() == ERROR_CLASS_ALREADY_EXISTS)
|
||||
wnd_class = 1;
|
||||
}
|
||||
|
||||
tls_data->notif_hwnd = CreateWindowExW(0, wszURLMonikerNotificationWindow,
|
||||
tls_data->notif_hwnd = CreateWindowExW(0, MAKEINTRESOURCEW(notif_wnd_class),
|
||||
wszURLMonikerNotificationWindow, 0, 0, 0, 0, 0, HWND_MESSAGE,
|
||||
NULL, hProxyDll, NULL);
|
||||
if(tls_data->notif_hwnd)
|
||||
|
|
|
@ -139,6 +139,7 @@ static void process_detach(void)
|
|||
|
||||
free_session();
|
||||
free_tls_list();
|
||||
unregister_notif_wnd_class();
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
|
|
|
@ -225,6 +225,7 @@ typedef struct {
|
|||
|
||||
tls_data_t *get_tls_data(void) DECLSPEC_HIDDEN;
|
||||
|
||||
void unregister_notif_wnd_class(void) DECLSPEC_HIDDEN;
|
||||
HWND get_notif_hwnd(void) DECLSPEC_HIDDEN;
|
||||
void release_notif_hwnd(HWND) DECLSPEC_HIDDEN;
|
||||
|
||||
|
|
Loading…
Reference in New Issue