https://git.reactos.org/?p=reactos.git;a=commitdiff;h=016acd170dd75a7a24af235339a5321e2c24bf5a

commit 016acd170dd75a7a24af235339a5321e2c24bf5a
Author:     Serge Gautherie <[email protected]>
AuthorDate: Wed Aug 9 11:53:13 2023 +0200
Commit:     GitHub <[email protected]>
CommitDate: Wed Aug 9 11:53:13 2023 +0200

    [REACTOS] Do not free shared icon for ShellAbout() calls (#5519)
    
    CORE-18369
---
 base/applications/calc/winmain.c               | 14 ++++----------
 base/applications/clipbrd/clipbrd.c            |  6 ++----
 base/applications/mplay32/mplay32.c            |  5 ++---
 base/applications/mscutils/eventvwr/eventvwr.c |  6 ++----
 base/applications/mscutils/servman/mainwnd.c   |  6 ++----
 base/applications/mspaint/winproc.cpp          |  5 ++---
 base/applications/osk/main.c                   | 11 +++--------
 base/applications/rapps/gui.cpp                |  6 ++----
 base/applications/sndrec32/sndrec32.cpp        |  6 ++----
 base/applications/taskmgr/about.c              |  5 ++---
 dll/win32/devmgr/devmgmt/MainWindow.cpp        |  7 ++-----
 11 files changed, 25 insertions(+), 52 deletions(-)

diff --git a/base/applications/calc/winmain.c b/base/applications/calc/winmain.c
index 519bf60990e..cc26983cc52 100644
--- a/base/applications/calc/winmain.c
+++ b/base/applications/calc/winmain.c
@@ -1945,9 +1945,9 @@ int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE 
hPrevInstance, LPTSTR lpCmdL
                     hInstance,
                     MAKEINTRESOURCE(IDI_CALC),
                     IMAGE_ICON,
-                    GetSystemMetrics(SM_CXICON),
-                    GetSystemMetrics(SM_CYICON),
-                    0);
+                    0,
+                    0,
+                    LR_DEFAULTSIZE | LR_SHARED);
 
     calc.hSmIcon = LoadImage(
                     hInstance,
@@ -1955,7 +1955,7 @@ int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE 
hPrevInstance, LPTSTR lpCmdL
                     IMAGE_ICON,
                     GetSystemMetrics(SM_CXSMICON),
                     GetSystemMetrics(SM_CYSMICON),
-                    0);
+                    LR_SHARED);
 
     do {
         /* ignore hwnd: dialogs are already visible! */
@@ -1985,12 +1985,6 @@ int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE 
hPrevInstance, LPTSTR lpCmdL
         save_config();
     } while (calc.action != IDC_STATIC);
 
-    if (calc.hBgIcon != NULL)
-        DestroyIcon(calc.hBgIcon);
-
-    if (calc.hSmIcon != NULL)
-        DestroyIcon(calc.hSmIcon);
-
     stop_rpn_engine();
 
     Theme_Stop();
diff --git a/base/applications/clipbrd/clipbrd.c 
b/base/applications/clipbrd/clipbrd.c
index 6f5733cae48..6aaeaca88ea 100644
--- a/base/applications/clipbrd/clipbrd.c
+++ b/base/applications/clipbrd/clipbrd.c
@@ -248,13 +248,11 @@ static int OnCommand(HWND hWnd, UINT uMsg, WPARAM wParam, 
LPARAM lParam)
 
         case CMD_ABOUT:
         {
-            HICON hIcon;
             WCHAR szTitle[MAX_STRING_LEN];
 
-            hIcon = LoadIconW(Globals.hInstance, 
MAKEINTRESOURCE(CLIPBRD_ICON));
             LoadStringW(Globals.hInstance, STRING_CLIPBOARD, szTitle, 
ARRAYSIZE(szTitle));
-            ShellAboutW(Globals.hMainWnd, szTitle, NULL, hIcon);
-            DeleteObject(hIcon);
+            ShellAboutW(Globals.hMainWnd, szTitle, NULL,
+                        LoadIconW(Globals.hInstance, 
MAKEINTRESOURCEW(CLIPBRD_ICON)));
             break;
         }
 
diff --git a/base/applications/mplay32/mplay32.c 
b/base/applications/mplay32/mplay32.c
index 8fafeaaaba0..6d1f01dba7b 100644
--- a/base/applications/mplay32/mplay32.c
+++ b/base/applications/mplay32/mplay32.c
@@ -1439,9 +1439,8 @@ MainWndProc(HWND hwnd, UINT Message, WPARAM wParam, 
LPARAM lParam)
 
                 case IDM_ABOUT:
                 {
-                    HICON mplayIcon = LoadIcon(hInstance, 
MAKEINTRESOURCE(IDI_MAIN));
-                    ShellAbout(hwnd, szAppTitle, NULL, mplayIcon);
-                    DeleteObject(mplayIcon);
+                    ShellAbout(hwnd, szAppTitle, NULL,
+                               LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MAIN)));
                     break;
                 }
 
