[SHELL32] Fix regression of DoCreateSendToFiles
authorKatayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
Sun, 1 Dec 2019 04:55:43 +0000 (13:55 +0900)
committerKatayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
Sun, 1 Dec 2019 04:55:43 +0000 (13:55 +0900)
CoInitializeEx/CoUninitialize added.
CORE-12562

dll/win32/shell32/wine/shellpath.c

index 6974a4d..3c19063 100644 (file)
@@ -2195,6 +2195,28 @@ CreateShellLink(
     return hr;
 }
 
+static HRESULT
+CreateShellLinkCoInit(
+    LPCWSTR pszLinkPath,
+    LPCWSTR pszCmd,
+    LPCWSTR pszArg OPTIONAL,
+    LPCWSTR pszDir OPTIONAL,
+    LPCWSTR pszIconPath OPTIONAL,
+    INT iIconNr OPTIONAL,
+    LPCWSTR pszComment OPTIONAL)
+{
+    HRESULT hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
+    BOOL bCoInit = (hr == S_OK);
+
+    hr = CreateShellLink(pszLinkPath, pszCmd, pszArg, pszDir,
+                         pszIconPath, iIconNr, pszComment);
+
+    if (bCoInit)
+        CoUninitialize();
+
+    return hr;
+}
+
 HRESULT DoCreateSendToFiles(LPCWSTR pszSendTo)
 {
     WCHAR szTarget[MAX_PATH];
@@ -2212,8 +2234,8 @@ HRESULT DoCreateSendToFiles(LPCWSTR pszSendTo)
 
     GetSystemDirectoryW(szShell32, ARRAY_SIZE(szShell32));
     PathAppendW(szShell32, L"shell32.dll");
-    hr = CreateShellLink(szSendToFile, szTarget, NULL, NULL,
-                         szShell32, -IDI_SHELL_MY_DOCUMENTS, NULL);
+    hr = CreateShellLinkCoInit(szSendToFile, szTarget, NULL, NULL,
+                               szShell32, -IDI_SHELL_MY_DOCUMENTS, NULL);
     if (FAILED_UNEXPECTEDLY(hr))
         return hr;