Index: /trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxDnD.cpp
===================================================================
--- /trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxDnD.cpp	(revision 56660)
+++ /trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxDnD.cpp	(revision 56661)
@@ -82,5 +82,5 @@
     {
         LogFlowFunc(("\t%s\n", arrEntries[i].c_str()));
-        this->lstAllowedFormats.append(arrEntries[i]);
+        this->lstFmtSup.append(arrEntries[i]);
     }
 }
@@ -749,40 +749,92 @@
     setMode(HG);
 
-    /* Save all allowed actions. */
-    this->uAllActions = uAllActions;
-
-    /*
-     * Check if requested formats are compatible with this client.
-     */
-    LogFlowThisFunc(("Supported formats:\n"));
-    for (size_t i = 0; i < lstFormats.size(); i++)
-    {
-        bool fSupported = false;
-        for (size_t a = 0; a < this->lstAllowedFormats.size(); a++)
-        {
-            LogFlowThisFunc(("\t\"%s\" <=> \"%s\"\n", this->lstAllowedFormats.at(a).c_str(), lstFormats.at(i).c_str()));
-            fSupported = RTStrICmp(this->lstAllowedFormats.at(a).c_str(), lstFormats.at(i).c_str()) == 0;
-            if (fSupported)
+    int rc = VINF_SUCCESS;
+
+    try
+    {
+        /* Save all allowed actions. */
+        this->uAllActions = uAllActions;
+
+        /*
+         * Check if reported formats from host are compatible with this client.
+         */
+        size_t cFormatsSup    = this->lstFmtSup.size();
+        size_t cFormatsActive = 0;
+
+        LPFORMATETC pFormatEtc = new FORMATETC[cFormatsSup];
+        RT_BZERO(pFormatEtc, sizeof(FORMATETC) * cFormatsSup);
+
+        LPSTGMEDIUM pStgMeds   = new STGMEDIUM[cFormatsSup];
+        RT_BZERO(pStgMeds, sizeof(STGMEDIUM) * cFormatsSup);
+
+        LogRel2(("DnD: Reported formats:\n"));
+        for (size_t i = 0; i < lstFormats.size(); i++)
+        {
+            bool fSupported = false;
+            for (size_t a = 0; a < this->lstFmtSup.size(); a++)
             {
-                this->lstFormats.append(lstFormats.at(i));
-                break;
+                const char *pszFormat = lstFormats.at(i).c_str();
+                LogFlowThisFunc(("\t\"%s\" <=> \"%s\"\n", this->lstFmtSup.at(a).c_str(), pszFormat));
+
+                fSupported = RTStrICmp(this->lstFmtSup.at(a).c_str(), pszFormat) == 0;
+                if (fSupported)
+                {
+                    this->lstFmtActive.append(lstFormats.at(i));
+
+                    /** @todo Put this into a #define / struct. */
+                    if (!RTStrICmp(pszFormat, "text/uri-list"))
+                    {
+                        pFormatEtc[cFormatsActive].cfFormat = CF_HDROP;
+                        pFormatEtc[cFormatsActive].dwAspect = DVASPECT_CONTENT;
+                        pFormatEtc[cFormatsActive].lindex   = -1;
+                        pFormatEtc[cFormatsActive].tymed    = TYMED_HGLOBAL;
+
+                        pStgMeds  [cFormatsActive].tymed    = TYMED_HGLOBAL;
+                        cFormatsActive++;
+                    }
+                    else if (   !RTStrICmp(pszFormat, "text/plain")
+                             || !RTStrICmp(pszFormat, "text/html")
+                             || !RTStrICmp(pszFormat, "text/plain;charset=utf-8")
+                             || !RTStrICmp(pszFormat, "text/plain;charset=utf-16")
+                             || !RTStrICmp(pszFormat, "text/plain")
+                             || !RTStrICmp(pszFormat, "text/richtext")
+                             || !RTStrICmp(pszFormat, "UTF8_STRING")
+                             || !RTStrICmp(pszFormat, "TEXT")
+                             || !RTStrICmp(pszFormat, "STRING"))
+                    {
+                        pFormatEtc[cFormatsActive].cfFormat = CF_TEXT;
+                        pFormatEtc[cFormatsActive].dwAspect = DVASPECT_CONTENT;
+                        pFormatEtc[cFormatsActive].lindex   = -1;
+                        pFormatEtc[cFormatsActive].tymed    = TYMED_HGLOBAL;
+
+                        pStgMeds  [cFormatsActive].tymed    = TYMED_HGLOBAL;
+                        cFormatsActive++;
+                    }
+                    else /* Should never happen. */
+                        AssertReleaseFailedBreak(("Format specification for '%s' not implemented\n", pszFormat));
+                    break;
+                }
             }
-        }
-
-        LogFlowThisFunc(("\t%s: %RTbool\n", lstFormats.at(i).c_str(), fSupported));
-    }
-
-    /*
-     * Warn in the log if this guest does not accept anything.
-     */
-    if (!this->lstFormats.size())
-        LogRel(("DnD: Warning: No supported drag and drop formats on the guest found!\n"));
-
-    /*
-     * Prepare the startup info for DoDragDrop().
-     */
-    int rc = VINF_SUCCESS;
-    try
-    {
+
+            LogRel2(("DnD: \t%s: %RTbool\n", lstFormats.at(i).c_str(), fSupported));
+        }
+
+        /*
+         * Warn in the log if this guest does not accept anything.
+         */
+        Assert(cFormatsActive <= cFormatsSup);
+        if (cFormatsActive)
+        {
+            LogRel2(("DnD: %RU32 supported formats found:\n", cFormatsActive));
+            for (size_t i = 0; i < cFormatsActive; i++)
+                LogRel2(("DnD: \t%s\n", this->lstFmtActive.at(i).c_str()));
+        }
+        else
+            LogRel(("DnD: Warning: No supported drag and drop formats on the guest found!\n"));
+
+        /*
+         * Prepare the startup info for DoDragDrop().
+         */
+
         /* Translate our drop actions into allowed Windows drop effects. */
         startupInfo.dwOKEffects = DROPEFFECT_NONE;
@@ -797,6 +849,13 @@
         }
 
+        LogRel2(("DnD: Supported drop actions: 0x%x\n", startupInfo.dwOKEffects));
+
         startupInfo.pDropSource = new VBoxDnDDropSource(this);
-        startupInfo.pDataObject = new VBoxDnDDataObject();
+        startupInfo.pDataObject = new VBoxDnDDataObject(pFormatEtc, pStgMeds, cFormatsActive);
+
+        if (pFormatEtc)
+            delete pFormatEtc;
+        if (pStgMeds)
+            delete pStgMeds;
     }
     catch (std::bad_alloc)
