Index: trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc-internal.h
===================================================================
--- trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc-internal.h	(revision 80918)
+++ trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc-internal.h	(revision 80990)
@@ -223,23 +223,23 @@
 
 #ifdef VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS
-int sharedClipboardSvcTransferOpen(PSHCLPROVIDERCTX pCtx);
-DECLCALLBACK(int) sharedClipboardSvcTransferClose(PSHCLPROVIDERCTX pCtx);
-
-int sharedClipboardSvcTransferGetRoots(PSHCLPROVIDERCTX pCtx, PSHCLROOTLIST *ppRootList);
-
-int sharedClipboardSvcTransferListOpen(PSHCLPROVIDERCTX pCtx, PSHCLLISTOPENPARMS pOpenParms, PSHCLLISTHANDLE phList);
-int sharedClipboardSvcTransferListClose(PSHCLPROVIDERCTX pCtx, SHCLLISTHANDLE hList);
-int sharedClipboardSvcTransferListHdrRead(PSHCLPROVIDERCTX pCtx, SHCLLISTHANDLE hList, PSHCLLISTHDR pListHdr);
-int sharedClipboardSvcTransferListHdrWrite(PSHCLPROVIDERCTX pCtx, SHCLLISTHANDLE hList, PSHCLLISTHDR pListHdr);
-int sharedClipboardSvcTransferListEntryRead(PSHCLPROVIDERCTX pCtx, SHCLLISTHANDLE hList, PSHCLLISTENTRY pListEntry);
-int sharedClipboardSvcTransferListEntryWrite(PSHCLPROVIDERCTX pCtx, SHCLLISTHANDLE hList, PSHCLLISTENTRY pListEntry);
-
-int sharedClipboardSvcTransferObjOpen(PSHCLPROVIDERCTX pCtx, PSHCLOBJOPENCREATEPARMS pCreateParms,
-                                 PSHCLOBJHANDLE phObj);
-int sharedClipboardSvcTransferObjClose(PSHCLPROVIDERCTX pCtx, SHCLOBJHANDLE hObj);
-int sharedClipboardSvcTransferObjRead(PSHCLPROVIDERCTX pCtx, SHCLOBJHANDLE hObj,
-                                 void *pvData, uint32_t cbData, uint32_t fFlags, uint32_t *pcbRead);
-int sharedClipboardSvcTransferObjWrite(PSHCLPROVIDERCTX pCtx, SHCLOBJHANDLE hObj,
-                                  void *pvData, uint32_t cbData, uint32_t fFlags, uint32_t *pcbWritten);
+int sharedClipboardSvcTransferIfaceOpen(PSHCLPROVIDERCTX pCtx);
+int sharedClipboardSvcTransferIfaceClose(PSHCLPROVIDERCTX pCtx);
+
+int sharedClipboardSvcTransferIfaceGetRoots(PSHCLPROVIDERCTX pCtx, PSHCLROOTLIST *ppRootList);
+
+int sharedClipboardSvcTransferIfaceListOpen(PSHCLPROVIDERCTX pCtx, PSHCLLISTOPENPARMS pOpenParms, PSHCLLISTHANDLE phList);
+int sharedClipboardSvcTransferIfaceListClose(PSHCLPROVIDERCTX pCtx, SHCLLISTHANDLE hList);
+int sharedClipboardSvcTransferIfaceListHdrRead(PSHCLPROVIDERCTX pCtx, SHCLLISTHANDLE hList, PSHCLLISTHDR pListHdr);
+int sharedClipboardSvcTransferIfaceListHdrWrite(PSHCLPROVIDERCTX pCtx, SHCLLISTHANDLE hList, PSHCLLISTHDR pListHdr);
+int sharedClipboardSvcTransferIfaceListEntryRead(PSHCLPROVIDERCTX pCtx, SHCLLISTHANDLE hList, PSHCLLISTENTRY pListEntry);
+int sharedClipboardSvcTransferIfaceListEntryWrite(PSHCLPROVIDERCTX pCtx, SHCLLISTHANDLE hList, PSHCLLISTENTRY pListEntry);
+
+int sharedClipboardSvcTransferIfaceObjOpen(PSHCLPROVIDERCTX pCtx, PSHCLOBJOPENCREATEPARMS pCreateParms,
+                                           PSHCLOBJHANDLE phObj);
+int sharedClipboardSvcTransferIfaceObjClose(PSHCLPROVIDERCTX pCtx, SHCLOBJHANDLE hObj);
+int sharedClipboardSvcTransferIfaceObjRead(PSHCLPROVIDERCTX pCtx, SHCLOBJHANDLE hObj,
+                                           void *pvData, uint32_t cbData, uint32_t fFlags, uint32_t *pcbRead);
+int sharedClipboardSvcTransferIfaceObjWrite(PSHCLPROVIDERCTX pCtx, SHCLOBJHANDLE hObj,
+                                            void *pvData, uint32_t cbData, uint32_t fFlags, uint32_t *pcbWritten);
 
 DECLCALLBACK(void) VBoxSvcClipboardTransferPrepareCallback(PSHCLTRANSFERCALLBACKDATA pData);