diff --git a/base/applications/mscutils/eventvwr/eventvwr.c 
b/base/applications/mscutils/eventvwr/eventvwr.c
index 7712565e118..f707d585041 100644
--- a/base/applications/mscutils/eventvwr/eventvwr.c
+++ b/base/applications/mscutils/eventvwr/eventvwr.c
@@ -3640,13 +3640,11 @@ WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM 
lParam)
 
                 case IDM_ABOUT:
                 {
-                    HICON hIcon;
                     WCHAR szCopyright[MAX_LOADSTRING];
 
-                    hIcon = LoadIconW(hInst, MAKEINTRESOURCEW(IDI_EVENTVWR));
                     LoadStringW(hInst, IDS_COPYRIGHT, szCopyright, 
ARRAYSIZE(szCopyright));
-                    ShellAboutW(hWnd, szTitle, szCopyright, hIcon);
-                    DeleteObject(hIcon);
+                    ShellAboutW(hWnd, szTitle, szCopyright,
+                                LoadIconW(hInst, 
MAKEINTRESOURCEW(IDI_EVENTVWR)));
                     break;
                 }
 
diff --git a/base/applications/mscutils/servman/mainwnd.c 
b/base/applications/mscutils/servman/mainwnd.c
index 1b016fb593b..526d9700199 100644
--- a/base/applications/mscutils/servman/mainwnd.c
+++ b/base/applications/mscutils/servman/mainwnd.c
@@ -382,7 +382,6 @@ MainWndCommand(PMAIN_WND_INFO Info,
 {
     WCHAR szAppName[256];
     WCHAR szAppAuthors[256];
-    HICON hIcon;
 
     UNREFERENCED_PARAMETER(hControl);
 
@@ -597,9 +596,8 @@ MainWndCommand(PMAIN_WND_INFO Info,
             LoadStringW(hInstance, IDS_APPNAME, szAppName, 
_countof(szAppName));
             LoadStringW(hInstance, IDS_APPAUTHORS, szAppAuthors, 
_countof(szAppAuthors));
 
-            hIcon = LoadIconW(hInstance, MAKEINTRESOURCEW(IDI_SM_ICON));
-            ShellAboutW(Info->hMainWnd, szAppName, szAppAuthors, hIcon);
-            DestroyIcon(hIcon);
+            ShellAboutW(Info->hMainWnd, szAppName, szAppAuthors,
+                        LoadIconW(hInstance, MAKEINTRESOURCEW(IDI_SM_ICON)));
         break;
 
     }
diff --git a/base/applications/mspaint/winproc.cpp 
b/base/applications/mspaint/winproc.cpp
index de22a406243..f930174d45d 100644
--- a/base/applications/mspaint/winproc.cpp
+++ b/base/applications/mspaint/winproc.cpp
@@ -599,13 +599,12 @@ LRESULT CMainWindow::OnCommand(UINT nMsg, WPARAM wParam, 
LPARAM lParam, BOOL& bH
     {
         case IDM_HELPINFO:
         {
-            HICON paintIcon = LoadIcon(g_hinstExe, 
MAKEINTRESOURCE(IDI_APPICON));
             TCHAR infotitle[100];
             TCHAR infotext[200];
             LoadString(g_hinstExe, IDS_INFOTITLE, infotitle, 
_countof(infotitle));
             LoadString(g_hinstExe, IDS_INFOTEXT, infotext, _countof(infotext));
-            ShellAbout(m_hWnd, infotitle, infotext, paintIcon);
-            DeleteObject(paintIcon);
+            ShellAbout(m_hWnd, infotitle, infotext,
+                       LoadIcon(g_hinstExe, MAKEINTRESOURCE(IDI_APPICON)));
             break;
         }
         case IDM_HELPHELPTOPICS:
diff --git a/base/applications/osk/main.c b/base/applications/osk/main.c
index 680156639aa..d7457a7c4c9 100644
--- a/base/applications/osk/main.c
+++ b/base/applications/osk/main.c
@@ -138,19 +138,14 @@ DWORD WINAPI OSK_WarningDlgThread(LPVOID lpParameter)
 VOID OSK_About(VOID)
 {
     WCHAR szAuthors[MAX_PATH];
-    HICON OSKIcon;
-
-    /* Load the icon */
-    OSKIcon = LoadImageW(Globals.hInstance, MAKEINTRESOURCEW(IDI_OSK), 
IMAGE_ICON, 0, 0, LR_DEFAULTSIZE);
 
     /* Load the strings into the "About" dialog */
     LoadStringW(Globals.hInstance, IDS_AUTHORS, szAuthors, 
_countof(szAuthors));
 
+    /* Load the icon */
     /* Finally, execute the "About" dialog by using the Shell routine */
-    ShellAboutW(Globals.hMainWnd, Globals.szTitle, szAuthors, OSKIcon);
-
-    /* Once done, destroy the icon */
-    DestroyIcon(OSKIcon);
+    ShellAboutW(Globals.hMainWnd, Globals.szTitle, szAuthors,
+                LoadImageW(Globals.hInstance, MAKEINTRESOURCEW(IDI_OSK), 
IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_SHARED));
 }
 
 /***********************************************************************
diff --git a/base/applications/rapps/gui.cpp b/base/applications/rapps/gui.cpp
index 9601a0c4585..0c81f789bd1 100644
--- a/base/applications/rapps/gui.cpp
+++ b/base/applications/rapps/gui.cpp
@@ -469,13 +469,11 @@ CMainWindow::ShowAboutDlg()
 {
     CStringW szApp;
     CStringW szAuthors;
-    HICON hIcon;
 
     szApp.LoadStringW(IDS_APPTITLE);
     szAuthors.LoadStringW(IDS_APP_AUTHORS);
-    hIcon = LoadIconW(hInst, MAKEINTRESOURCEW(IDI_MAIN));
-    ShellAboutW(m_hWnd, szApp, szAuthors, hIcon);
-    DestroyIcon(hIcon);
+    ShellAboutW(m_hWnd, szApp, szAuthors,
+                LoadIconW(hInst, MAKEINTRESOURCEW(IDI_MAIN)));
 }
 
 VOID
diff --git a/base/applications/sndrec32/sndrec32.cpp 
b/base/applications/sndrec32/sndrec32.cpp
index 0d408fc3f34..cfaf93bd25a 100644
--- a/base/applications/sndrec32/sndrec32.cpp
+++ b/base/applications/sndrec32/sndrec32.cpp
@@ -432,7 +432,6 @@ WndProc(HWND hWnd,
     HFONT oldfont;
     long long slid_samp = 0;
     WCHAR szAppName[100];
-    HICON hIcon;
 
     /* Checking for global pointers to buffer and io audio devices */
     if ((!AUD_IN) || (!AUD_OUT) || (!AUD_BUF))
@@ -598,9 +597,8 @@ WndProc(HWND hWnd,
 
                 case ID_ABOUT:
                     LoadStringW(hInst, IDS_APP_TITLE, szAppName, 
_countof(szAppName));
-                    hIcon = LoadIconW(hInst, 
MAKEINTRESOURCEW(IDI_REACTOS_SNDREC32));
-                    ShellAboutW(hWnd, szAppName, NULL, hIcon);
-                    DestroyIcon(hIcon);
+                    ShellAboutW(hWnd, szAppName, NULL,
+                                LoadIconW(hInst, 
MAKEINTRESOURCEW(IDI_REACTOS_SNDREC32)));
                     break;
 
                 case ID_FILE_SAVEAS:
diff --git a/base/applications/taskmgr/about.c 
b/base/applications/taskmgr/about.c
index e0decc1ddaa..f97f6588550 100644
--- a/base/applications/taskmgr/about.c
+++ b/base/applications/taskmgr/about.c
@@ -10,9 +10,8 @@
 void OnAbout(void)
 {
     WCHAR szTaskmgr[128];
-    HICON taskmgrIcon = LoadIcon(hInst, MAKEINTRESOURCE(IDI_TASKMANAGER));
 
     LoadStringW(hInst, IDS_APP_TITLE, szTaskmgr, 
sizeof(szTaskmgr)/sizeof(WCHAR));
-    ShellAboutW(hMainWnd, szTaskmgr, NULL, taskmgrIcon);
-    DeleteObject(taskmgrIcon);
+    ShellAboutW(hMainWnd, szTaskmgr, NULL,
+                LoadIconW(hInst, MAKEINTRESOURCEW(IDI_TASKMANAGER)));
 }
diff --git a/dll/win32/devmgr/devmgmt/MainWindow.cpp 
b/dll/win32/devmgr/devmgmt/MainWindow.cpp
index 0bf96dc3c9e..723d93e281f 100644
--- a/dll/win32/devmgr/devmgmt/MainWindow.cpp
+++ b/dll/win32/devmgr/devmgmt/MainWindow.cpp
@@ -653,16 +653,13 @@ CDeviceManager::OnCommand(_In_ WPARAM wParam,
         {
             CAtlStringW szAppName;
             CAtlStringW szAppAuthors;
-            HICON hIcon;
 
             if (!szAppName.LoadStringW(g_hThisInstance, IDS_APPNAME))
                 szAppName = L"ReactOS Device Manager";
             if (!szAppAuthors.LoadStringW(g_hThisInstance, IDS_APP_AUTHORS))
                 szAppAuthors = L"";
-            hIcon = LoadIconW(g_hThisInstance, 
MAKEINTRESOURCEW(IDI_MAIN_ICON));
-            ShellAboutW(m_hMainWnd, szAppName, szAppAuthors, hIcon);
-            if (hIcon)
-                DestroyIcon(hIcon);
+            ShellAboutW(m_hMainWnd, szAppName, szAppAuthors,
+                        LoadIconW(g_hThisInstance, 
MAKEINTRESOURCEW(IDI_MAIN_ICON)));
 
             // Set focus back to the treeview
             m_DeviceView->SetFocus();

Reply via email to