@@ -903,8 +962,8 @@
     if (mState == Dragging)
     {
-        if (lstFormats.size() >= 1)
+        if (lstFmtActive.size() >= 1)
         {
             /** @todo What to do when multiple formats are available? */
-            mFormatRequested = lstFormats.at(0);
+            mFormatRequested = lstFmtActive.at(0);
 
             rc = RTCritSectEnter(&mCritSect);
@@ -1428,5 +1487,5 @@
      */
 
-    this->lstFormats.clear();
+    this->lstFmtActive.clear();
     this->uAllActions = DND_IGNORE_ACTION;
 
Index: /trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxDnD.h
===================================================================
--- /trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxDnD.h	(revision 56660)
+++ /trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxDnD.h	(revision 56661)
@@ -46,11 +46,7 @@
 public:
 
-    VBoxDnDDataObject(FORMATETC *pFormatEtc = NULL, STGMEDIUM *pStgMed = NULL, ULONG cFormats = 0);
+    VBoxDnDDataObject(LPFORMATETC pFormatEtc = NULL, LPSTGMEDIUM pStgMed = NULL, ULONG cFormats = 0);
     virtual ~VBoxDnDDataObject(void);
 
-public:
-
-    static int CreateDataObject(FORMATETC *pFormatEtc, STGMEDIUM *pStgMeds,
-                                ULONG cFormats, IDataObject **ppDataObject);
 public: /* IUnknown methods. */
 
@@ -61,11 +57,11 @@
 public: /* IDataObject methods. */
 
-    STDMETHOD(GetData)(FORMATETC *pFormatEtc, STGMEDIUM *pMedium);
-    STDMETHOD(GetDataHere)(FORMATETC *pFormatEtc, STGMEDIUM *pMedium);
-    STDMETHOD(QueryGetData)(FORMATETC *pFormatEtc);
-    STDMETHOD(GetCanonicalFormatEtc)(FORMATETC *pFormatEct,  FORMATETC *pFormatEtcOut);
-    STDMETHOD(SetData)(FORMATETC *pFormatEtc, STGMEDIUM *pMedium, BOOL fRelease);
+    STDMETHOD(GetData)(LPFORMATETC pFormatEtc, LPSTGMEDIUM pMedium);
+    STDMETHOD(GetDataHere)(LPFORMATETC pFormatEtc, LPSTGMEDIUM pMedium);
+    STDMETHOD(QueryGetData)(LPFORMATETC pFormatEtc);
+    STDMETHOD(GetCanonicalFormatEtc)(LPFORMATETC pFormatEct,  LPFORMATETC pFormatEtcOut);
+    STDMETHOD(SetData)(LPFORMATETC pFormatEtc, LPSTGMEDIUM pMedium, BOOL fRelease);
     STDMETHOD(EnumFormatEtc)(DWORD dwDirection, IEnumFORMATETC **ppEnumFormatEtc);
-    STDMETHOD(DAdvise)(FORMATETC *pFormatEtc, DWORD advf, IAdviseSink *pAdvSink, DWORD *pdwConnection);
+    STDMETHOD(DAdvise)(LPFORMATETC pFormatEtc, DWORD advf, IAdviseSink *pAdvSink, DWORD *pdwConnection);
     STDMETHOD(DUnadvise)(DWORD dwConnection);
     STDMETHOD(EnumDAdvise)(IEnumSTATDATA **ppEnumAdvise);
@@ -81,18 +77,18 @@
 protected:
 
-    bool LookupFormatEtc(FORMATETC *pFormatEtc, ULONG *puIndex);
+    bool LookupFormatEtc(LPFORMATETC pFormatEtc, ULONG *puIndex);
     static HGLOBAL MemDup(HGLOBAL hMemSource);
-    void RegisterFormat(FORMATETC *pFormatEtc, CLIPFORMAT clipFormat, TYMED tyMed = TYMED_HGLOBAL,
+    void RegisterFormat(LPFORMATETC pFormatEtc, CLIPFORMAT clipFormat, TYMED tyMed = TYMED_HGLOBAL,
                         LONG lindex = -1, DWORD dwAspect = DVASPECT_CONTENT, DVTARGETDEVICE *pTargetDevice = NULL);
 
-    Status     mStatus;
-    LONG       mRefCount;
-    ULONG      mcFormats;
-    FORMATETC *mpFormatEtc;
-    STGMEDIUM *mpStgMedium;
-    RTSEMEVENT mSemEvent;
-    RTCString  mstrFormat;
-    void      *mpvData;
-    uint32_t   mcbData;
+    Status      mStatus;
+    LONG        mRefCount;
+    ULONG       mcFormats;
+    LPFORMATETC mpFormatEtc;
+    LPSTGMEDIUM mpStgMedium;
+    RTSEMEVENT  mSemEvent;
+    RTCString   mstrFormat;
+    void       *mpvData;
+    uint32_t    mcbData;
 };
 
@@ -180,5 +176,5 @@
 public:
 
-    VBoxDnDEnumFormatEtc(FORMATETC *pFormatEtc, ULONG cFormats);
+    VBoxDnDEnumFormatEtc(LPFORMATETC pFormatEtc, ULONG cFormats);
     virtual ~VBoxDnDEnumFormatEtc(void);
 
@@ -189,13 +185,13 @@
     STDMETHOD_(ULONG, Release)(void);
 
-    STDMETHOD(Next)(ULONG cFormats, FORMATETC *pFormatEtc, ULONG *pcFetched);
+    STDMETHOD(Next)(ULONG cFormats, LPFORMATETC pFormatEtc, ULONG *pcFetched);
     STDMETHOD(Skip)(ULONG cFormats);
     STDMETHOD(Reset)(void);
-    STDMETHOD(Clone)(IEnumFORMATETC ** ppEnumFormatEtc);
-
-public:
-
-    static void CopyFormat(FORMATETC *pFormatDest, FORMATETC *pFormatSource);
-    static HRESULT CreateEnumFormatEtc(UINT cFormats, FORMATETC *pFormatEtc, IEnumFORMATETC **ppEnumFormatEtc);
+    STDMETHOD(Clone)(IEnumFORMATETC **ppEnumFormatEtc);
+
+public:
+
+    static void CopyFormat(LPFORMATETC pFormatDest, LPFORMATETC pFormatSource);
+    static HRESULT CreateEnumFormatEtc(UINT cFormats, LPFORMATETC pFormatEtc, IEnumFORMATETC **ppEnumFormatEtc);
 
 private:
@@ -204,5 +200,5 @@
     ULONG       m_nIndex;
     ULONG       m_nNumFormats;
-    FORMATETC * m_pFormatEtc;
+    LPFORMATETC m_pFormatEtc;
 };
 
@@ -369,8 +365,8 @@
      *  property so that we can selectively allow/forbid
      *  certain types later on runtime. */
-    RTCList<RTCString>         lstAllowedFormats;
+    RTCList<RTCString>         lstFmtSup;
     /** List of formats for the current
      *  drag'n drop operation. */
-    RTCList<RTCString>         lstFormats;
+    RTCList<RTCString>         lstFmtActive;
     /** Flags of all current drag'n drop
      *  actions allowed. */
Index: /trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxDnDDataObject.cpp
===================================================================
--- /trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxDnDDataObject.cpp	(revision 56660)
+++ /trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxDnDDataObject.cpp	(revision 56661)
@@ -5,5 +5,5 @@
 
 /*
- * Copyright (C) 2013-2014 Oracle Corporation
+ * Copyright (C) 2013-2015 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
@@ -41,6 +41,5 @@
 /** @todo Implement IDataObjectAsyncCapability interface? */
 
-VBoxDnDDataObject::VBoxDnDDataObject(FORMATETC *pFormatEtc,
-                                     STGMEDIUM *pStgMed, ULONG cFormats)
+VBoxDnDDataObject::VBoxDnDDataObject(LPFORMATETC pFormatEtc, LPSTGMEDIUM pStgMed, ULONG cFormats)
     : mStatus(Uninitialized),
       mRefCount(1),
@@ -51,6 +50,6 @@
     HRESULT hr;
 
-    /* Make sure that there's enough room for our fixed formats. */
-    ULONG cAllFormats = cFormats + 1;
+    ULONG cFixedFormats = 1;
+    ULONG cAllFormats   = cFormats + cFixedFormats;
 
     try
@@ -61,7 +60,13 @@
         RT_BZERO(mpStgMedium, sizeof(STGMEDIUM) * cAllFormats);
 
-        if (   pFormatEtc
-            && pStgMed)
+        /*
+         * Registration of dynamic formats needed?
+         */
+        LogFlowFunc(("%RU32 dynamic formats\n", cFormats));
+        if (cFormats)
         {
+            AssertPtr(pFormatEtc);
+            AssertPtr(pStgMed);
+
             for (ULONG i = 0; i < cFormats; i++)
             {
@@ -85,8 +90,12 @@
         AssertRC(rc2);
 
-        /* Most commonly used format. */
+        /*
+         * Register fixed formats.
+         */
+#if 0
+        /* CF_HDROP. */
         RegisterFormat(&mpFormatEtc[cFormats], CF_HDROP);
         mpStgMedium[cFormats++].tymed = TYMED_HGLOBAL;
-#if 0
+
         /* IStream. */
         RegisterFormat(&mpFormatEtc[cFormats++],
@@ -107,5 +116,5 @@
 #endif
         mcFormats = cFormats;
-        mStatus = Initialized;
+        mStatus   = Initialized;
     }
 
@@ -125,26 +134,4 @@
 
     LogFlowFunc(("mRefCount=%RI32\n", mRefCount));
-}
-
-/* static */
-int VBoxDnDDataObject::CreateDataObject(FORMATETC *pFormatEtc, STGMEDIUM *pStgMeds,
-                                        ULONG cFormats, IDataObject **ppDataObject)
-{
-    AssertPtrReturn(pFormatEtc, VERR_INVALID_POINTER);
-    AssertPtrReturn(pStgMeds, VERR_INVALID_POINTER);
-    AssertPtrReturn(ppDataObject, VERR_INVALID_POINTER);
-
-    int rc;
-    try
-    {
-        *ppDataObject = new VBoxDnDDataObject(pFormatEtc, pStgMeds, cFormats);
-        rc = VINF_SUCCESS;
-    }
-    catch(std::bad_alloc &)
-    {
-        rc = VERR_NO_MEMORY;
-    }
-
-    return rc;
 }
 
@@ -195,5 +182,5 @@
  * @param   pMedium
  */
-STDMETHODIMP VBoxDnDDataObject::GetData(FORMATETC *pFormatEtc, STGMEDIUM *pMedium)
+STDMETHODIMP VBoxDnDDataObject::GetData(LPFORMATETC pFormatEtc, LPSTGMEDIUM pMedium)
 {
     AssertPtrReturn(pFormatEtc, DV_E_FORMATETC);
@@ -206,13 +193,13 @@
         return DV_E_FORMATETC;
 
-    FORMATETC *pThisFormat = &mpFormatEtc[lIndex];
+    LPFORMATETC pThisFormat = &mpFormatEtc[lIndex];
     AssertPtr(pThisFormat);
 
-    STGMEDIUM *pThisMedium = &mpStgMedium[lIndex];
+    LPSTGMEDIUM pThisMedium = &mpStgMedium[lIndex];
     AssertPtr(pThisMedium);
 
     LogFlowFunc(("Using pThisFormat=%p, pThisMedium=%p\n", pThisFormat, pThisMedium));
 
-    HRESULT hr = DV_E_FORMATETC;
+    HRESULT hr = DV_E_FORMATETC; /* Play safe. */
 
     LogFlowFunc(("mStatus=%ld\n", mStatus));
@@ -226,10 +213,19 @@
     if (mStatus == Dropped)
     {
-        LogFlowFunc(("cfFormat=%RI16, sFormat=%s, tyMed=%RU32, dwAspect=%RU32\n",
-                     pThisFormat->cfFormat, VBoxDnDDataObject::ClipboardFormatToString(pFormatEtc->cfFormat),
-                     pThisFormat->tymed, pThisFormat->dwAspect));
-        LogFlowFunc(("Got strFormat=%s, pvData=%p, cbData=%RU32\n",
-                     mstrFormat.c_str(), mpvData, mcbData));
-
+        LogRel3(("DnD: cfFormat=%RI16, sFormat=%s, tyMed=%RU32, dwAspect=%RU32\n",
+                 pThisFormat->cfFormat, VBoxDnDDataObject::ClipboardFormatToString(pFormatEtc->cfFormat),
+                 pThisFormat->tymed, pThisFormat->dwAspect));
+        LogRel3(("DnD: Got strFormat=%s, pvData=%p, cbData=%RU32\n",
+                  mstrFormat.c_str(), mpvData, mcbData));
+
+        /*
+         * Initialize default values.
+         */
+        pMedium->tymed          = pThisFormat->tymed;
+        pMedium->pUnkForRelease = NULL;
+
+        /*
+         * URI list handling.
+         */
         if (mstrFormat.equalsIgnoreCase("text/uri-list"))
         {
@@ -372,6 +368,33 @@
             }
         }
-    }
-
+        /*
+         * Plain text handling.
+         */
+        else if (   mstrFormat.equalsIgnoreCase("text/plain")
+                 || mstrFormat.equalsIgnoreCase("text/html")
+                 || mstrFormat.equalsIgnoreCase("text/plain;charset=utf-8")
+                 || mstrFormat.equalsIgnoreCase("text/plain;charset=utf-16")
+                 || mstrFormat.equalsIgnoreCase("text/plain")
+                 || mstrFormat.equalsIgnoreCase("text/richtext")
+                 || mstrFormat.equalsIgnoreCase("UTF8_STRING")
+                 || mstrFormat.equalsIgnoreCase("TEXT")
+                 || mstrFormat.equalsIgnoreCase("STRING"))
+        {
+            pMedium->hGlobal = GlobalAlloc(GHND, mcbData + 1);
+            if (pMedium->hGlobal)
+            {
+                char *pcDst  = (char *)GlobalLock(pMedium->hGlobal);
+                memcpy(pcDst, mpvData, mcbData);
+                pcDst[mcbData] = '\0';
+                GlobalUnlock(pMedium->hGlobal);
+
+                hr = S_OK;
+            }
+        }
+        else
+            LogRel(("DnD: Error: Format '%s' not implemented\n", mstrFormat.c_str()));
+    }
+
+    /* Error handling; at least return some basic data. */
     if (FAILED(hr))
     {
@@ -392,4 +415,7 @@
         pMedium->pUnkForRelease = NULL;
     }
+
+    if (hr == DV_E_FORMATETC)
+        LogRel(("DnD: Error handling format '%s' (%RU32 bytes)\n", mstrFormat.c_str(), mcbData));
 
     LogFlowFunc(("hr=%Rhrc\n", hr));
@@ -405,5 +431,5 @@
  * @param   pMedium
  */
-STDMETHODIMP VBoxDnDDataObject::GetDataHere(FORMATETC *pFormatEtc, STGMEDIUM *pMedium)
+STDMETHODIMP VBoxDnDDataObject::GetDataHere(LPFORMATETC pFormatEtc, LPSTGMEDIUM pMedium)
 {
     LogFlowFunc(("\n"));
@@ -418,5 +444,5 @@
  * @param   pFormatEtc
  */
-STDMETHODIMP VBoxDnDDataObject::QueryGetData(FORMATETC *pFormatEtc)
+STDMETHODIMP VBoxDnDDataObject::QueryGetData(LPFORMATETC pFormatEtc)
 {
     LogFlowFunc(("\n"));
@@ -424,5 +450,5 @@
 }
 
-STDMETHODIMP VBoxDnDDataObject::GetCanonicalFormatEtc(FORMATETC *pFormatEct, FORMATETC *pFormatEtcOut)
+STDMETHODIMP VBoxDnDDataObject::GetCanonicalFormatEtc(LPFORMATETC pFormatEct, LPFORMATETC pFormatEtcOut)
 {
     LogFlowFunc(("\n"));
@@ -433,5 +459,5 @@
 }
 
-STDMETHODIMP VBoxDnDDataObject::SetData(FORMATETC *pFormatEtc, STGMEDIUM *pMedium,  BOOL fRelease)
+STDMETHODIMP VBoxDnDDataObject::SetData(LPFORMATETC pFormatEtc, LPSTGMEDIUM pMedium,  BOOL fRelease)
 {
     return E_NOTIMPL;
@@ -455,5 +481,5 @@
 }
 
-STDMETHODIMP VBoxDnDDataObject::DAdvise(FORMATETC *pFormatEtc, DWORD advf, IAdviseSink *pAdvSink, DWORD *pdwConnection)
+STDMETHODIMP VBoxDnDDataObject::DAdvise(LPFORMATETC pFormatEtc, DWORD advf, IAdviseSink *pAdvSink, DWORD *pdwConnection)
 {
     return OLE_E_ADVISENOTSUPPORTED;
@@ -564,5 +590,5 @@
 }
 
-bool VBoxDnDDataObject::LookupFormatEtc(FORMATETC *pFormatEtc, ULONG *puIndex)
+bool VBoxDnDDataObject::LookupFormatEtc(LPFORMATETC pFormatEtc, ULONG *puIndex)
 {
     AssertReturn(pFormatEtc, false);
@@ -575,7 +601,7 @@
             && pFormatEtc->dwAspect == mpFormatEtc[i].dwAspect)
         {
-            LogFlowFunc(("Format found: tyMed=%RI32, cfFormat=%RI16, sFormats=%s, dwAspect=%RI32, ulIndex=%RU32\n",
-                         pFormatEtc->tymed, pFormatEtc->cfFormat, VBoxDnDDataObject::ClipboardFormatToString(mpFormatEtc[i].cfFormat),
-                         pFormatEtc->dwAspect, i));
+            LogRel3(("DnD: Format found: tyMed=%RI32, cfFormat=%RI16, sFormats=%s, dwAspect=%RI32, ulIndex=%RU32\n",
+                      pFormatEtc->tymed, pFormatEtc->cfFormat, VBoxDnDDataObject::ClipboardFormatToString(mpFormatEtc[i].cfFormat),
+                      pFormatEtc->dwAspect, i));
             if (puIndex)
                 *puIndex = i;
@@ -584,9 +610,8 @@
     }
 
-#ifdef VBOX_DND_DEBUG_FORMATS
-    LogFlowFunc(("Format NOT found: tyMed=%RI32, cfFormat=%RI16, sFormats=%s, dwAspect=%RI32\n",
-                 pFormatEtc->tymed, pFormatEtc->cfFormat, VBoxDnDDataObject::ClipboardFormatToString(pFormatEtc->cfFormat),
-                 pFormatEtc->dwAspect));
-#endif
+    LogRel3(("DnD: Format NOT found: tyMed=%RI32, cfFormat=%RI16, sFormats=%s, dwAspect=%RI32\n",
+             pFormatEtc->tymed, pFormatEtc->cfFormat, VBoxDnDDataObject::ClipboardFormatToString(pFormatEtc->cfFormat),
+             pFormatEtc->dwAspect));
+
     return false;
 }
@@ -611,5 +636,5 @@
 }
 