Index: trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc-transfers.cpp
===================================================================
--- trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc-transfers.cpp	(revision 80918)
+++ trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc-transfers.cpp	(revision 80990)
@@ -58,5 +58,5 @@
 *********************************************************************************************************************************/
 
-DECLCALLBACK(int) sharedClipboardSvcTransferOpen(PSHCLPROVIDERCTX pCtx)
+DECLCALLBACK(int) sharedClipboardSvcTransferIfaceOpen(PSHCLPROVIDERCTX pCtx)
 {
     RT_NOREF(pCtx);
@@ -66,5 +66,5 @@
 }
 
-DECLCALLBACK(int) sharedClipboardSvcTransferClose(PSHCLPROVIDERCTX pCtx)
+DECLCALLBACK(int) sharedClipboardSvcTransferIfaceClose(PSHCLPROVIDERCTX pCtx)
 {
     RT_NOREF(pCtx);
@@ -74,5 +74,5 @@
 }
 
-DECLCALLBACK(int) sharedClipboardSvcTransferGetRoots(PSHCLPROVIDERCTX pCtx, PSHCLROOTLIST *ppRootList)
+DECLCALLBACK(int) sharedClipboardSvcTransferIfaceGetRoots(PSHCLPROVIDERCTX pCtx, PSHCLROOTLIST *ppRootList)
 {
     LogFlowFuncEnter();
@@ -192,6 +192,6 @@
 }
 
-DECLCALLBACK(int) sharedClipboardSvcTransferListOpen(PSHCLPROVIDERCTX pCtx,
-                                                     PSHCLLISTOPENPARMS pOpenParms, PSHCLLISTHANDLE phList)
+DECLCALLBACK(int) sharedClipboardSvcTransferIfaceListOpen(PSHCLPROVIDERCTX pCtx,
+                                                          PSHCLLISTOPENPARMS pOpenParms, PSHCLLISTHANDLE phList)
 {
     LogFlowFuncEnter();
@@ -251,5 +251,5 @@
 }
 
-DECLCALLBACK(int) sharedClipboardSvcTransferListClose(PSHCLPROVIDERCTX pCtx, SHCLLISTHANDLE hList)
+DECLCALLBACK(int) sharedClipboardSvcTransferIfaceListClose(PSHCLPROVIDERCTX pCtx, SHCLLISTHANDLE hList)
 {
     LogFlowFuncEnter();
@@ -298,6 +298,6 @@
 }
 
-DECLCALLBACK(int) sharedClipboardSvcTransferListHdrRead(PSHCLPROVIDERCTX pCtx,
-                                                        SHCLLISTHANDLE hList, PSHCLLISTHDR pListHdr)
+DECLCALLBACK(int) sharedClipboardSvcTransferIfaceListHdrRead(PSHCLPROVIDERCTX pCtx,
+                                                             SHCLLISTHANDLE hList, PSHCLLISTHDR pListHdr)
 {
     LogFlowFuncEnter();
@@ -315,5 +315,5 @@
 
         HGCMSvcSetU32(&pMsg->paParms[0], VBOX_SHCL_CONTEXTID_MAKE(pClient->State.uSessionID,
-                                                                              pCtx->pTransfer->State.uID, uEvent));
+                                                                  pCtx->pTransfer->State.uID, uEvent));
         HGCMSvcSetU64(&pMsg->paParms[1], hList);
         HGCMSvcSetU32(&pMsg->paParms[2], 0 /* fFlags */);
