JBR-1258 CommonItemDialog ignores directory to open

Ported from JDK11
diff --git a/src/windows/native/sun/windows/awt_FileDialog.cpp b/src/windows/native/sun/windows/awt_FileDialog.cpp
index 42bf9ec..cadb09c 100644
--- a/src/windows/native/sun/windows/awt_FileDialog.cpp
+++ b/src/windows/native/sun/windows/awt_FileDialog.cpp
@@ -554,7 +554,7 @@
     OLE_RETURN_HR
 }
 
-HRESULT CreateShellItem(LPTSTR path, IShellItem *shellItem) {
+HRESULT CreateShellItem(LPTSTR path, IShellItemPtr& shellItem) {
     size_t pathLength = _tcslen(path);
     for (size_t index = 0; index < pathLength; index++) {
         if (path[index] == _T('/'))
@@ -598,7 +598,7 @@
     IFileDialogEventsPtr pfde;
     IShellItemPtr psiResult;
     FileDialogData data;
-    DWORD dwCookie;
+    DWORD dwCookie = OLE_BAD_COOKIE;
 
     OPENFILENAME ofn;
     memset(&ofn, 0, sizeof(ofn));
@@ -716,9 +716,11 @@
             OLE_HRT(pfd->SetFileTypeIndex(1));
 
             IShellItemPtr directoryItem;
-            if (SUCCEEDED(CreateShellItem(directoryBuffer, directoryItem))) {
-                pfd->SetFolder(directoryItem);
-            }
+            OLE_NEXT_TRY
+            OLE_HRT(CreateShellItem(directoryBuffer, directoryItem));
+            OLE_HRT(pfd->SetFolder(directoryItem));
+            OLE_CATCH
+
             CoTaskStringHolder shortName = GetShortName(fileBuffer);
             if (shortName) {
                 OLE_HRT(pfd->SetFileName(shortName));
@@ -817,7 +819,7 @@
     } catch (...) {
 
         if (useCommonItemDialog) {
-            if (pfd) {
+            if (pfd && dwCookie != OLE_BAD_COOKIE) {
                 pfd->Unadvise(dwCookie);
             }
         }
@@ -837,7 +839,7 @@
     }
 
     if (useCommonItemDialog) {
-        if (pfd) {
+        if (pfd && dwCookie != OLE_BAD_COOKIE) {
             pfd->Unadvise(dwCookie);
         }
     }