-void VBoxDnDDataObject::RegisterFormat(FORMATETC *pFormatEtc, CLIPFORMAT clipFormat,
+void VBoxDnDDataObject::RegisterFormat(LPFORMATETC pFormatEtc, CLIPFORMAT clipFormat,
                                        TYMED tyMed, LONG lIndex, DWORD dwAspect,
                                        DVTARGETDEVICE *pTargetDevice)
Index: /trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxDnDEnumFormat.cpp
===================================================================
--- /trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxDnDEnumFormat.cpp	(revision 56660)
+++ /trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxDnDEnumFormat.cpp	(revision 56661)
@@ -5,5 +5,5 @@
 
 /*
- * Copyright (C) 2013 Oracle Corporation
+ * Copyright (C) 2013-2015 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
@@ -30,5 +30,5 @@
 
 
-VBoxDnDEnumFormatEtc::VBoxDnDEnumFormatEtc(FORMATETC *pFormatEtc, ULONG cFormats)
+VBoxDnDEnumFormatEtc::VBoxDnDEnumFormatEtc(LPFORMATETC pFormatEtc, ULONG cFormats)
     : m_lRefCount(1),
       m_nIndex(0)
@@ -112,5 +112,5 @@
 }
 
-STDMETHODIMP VBoxDnDEnumFormatEtc::Next(ULONG cFormats, FORMATETC *pFormatEtc, ULONG *pcFetched)
+STDMETHODIMP VBoxDnDEnumFormatEtc::Next(ULONG cFormats, LPFORMATETC pFormatEtc, ULONG *pcFetched)
 {
     ULONG ulCopied  = 0;
@@ -158,5 +158,5 @@
 
 /* static */
-void VBoxDnDEnumFormatEtc::CopyFormat(FORMATETC *pDest, FORMATETC *pSource)
+void VBoxDnDEnumFormatEtc::CopyFormat(LPFORMATETC pDest, LPFORMATETC pSource)
 {
     AssertPtrReturnVoid(pDest);
@@ -173,5 +173,5 @@
 
 /* static */
-HRESULT VBoxDnDEnumFormatEtc::CreateEnumFormatEtc(UINT nNumFormats, FORMATETC *pFormatEtc, IEnumFORMATETC **ppEnumFormatEtc)
+HRESULT VBoxDnDEnumFormatEtc::CreateEnumFormatEtc(UINT nNumFormats, LPFORMATETC pFormatEtc, IEnumFORMATETC **ppEnumFormatEtc)
 {
     AssertReturn(nNumFormats, E_INVALIDARG);