@@ -349,6 +349,6 @@
 }
 
-DECLCALLBACK(int) sharedClipboardSvcTransferListHdrWrite(PSHCLPROVIDERCTX pCtx,
-                                                         SHCLLISTHANDLE hList, PSHCLLISTHDR pListHdr)
+DECLCALLBACK(int) sharedClipboardSvcTransferIfaceListHdrWrite(PSHCLPROVIDERCTX pCtx,
+                                                              SHCLLISTHANDLE hList, PSHCLLISTHDR pListHdr)
 {
     RT_NOREF(pCtx, hList, pListHdr);
@@ -359,6 +359,6 @@
 }
 
-DECLCALLBACK(int) sharedClipboardSvcTransferListEntryRead(PSHCLPROVIDERCTX pCtx,
-                                                          SHCLLISTHANDLE hList, PSHCLLISTENTRY pListEntry)
+DECLCALLBACK(int) sharedClipboardSvcTransferIfaceListEntryRead(PSHCLPROVIDERCTX pCtx,
+                                                               SHCLLISTHANDLE hList, PSHCLLISTENTRY pListEntry)
 {
     LogFlowFuncEnter();
@@ -409,6 +409,6 @@
 }
 
-DECLCALLBACK(int) sharedClipboardSvcTransferListEntryWrite(PSHCLPROVIDERCTX pCtx,
-                                                           SHCLLISTHANDLE hList, PSHCLLISTENTRY pListEntry)
+DECLCALLBACK(int) sharedClipboardSvcTransferIfaceListEntryWrite(PSHCLPROVIDERCTX pCtx,
+                                                                SHCLLISTHANDLE hList, PSHCLLISTENTRY pListEntry)
 {
     RT_NOREF(pCtx, hList, pListEntry);
@@ -419,6 +419,6 @@
 }
 
-int sharedClipboardSvcTransferObjOpen(PSHCLPROVIDERCTX pCtx, PSHCLOBJOPENCREATEPARMS pCreateParms,
-                                      PSHCLOBJHANDLE phObj)
+int sharedClipboardSvcTransferIfaceObjOpen(PSHCLPROVIDERCTX pCtx, PSHCLOBJOPENCREATEPARMS pCreateParms,
+                                           PSHCLOBJHANDLE phObj)
 {
     LogFlowFuncEnter();
@@ -440,5 +440,5 @@
 
         HGCMSvcSetU32(&pMsg->paParms[0], VBOX_SHCL_CONTEXTID_MAKE(pClient->State.uSessionID,
-                                                                              pCtx->pTransfer->State.uID, uEvent));
+                                                                  pCtx->pTransfer->State.uID, uEvent));
         HGCMSvcSetU64(&pMsg->paParms[1], 0); /* uHandle */
         HGCMSvcSetU32(&pMsg->paParms[2], cbPath);
@@ -480,5 +480,5 @@
 }
 
-int sharedClipboardSvcTransferObjClose(PSHCLPROVIDERCTX pCtx, SHCLOBJHANDLE hObj)
+int sharedClipboardSvcTransferIfaceObjClose(PSHCLPROVIDERCTX pCtx, SHCLOBJHANDLE hObj)
 {
     LogFlowFuncEnter();
@@ -496,5 +496,5 @@
 
         HGCMSvcSetU32(&pMsg->paParms[0], VBOX_SHCL_CONTEXTID_MAKE(pClient->State.uSessionID,
-                                                                              pCtx->pTransfer->State.uID, uEvent));
+                                                                  pCtx->pTransfer->State.uID, uEvent));
         HGCMSvcSetU64(&pMsg->paParms[1], hObj);
 
@@ -533,6 +533,6 @@
 }
 
-int sharedClipboardSvcTransferObjRead(PSHCLPROVIDERCTX pCtx, SHCLOBJHANDLE hObj,
-                                      void *pvData, uint32_t cbData, uint32_t fFlags, uint32_t *pcbRead)
+int sharedClipboardSvcTransferIfaceObjRead(PSHCLPROVIDERCTX pCtx, SHCLOBJHANDLE hObj,
+                                           void *pvData, uint32_t cbData, uint32_t fFlags, uint32_t *pcbRead)
 {
     LogFlowFuncEnter();
@@ -550,5 +550,5 @@
 
         HGCMSvcSetU32(&pMsg->paParms[0], VBOX_SHCL_CONTEXTID_MAKE(pClient->State.uSessionID,
-                                                                              pCtx->pTransfer->State.uID, uEvent));
+                                                                  pCtx->pTransfer->State.uID, uEvent));
         HGCMSvcSetU64(&pMsg->paParms[1], hObj);
         HGCMSvcSetU32(&pMsg->paParms[2], cbData);
@@ -592,6 +592,6 @@
 }
 
-int sharedClipboardSvcTransferObjWrite(PSHCLPROVIDERCTX pCtx, SHCLOBJHANDLE hObj,
-                                       void *pvData, uint32_t cbData, uint32_t fFlags, uint32_t *pcbWritten)
+int sharedClipboardSvcTransferIfaceObjWrite(PSHCLPROVIDERCTX pCtx, SHCLOBJHANDLE hObj,
+                                            void *pvData, uint32_t cbData, uint32_t fFlags, uint32_t *pcbWritten)
 {
     LogFlowFuncEnter();
@@ -609,5 +609,5 @@
 
         HGCMSvcSetU32(&pMsg->paParms[0], VBOX_SHCL_CONTEXTID_MAKE(pClient->State.uSessionID,
-                                                                              pCtx->pTransfer->State.uID, uEvent));
+                                                                  pCtx->pTransfer->State.uID, uEvent));
         HGCMSvcSetU64(&pMsg->paParms[1], hObj);
         HGCMSvcSetU64(&pMsg->paParms[2], cbData);
@@ -2130,22 +2130,24 @@
                 if (RT_SUCCESS(rc))
                 {
-                    creationCtx.Interface.pfnTransferOpen    = sharedClipboardSvcTransferOpen;
-                    creationCtx.Interface.pfnTransferClose   = sharedClipboardSvcTransferClose;
-                    creationCtx.Interface.pfnListOpen        = sharedClipboardSvcTransferListOpen;
-                    creationCtx.Interface.pfnListClose       = sharedClipboardSvcTransferListClose;
-                    creationCtx.Interface.pfnObjOpen         = sharedClipboardSvcTransferObjOpen;
-                    creationCtx.Interface.pfnObjClose        = sharedClipboardSvcTransferObjClose;
-
-                    creationCtx.Interface.pfnRootsGet        = sharedClipboardSvcTransferGetRoots;
-                    creationCtx.Interface.pfnListHdrRead     = sharedClipboardSvcTransferListHdrRead;
-                    creationCtx.Interface.pfnListEntryRead   = sharedClipboardSvcTransferListEntryRead;
-                    creationCtx.Interface.pfnObjRead         = sharedClipboardSvcTransferObjRead;
+                    creationCtx.Interface.pfnTransferOpen  = sharedClipboardSvcTransferIfaceOpen;
+                    creationCtx.Interface.pfnTransferClose = sharedClipboardSvcTransferIfaceClose;
+
+                    creationCtx.Interface.pfnRootsGet      = sharedClipboardSvcTransferIfaceGetRoots;
+
+                    creationCtx.Interface.pfnListOpen      = sharedClipboardSvcTransferIfaceListOpen;
+                    creationCtx.Interface.pfnListClose     = sharedClipboardSvcTransferIfaceListClose;
+                    creationCtx.Interface.pfnListHdrRead   = sharedClipboardSvcTransferIfaceListHdrRead;
+                    creationCtx.Interface.pfnListEntryRead = sharedClipboardSvcTransferIfaceListEntryRead;
+
+                    creationCtx.Interface.pfnObjOpen       = sharedClipboardSvcTransferIfaceObjOpen;
+                    creationCtx.Interface.pfnObjClose      = sharedClipboardSvcTransferIfaceObjClose;
+                    creationCtx.Interface.pfnObjRead       = sharedClipboardSvcTransferIfaceObjRead;
                 }
             }
             else if (enmDir == SHCLTRANSFERDIR_WRITE)
             {
-                creationCtx.Interface.pfnListHdrWrite   = sharedClipboardSvcTransferListHdrWrite;
-                creationCtx.Interface.pfnListEntryWrite = sharedClipboardSvcTransferListEntryWrite;
-                creationCtx.Interface.pfnObjWrite       = sharedClipboardSvcTransferObjWrite;
+                creationCtx.Interface.pfnListHdrWrite   = sharedClipboardSvcTransferIfaceListHdrWrite;
+                creationCtx.Interface.pfnListEntryWrite = sharedClipboardSvcTransferIfaceListEntryWrite;
+                creationCtx.Interface.pfnObjWrite       = sharedClipboardSvcTransferIfaceObjWrite;
             }
             else
Index: trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc-win.cpp
===================================================================
--- trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc-win.cpp	(revision 80918)
+++ trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc-win.cpp	(revision 80990)
@@ -213,5 +213,5 @@
         case WM_CLIPBOARDUPDATE:
         {
-            LogFunc(("WM_CLIPBOARDUPDATE: Waiting ...\n"));
+            LogFunc(("WM_CLIPBOARDUPDATE\n"));
 
             int rc = RTCritSectEnter(&pWinCtx->CritSect);
@@ -257,10 +257,27 @@
             LogFunc(("WM_DRAWCLIPBOARD\n"));
 
-            if (GetClipboardOwner() != hWnd)
-            {
-                /* Clipboard was updated by another application, retrieve formats and report back. */
-                int rc = vboxClipboardSvcWinSyncInternal(pCtx);
-                if (RT_SUCCESS(rc))
-                    sharedClipboardSvcSetSource(pCtx->pClient, SHCLSOURCE_LOCAL);
+            int rc = RTCritSectEnter(&pWinCtx->CritSect);
+            if (RT_SUCCESS(rc))
+            {
+                const HWND hWndClipboardOwner = GetClipboardOwner();
+
+                LogFunc(("WM_DRAWCLIPBOARD: hWndClipboardOwnerUs=%p, hWndNewClipboardOwner=%p\n",
+                         pWinCtx->hWndClipboardOwnerUs, hWndClipboardOwner));
+
+                if (pWinCtx->hWndClipboardOwnerUs != hWndClipboardOwner)
+                {
+                    int rc2 = RTCritSectLeave(&pWinCtx->CritSect);
+                    AssertRC(rc2);
+
+                    /* Clipboard was updated by another application, retrieve formats and report back. */
+                    rc = vboxClipboardSvcWinSyncInternal(pCtx);
+                    if (RT_SUCCESS(rc))
+                        sharedClipboardSvcSetSource(pCtx->pClient, SHCLSOURCE_LOCAL);
+                }
+                else
+                {
+                    int rc2 = RTCritSectLeave(&pWinCtx->CritSect);
+                    AssertRC(rc2);
+                }
             }
 
@@ -389,5 +406,5 @@
     }
 
-    LogFlowFunc(("hWnd=%p, WM_ %u\n", hWnd, uMsg));
+    LogFlowFunc(("LEAVE hWnd=%p, WM_ %u\n", hWnd, uMsg));
     return DefWindowProc(hWnd, uMsg, wParam, lParam);
 }
Index: trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc-x11.cpp
===================================================================
--- trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc-x11.cpp	(revision 80918)
+++ trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc-x11.cpp	(revision 80990)
@@ -59,11 +59,13 @@
 /**
  * Report formats available in the X11 clipboard to VBox.
- * @param  pCtx        Opaque context pointer for the glue code
- * @param  u32Formats  The formats available
- * @note  Host glue code
+ * @param  pCtx                 Opaque context pointer for the glue code.
+ * @param  u32Formats           The formats available.
  */
 void ClipReportX11Formats(SHCLCONTEXT *pCtx, uint32_t u32Formats)
 {
     LogFlowFunc(("pCtx=%p, u32Formats=%02X\n", pCtx, u32Formats));
+
+    if (u32Formats == VBOX_SHCL_FMT_NONE) /* No formats to report? Bail out early. */
+        return;
 
     SHCLFORMATDATA formatData;
Index: trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc.cpp
===================================================================
--- trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc.cpp	(revision 80918)
+++ trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc.cpp	(revision 80990)
@@ -937,5 +937,5 @@
     if (pMsg)
     {
-        SHCLEVENTID uEvent = SharedClipboardEventIDGenerate(&pClient->Events);
+        const SHCLEVENTID uEvent = SharedClipboardEventIDGenerate(&pClient->Events);
 
         HGCMSvcSetU32(&pMsg->paParms[0], VBOX_SHCL_CONTEXTID_MAKE(pClient->State.uSessionID,
@@ -948,4 +948,6 @@
         {
 #ifdef VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS
+            /* If this is an URI list, create a transfer locally and also tell the guest to create
+             * a transfer on the guest side. */
             if (pFormats->uFormats & VBOX_SHCL_FMT_URI_LIST)
             {
@@ -955,7 +957,12 @@
                     LogRel(("Shared Clipboard: Initializing host write transfer failed with %Rrc\n", rc));
             }
+            else
+            {
 #endif
-            if (RT_SUCCESS(rc))
                 rc = sharedClipboardSvcClientWakeup(pClient);
+
+#ifdef VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS
+            }
+#endif
         }
     }
@@ -1322,5 +1329,5 @@
                     rc = VERR_ACCESS_DENIED;
                 }
-                else
+                else if (uFormats != VBOX_SHCL_FMT_NONE) /* Only announce formats if we actually *have* formats to announce! */
                 {
                     rc = sharedClipboardSvcSetSource(pClient, SHCLSOURCE_REMOTE);
@@ -1334,5 +1341,6 @@
                             parms.uFormat = uFormats;
 
-                            g_ExtState.pfnExtension(g_ExtState.pvExtension, VBOX_CLIPBOARD_EXT_FN_FORMAT_ANNOUNCE, &parms, sizeof(parms));
+                            g_ExtState.pfnExtension(g_ExtState.pvExtension, VBOX_CLIPBOARD_EXT_FN_FORMAT_ANNOUNCE,
+                                                    &parms, sizeof(parms));
                         }
 
@@ -1344,4 +1352,5 @@
 
                         formatData.uFormats = uFormats;
+                        Assert(formatData.uFormats != VBOX_SHCL_FMT_NONE); /* Sanity. */
 
                         rc = SharedClipboardSvcImplFormatAnnounce(pClient, &cmdCtx, &formatData);
@@ -1413,4 +1422,5 @@
 
                                 formatData.uFormats = g_ExtState.uDelayedFormats;
+                                Assert(formatData.uFormats != VBOX_SHCL_FMT_NONE); /* There better is *any* format here now. */
 
                                 int rc2 = sharedClipboardSvcFormatsReport(pClient, &formatData);
@@ -1544,5 +1554,5 @@
 
     LogFlowFunc(("u32Function=%RU32 (%s), cParms=%RU32, paParms=%p\n",
-                 u32Function, VBoxShClHostMsgToStr(u32Function), cParms, paParms));
+                 u32Function, VBoxShClHostFunctionToStr(u32Function), cParms, paParms));
 
     switch (u32Function)
@@ -1826,5 +1836,5 @@
                     g_ExtState.uDelayedFormats = u32Format;
                 }
-                else
+                else if (u32Format != VBOX_SHCL_FMT_NONE)
                 {
                     SHCLFORMATDATA formatData;
