From 69c90c2a9fc5d03bb3b8aefadf49de4a63b071f1 Mon Sep 17 00:00:00 2001
From: Alexandre Julliard <julliard@winehq.org>
Date: Tue, 9 Sep 2003 19:32:36 +0000
Subject: [PATCH] Converted the rest of the obj_*.h headers to IDL into
 shobjidl.idl.

---
 dlls/commdlg/filedlg95.c              |    6 +-
 dlls/shell32/shell32_main.h           |    4 +-
 dlls/shell32/shlview.c                |    8 +-
 dlls/shell32/shv_bg_cmenu.c           |   41 +-
 dlls/shell32/shv_item_cmenu.c         |   49 +-
 include/Makefile.in                   |    6 -
 include/shlguid.h                     |   19 +-
 include/shlobj.h                      |    7 -
 include/shobjidl.h                    | 1368 +++++++++++++++++++++++++
 include/shobjidl.idl                  |  382 +++++++
 include/wine/obj_commdlgbrowser.h     |   59 --
 include/wine/obj_contextmenu.h        |  151 ---
 include/wine/obj_dockingwindowframe.h |   61 --
 include/wine/obj_dragdrophelper.h     |  100 --
 include/wine/obj_extracticon.h        |   85 --
 include/wine/obj_shellfolder.h        |   83 --
 include/wtypes.h                      |    2 +
 include/wtypes.idl                    |    1 +
 18 files changed, 1819 insertions(+), 613 deletions(-)
 delete mode 100644 include/wine/obj_commdlgbrowser.h
 delete mode 100644 include/wine/obj_contextmenu.h
 delete mode 100644 include/wine/obj_dockingwindowframe.h
 delete mode 100644 include/wine/obj_dragdrophelper.h
 delete mode 100644 include/wine/obj_extracticon.h
 delete mode 100644 include/wine/obj_shellfolder.h

diff --git a/dlls/commdlg/filedlg95.c b/dlls/commdlg/filedlg95.c
index b06ab8f413b..e8dd865b770 100644
--- a/dlls/commdlg/filedlg95.c
+++ b/dlls/commdlg/filedlg95.c
@@ -1417,15 +1417,15 @@ static LRESULT FILEDLG95_OnWMCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
     break;
     /* New folder button */
   case FCIDM_TB_NEWFOLDER:
-    FILEDLG95_SHELL_ExecuteCommand(hwnd,CMDSTR_NEWFOLDER);
+    FILEDLG95_SHELL_ExecuteCommand(hwnd,CMDSTR_NEWFOLDERA);
     break;
     /* List option button */
   case FCIDM_TB_SMALLICON:
-    FILEDLG95_SHELL_ExecuteCommand(hwnd,CMDSTR_VIEWLIST);
+    FILEDLG95_SHELL_ExecuteCommand(hwnd,CMDSTR_VIEWLISTA);
     break;
     /* Details option button */
   case FCIDM_TB_REPORTVIEW:
-    FILEDLG95_SHELL_ExecuteCommand(hwnd,CMDSTR_VIEWDETAILS);
+    FILEDLG95_SHELL_ExecuteCommand(hwnd,CMDSTR_VIEWDETAILSA);
     break;
     /* Details option button */
   case FCIDM_TB_DESKTOP:
diff --git a/dlls/shell32/shell32_main.h b/dlls/shell32/shell32_main.h
index 77b6a963f3d..0636607fec6 100644
--- a/dlls/shell32/shell32_main.h
+++ b/dlls/shell32/shell32_main.h
@@ -85,8 +85,8 @@ LPDATAOBJECT	IDataObject_Constructor(HWND hwndOwner, LPCITEMIDLIST myPidl, LPCIT
 LPENUMFORMATETC	IEnumFORMATETC_Constructor(UINT, const FORMATETC []);
 
 LPCLASSFACTORY	IClassFactory_Constructor(REFCLSID);
-IContextMenu *	ISvItemCm_Constructor(LPSHELLFOLDER pSFParent, LPCITEMIDLIST pidl, LPCITEMIDLIST *aPidls, UINT uItemCount);
-IContextMenu *	ISvBgCm_Constructor(LPSHELLFOLDER pSFParent);
+IContextMenu2 *	ISvItemCm_Constructor(LPSHELLFOLDER pSFParent, LPCITEMIDLIST pidl, LPCITEMIDLIST *aPidls, UINT uItemCount);
+IContextMenu2 *	ISvBgCm_Constructor(LPSHELLFOLDER pSFParent);
 LPSHELLVIEW	IShellView_Constructor(LPSHELLFOLDER);
 
 HRESULT WINAPI IFSFolder_Constructor(IUnknown * pUnkOuter, REFIID riid, LPVOID * ppv);
diff --git a/dlls/shell32/shlview.c b/dlls/shell32/shlview.c
index 1b2586fdfdf..e08c6a309f5 100644
--- a/dlls/shell32/shlview.c
+++ b/dlls/shell32/shlview.c
@@ -808,7 +808,7 @@ static void ShellView_DoContextMenu(IShellViewImpl * This, WORD x, WORD y, BOOL
 	BOOL	fExplore = FALSE;
 	HWND	hwndTree = 0;
 	LPCONTEXTMENU	pContextMenu = NULL;
-	IContextMenu *	pCM = NULL;
+	IContextMenu2 *pCM = NULL;
 	CMINVOKECOMMANDINFO	cmi;
 
 	TRACE("(%p)->(0x%08x 0x%08x 0x%08x) stub\n",This, x, y, bDefault);
@@ -880,7 +880,7 @@ static void ShellView_DoContextMenu(IShellViewImpl * This, WORD x, WORD y, BOOL
 	  hMenu = CreatePopupMenu();
 
 	  pCM = ISvBgCm_Constructor(This->pSFParent);
-	  IContextMenu_QueryContextMenu(pCM, hMenu, 0, FCIDM_SHVIEWFIRST, FCIDM_SHVIEWLAST, 0);
+	  IContextMenu2_QueryContextMenu(pCM, hMenu, 0, FCIDM_SHVIEWFIRST, FCIDM_SHVIEWLAST, 0);
 
 	  uCommand = TrackPopupMenu( hMenu, TPM_LEFTALIGN | TPM_RETURNCMD,x,y,0,This->hWnd,NULL);
 	  DestroyMenu(hMenu);
@@ -891,9 +891,9 @@ static void ShellView_DoContextMenu(IShellViewImpl * This, WORD x, WORD y, BOOL
 	  cmi.cbSize = sizeof(cmi);
 	  cmi.lpVerb = (LPCSTR)MAKEINTRESOURCEA(uCommand);
 	  cmi.hwnd = This->hWndParent;
-	  IContextMenu_InvokeCommand(pCM, &cmi);
+	  IContextMenu2_InvokeCommand(pCM, &cmi);
 
-	  IContextMenu_Release(pCM);
+	  IContextMenu2_Release(pCM);
 	}
 }
 
diff --git a/dlls/shell32/shv_bg_cmenu.c b/dlls/shell32/shv_bg_cmenu.c
index f02409394b6..e78f0bedb0e 100644
--- a/dlls/shell32/shv_bg_cmenu.c
+++ b/dlls/shell32/shv_bg_cmenu.c
@@ -41,18 +41,18 @@ WINE_DEFAULT_DEBUG_CHANNEL(shell);
 */
 typedef struct
 {
-	ICOM_VFIELD(IContextMenu);
+	ICOM_VFIELD(IContextMenu2);
 	IShellFolder*	pSFParent;
 	DWORD		ref;
 } BgCmImpl;
 
 
-static struct ICOM_VTABLE(IContextMenu) cmvt;
+static struct ICOM_VTABLE(IContextMenu2) cmvt;
 
 /**************************************************************************
 *   ISVBgCm_Constructor()
 */
-IContextMenu *ISvBgCm_Constructor(IShellFolder*	pSFParent)
+IContextMenu2 *ISvBgCm_Constructor(IShellFolder*	pSFParent)
 {
 	BgCmImpl* cm;
 
@@ -63,13 +63,13 @@ IContextMenu *ISvBgCm_Constructor(IShellFolder*	pSFParent)
 	if(pSFParent) IShellFolder_AddRef(pSFParent);
 
 	TRACE("(%p)->()\n",cm);
-	return (IContextMenu*)cm;
+	return (IContextMenu2*)cm;
 }
 
 /**************************************************************************
 *  ISVBgCm_fnQueryInterface
 */
-static HRESULT WINAPI ISVBgCm_fnQueryInterface(IContextMenu *iface, REFIID riid, LPVOID *ppvObj)
+static HRESULT WINAPI ISVBgCm_fnQueryInterface(IContextMenu2 *iface, REFIID riid, LPVOID *ppvObj)
 {
 	ICOM_THIS(BgCmImpl, iface);
 
@@ -77,11 +77,9 @@ static HRESULT WINAPI ISVBgCm_fnQueryInterface(IContextMenu *iface, REFIID riid,
 
 	*ppvObj = NULL;
 
-	if(IsEqualIID(riid, &IID_IUnknown))          /*IUnknown*/
-	{
-	  *ppvObj = This;
-	}
-	else if(IsEqualIID(riid, &IID_IContextMenu))  /*IContextMenu*/
+        if(IsEqualIID(riid, &IID_IUnknown) ||
+           IsEqualIID(riid, &IID_IContextMenu) ||
+           IsEqualIID(riid, &IID_IContextMenu2))
 	{
 	  *ppvObj = This;
 	}
@@ -103,7 +101,7 @@ static HRESULT WINAPI ISVBgCm_fnQueryInterface(IContextMenu *iface, REFIID riid,
 /**************************************************************************
 *  ISVBgCm_fnAddRef
 */
-static ULONG WINAPI ISVBgCm_fnAddRef(IContextMenu *iface)
+static ULONG WINAPI ISVBgCm_fnAddRef(IContextMenu2 *iface)
 {
 	ICOM_THIS(BgCmImpl, iface);
 
@@ -115,7 +113,7 @@ static ULONG WINAPI ISVBgCm_fnAddRef(IContextMenu *iface)
 /**************************************************************************
 *  ISVBgCm_fnRelease
 */
-static ULONG WINAPI ISVBgCm_fnRelease(IContextMenu *iface)
+static ULONG WINAPI ISVBgCm_fnRelease(IContextMenu2 *iface)
 {
 	ICOM_THIS(BgCmImpl, iface);
 
@@ -140,7 +138,7 @@ static ULONG WINAPI ISVBgCm_fnRelease(IContextMenu *iface)
 */
 
 static HRESULT WINAPI ISVBgCm_fnQueryContextMenu(
-	IContextMenu *iface,
+	IContextMenu2 *iface,
 	HMENU hMenu,
 	UINT indexMenu,
 	UINT idCmdFirst,
@@ -186,7 +184,7 @@ static HRESULT WINAPI ISVBgCm_fnQueryContextMenu(
 * DoNewFolder
 */
 static void DoNewFolder(
-	IContextMenu *iface,
+	IContextMenu2 *iface,
 	IShellView *psv)
 {
 	ICOM_THIS(BgCmImpl, iface);
@@ -217,7 +215,7 @@ static void DoNewFolder(
 * DoPaste
 */
 static BOOL DoPaste(
-	IContextMenu *iface)
+	IContextMenu2 *iface)
 {
 	ICOM_THIS(BgCmImpl, iface);
 	BOOL bSuccess = FALSE;
@@ -313,7 +311,7 @@ static BOOL DoPaste(
 * ISVBgCm_fnInvokeCommand()
 */
 static HRESULT WINAPI ISVBgCm_fnInvokeCommand(
-	IContextMenu *iface,
+	IContextMenu2 *iface,
 	LPCMINVOKECOMMANDINFO lpcmi)
 {
 	ICOM_THIS(BgCmImpl, iface);
@@ -383,7 +381,7 @@ static HRESULT WINAPI ISVBgCm_fnInvokeCommand(
  *
  */
 static HRESULT WINAPI ISVBgCm_fnGetCommandString(
-	IContextMenu *iface,
+	IContextMenu2 *iface,
 	UINT idCommand,
 	UINT uFlags,
 	UINT* lpReserved,
@@ -417,7 +415,7 @@ static HRESULT WINAPI ISVBgCm_fnGetCommandString(
 * ISVBgCm_fnHandleMenuMsg()
 */
 static HRESULT WINAPI ISVBgCm_fnHandleMenuMsg(
-	IContextMenu *iface,
+	IContextMenu2 *iface,
 	UINT uMsg,
 	WPARAM wParam,
 	LPARAM lParam)
@@ -430,10 +428,10 @@ static HRESULT WINAPI ISVBgCm_fnHandleMenuMsg(
 }
 
 /**************************************************************************
-* IContextMenu VTable
+* IContextMenu2 VTable
 *
 */
-static struct ICOM_VTABLE(IContextMenu) cmvt =
+static struct ICOM_VTABLE(IContextMenu2) cmvt =
 {
 	ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
 	ISVBgCm_fnQueryInterface,
@@ -442,6 +440,5 @@ static struct ICOM_VTABLE(IContextMenu) cmvt =
 	ISVBgCm_fnQueryContextMenu,
 	ISVBgCm_fnInvokeCommand,
 	ISVBgCm_fnGetCommandString,
-	ISVBgCm_fnHandleMenuMsg,
-	(void *) 0xdeadbabe	/* just paranoia (IContextMenu3) */
+	ISVBgCm_fnHandleMenuMsg
 };
diff --git a/dlls/shell32/shv_item_cmenu.c b/dlls/shell32/shv_item_cmenu.c
index 593727d83ed..7883662e7cd 100644
--- a/dlls/shell32/shv_item_cmenu.c
+++ b/dlls/shell32/shv_item_cmenu.c
@@ -41,7 +41,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(shell);
 *  IContextMenu Implementation
 */
 typedef struct
-{	ICOM_VFIELD(IContextMenu);
+{	ICOM_VFIELD(IContextMenu2);
 	DWORD		ref;
 	IShellFolder*	pSFParent;
 	LPITEMIDLIST	pidl;		/* root pidl */
@@ -51,7 +51,7 @@ typedef struct
 } ItemCmImpl;
 
 
-static struct ICOM_VTABLE(IContextMenu) cmvt;
+static struct ICOM_VTABLE(IContextMenu2) cmvt;
 
 /**************************************************************************
 * ISvItemCm_CanRenameItems()
@@ -76,7 +76,7 @@ static BOOL ISvItemCm_CanRenameItems(ItemCmImpl *This)
 /**************************************************************************
 *   ISvItemCm_Constructor()
 */
-IContextMenu *ISvItemCm_Constructor(LPSHELLFOLDER pSFParent, LPCITEMIDLIST pidl, LPCITEMIDLIST *apidl, UINT cidl)
+IContextMenu2 *ISvItemCm_Constructor(LPSHELLFOLDER pSFParent, LPCITEMIDLIST pidl, LPCITEMIDLIST *apidl, UINT cidl)
 {	ItemCmImpl* cm;
 	UINT  u;
 
@@ -99,13 +99,13 @@ IContextMenu *ISvItemCm_Constructor(LPSHELLFOLDER pSFParent, LPCITEMIDLIST pidl,
 
 	TRACE("(%p)->()\n",cm);
 
-	return (IContextMenu*)cm;
+	return (IContextMenu2*)cm;
 }
 
 /**************************************************************************
 *  ISvItemCm_fnQueryInterface
 */
-static HRESULT WINAPI ISvItemCm_fnQueryInterface(IContextMenu *iface, REFIID riid, LPVOID *ppvObj)
+static HRESULT WINAPI ISvItemCm_fnQueryInterface(IContextMenu2 *iface, REFIID riid, LPVOID *ppvObj)
 {
 	ICOM_THIS(ItemCmImpl, iface);
 
@@ -113,11 +113,9 @@ static HRESULT WINAPI ISvItemCm_fnQueryInterface(IContextMenu *iface, REFIID rii
 
 	*ppvObj = NULL;
 
-	if(IsEqualIID(riid, &IID_IUnknown))          /*IUnknown*/
-	{
-	  *ppvObj = This;
-	}
-	else if(IsEqualIID(riid, &IID_IContextMenu))  /*IContextMenu*/
+        if(IsEqualIID(riid, &IID_IUnknown) ||
+           IsEqualIID(riid, &IID_IContextMenu) ||
+           IsEqualIID(riid, &IID_IContextMenu2))
 	{
 	  *ppvObj = This;
 	}
@@ -139,7 +137,7 @@ static HRESULT WINAPI ISvItemCm_fnQueryInterface(IContextMenu *iface, REFIID rii
 /**************************************************************************
 *  ISvItemCm_fnAddRef
 */
-static ULONG WINAPI ISvItemCm_fnAddRef(IContextMenu *iface)
+static ULONG WINAPI ISvItemCm_fnAddRef(IContextMenu2 *iface)
 {
 	ICOM_THIS(ItemCmImpl, iface);
 
@@ -151,7 +149,7 @@ static ULONG WINAPI ISvItemCm_fnAddRef(IContextMenu *iface)
 /**************************************************************************
 *  ISvItemCm_fnRelease
 */
-static ULONG WINAPI ISvItemCm_fnRelease(IContextMenu *iface)
+static ULONG WINAPI ISvItemCm_fnRelease(IContextMenu2 *iface)
 {
 	ICOM_THIS(ItemCmImpl, iface);
 
@@ -211,7 +209,7 @@ void WINAPI _InsertMenuItem (
 */
 
 static HRESULT WINAPI ISvItemCm_fnQueryContextMenu(
-	IContextMenu *iface,
+	IContextMenu2 *iface,
 	HMENU hmenu,
 	UINT indexMenu,
 	UINT idCmdFirst,
@@ -263,7 +261,7 @@ static HRESULT WINAPI ISvItemCm_fnQueryContextMenu(
 */
 
 static void DoOpenExplore(
-	IContextMenu *iface,
+	IContextMenu2 *iface,
 	HWND hwnd,
 	LPCSTR verb)
 {
@@ -305,7 +303,7 @@ static void DoOpenExplore(
 * DoRename
 */
 static void DoRename(
-	IContextMenu *iface,
+	IContextMenu2 *iface,
 	HWND hwnd)
 {
 	ICOM_THIS(ItemCmImpl, iface);
@@ -333,7 +331,7 @@ static void DoRename(
  *
  * deletes the currently selected items
  */
-static void DoDelete(IContextMenu *iface)
+static void DoDelete(IContextMenu2 *iface)
 {
 	ICOM_THIS(ItemCmImpl, iface);
 	ISFHelper * psfhlp;
@@ -352,7 +350,7 @@ static void DoDelete(IContextMenu *iface)
  * copies the currently selected items into the clipboard
  */
 static BOOL DoCopyOrCut(
-	IContextMenu *iface,
+	IContextMenu2 *iface,
 	HWND hwnd,
 	BOOL bCut)
 {
@@ -425,7 +423,7 @@ static BOOL DoCopyOrCut(
 * ISvItemCm_fnInvokeCommand()
 */
 static HRESULT WINAPI ISvItemCm_fnInvokeCommand(
-	IContextMenu *iface,
+	IContextMenu2 *iface,
 	LPCMINVOKECOMMANDINFO lpcmi)
 {
     ICOM_THIS(ItemCmImpl, iface);
@@ -488,7 +486,7 @@ static HRESULT WINAPI ISvItemCm_fnInvokeCommand(
 *  ISvItemCm_fnGetCommandString()
 */
 static HRESULT WINAPI ISvItemCm_fnGetCommandString(
-	IContextMenu *iface,
+	IContextMenu2 *iface,
 	UINT idCommand,
 	UINT uFlags,
 	UINT* lpReserved,
@@ -503,7 +501,8 @@ static HRESULT WINAPI ISvItemCm_fnGetCommandString(
 
 	switch(uFlags)
 	{
-	  case GCS_HELPTEXT:
+	  case GCS_HELPTEXTA:
+	  case GCS_HELPTEXTW:
 	    hr = E_NOTIMPL;
 	    break;
 
@@ -528,7 +527,8 @@ static HRESULT WINAPI ISvItemCm_fnGetCommandString(
 	    }
 	    break;
 
-	  case GCS_VALIDATE:
+	  case GCS_VALIDATEA:
+	  case GCS_VALIDATEW:
 	    hr = NOERROR;
 	    break;
 	}
@@ -543,7 +543,7 @@ static HRESULT WINAPI ISvItemCm_fnGetCommandString(
 *  is nevertheless called from word95
 */
 static HRESULT WINAPI ISvItemCm_fnHandleMenuMsg(
-	IContextMenu *iface,
+	IContextMenu2 *iface,
 	UINT uMsg,
 	WPARAM wParam,
 	LPARAM lParam)
@@ -555,7 +555,7 @@ static HRESULT WINAPI ISvItemCm_fnHandleMenuMsg(
 	return E_NOTIMPL;
 }
 
-static struct ICOM_VTABLE(IContextMenu) cmvt =
+static struct ICOM_VTABLE(IContextMenu2) cmvt =
 {
 	ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
 	ISvItemCm_fnQueryInterface,
@@ -564,6 +564,5 @@ static struct ICOM_VTABLE(IContextMenu) cmvt =
 	ISvItemCm_fnQueryContextMenu,
 	ISvItemCm_fnInvokeCommand,
 	ISvItemCm_fnGetCommandString,
-	ISvItemCm_fnHandleMenuMsg,
-	(void *) 0xdeadbabe	/* just paranoia */
+	ISvItemCm_fnHandleMenuMsg
 };
diff --git a/include/Makefile.in b/include/Makefile.in
index 8fa7c75cebd..23819690455 100644
--- a/include/Makefile.in
+++ b/include/Makefile.in
@@ -244,12 +244,6 @@ WINE_INCLUDES = \
 	debug.h \
 	exception.h \
 	library.h \
-	obj_commdlgbrowser.h \
-	obj_contextmenu.h \
-	obj_dockingwindowframe.h \
-	obj_dragdrophelper.h \
-	obj_extracticon.h \
-	obj_shellfolder.h \
 	unicode.h
 
 EXTRASUBDIRS = bitmaps msvcrt msvcrt/sys wine
diff --git a/include/shlguid.h b/include/shlguid.h
index bc29ebdd5d8..82293e97beb 100644
--- a/include/shlguid.h
+++ b/include/shlguid.h
@@ -41,28 +41,28 @@ DEFINE_SHLGUID(CGID_ShellServiceObject, 0x000214D2L, 0, 0);
 DEFINE_SHLGUID(CGID_ExplorerBarDoc,     0x000214D3L, 0, 0);
 
 DEFINE_SHLGUID(IID_INewShortcutHookA,   0x000214E1L, 0, 0);
-DEFINE_SHLGUID(IID_IContextMenu,        0x000214E4L, 0, 0);
 DEFINE_SHLGUID(IID_IShellIcon,          0x000214E5L, 0, 0);
 DEFINE_SHLGUID(IID_IShellPropSheetExt,  0x000214E9L, 0, 0);
-DEFINE_SHLGUID(IID_IExtractIconA,       0x000214EBL, 0, 0);
 DEFINE_SHLGUID(IID_IShellDetails,       0x000214ECL, 0, 0);
 DEFINE_SHLGUID(IID_IDelayedRelease,     0x000214EDL, 0, 0);
 DEFINE_SHLGUID(IID_IShellCopyHookA,     0x000214EFL, 0, 0);
 DEFINE_SHLGUID(IID_IFileViewerA,        0x000214F0L, 0, 0);
-DEFINE_SHLGUID(IID_ICommDlgBrowser,     0x000214F1L, 0, 0);
 DEFINE_SHLGUID(IID_IFileViewerSite,     0x000214F3L, 0, 0);
-DEFINE_SHLGUID(IID_IContextMenu2,       0x000214F4L, 0, 0);
 DEFINE_SHLGUID(IID_IShellExecuteHookA,  0x000214F5L, 0, 0);
 DEFINE_SHLGUID(IID_IPropSheetPage,      0x000214F6L, 0, 0);
 DEFINE_SHLGUID(IID_INewShortcutHookW,   0x000214F7L, 0, 0);
 DEFINE_SHLGUID(IID_IFileViewerW,        0x000214F8L, 0, 0);
-DEFINE_SHLGUID(IID_IExtractIconW,       0x000214FAL, 0, 0);
 DEFINE_SHLGUID(IID_IShellExecuteHookW,  0x000214FBL, 0, 0);
 DEFINE_SHLGUID(IID_IShellCopyHookW,     0x000214FCL, 0, 0);
 DEFINE_SHLGUID(IID_IRemoteComputer,     0x000214FEL, 0, 0);
 DEFINE_SHLGUID(IID_IQueryInfo,          0x00021500L, 0, 0);
 
 /* avoid duplicate definitions with shobjidl.h (FIXME) */
+/* DEFINE_SHLGUID(IID_IExtractIconA,       0x000214EBL, 0, 0); */
+/* DEFINE_SHLGUID(IID_IExtractIconW,       0x000214FAL, 0, 0); */
+/* DEFINE_SHLGUID(IID_IContextMenu,        0x000214E4L, 0, 0); */
+/* DEFINE_SHLGUID(IID_IContextMenu2,       0x000214F4L, 0, 0); */
+/* DEFINE_SHLGUID(IID_ICommDlgBrowser,     0x000214F1L, 0, 0); */
 /* DEFINE_SHLGUID(IID_IShellBrowser,       0x000214E2L, 0, 0); */
 /* DEFINE_SHLGUID(IID_IShellView,          0x000214E3L, 0, 0); */
 /* DEFINE_SHLGUID(IID_IShellFolder,        0x000214E6L, 0, 0); */
@@ -103,4 +103,13 @@ DEFINE_GUID(CLSID_MyDocuments, 0x450d8fba, 0xad25, 0x11d0, 0x98, 0xa8, 0x08, 0x0
 
 DEFINE_GUID(IID_IQueryAssociations, 0xc46ca590, 0x3c3f, 0x11d2, 0xbe, 0xe6, 0x00, 0x00, 0xf8, 0x05, 0xca, 0x57);
 
+DEFINE_GUID(CLSID_DragDropHelper, 0x4657278a, 0x411b, 0x11d2, 0x83, 0x9a, 0x0, 0xc0, 0x4f, 0xd9, 0x18, 0xd0);
+
+#define PID_FINDDATA        0
+#define PID_NETRESOURCE     1
+#define PID_DESCRIPTIONID   2
+#define PID_WHICHFOLDER     3
+#define PID_NETWORKLOCATION 4
+#define PID_COMPUTERNAME    5
+
 #endif /* __WINE_SHLGUID_H */
diff --git a/include/shlobj.h b/include/shlobj.h
index 622359b4214..8f707b9c59c 100644
--- a/include/shlobj.h
+++ b/include/shlobj.h
@@ -39,13 +39,6 @@ BOOL WINAPI SHGetPathFromIDListW (LPCITEMIDLIST pidl,LPWSTR pszPath);
 #define     SHGetPathFromIDList WINELIB_NAME_AW(SHGetPathFromIDList)
 
 
-#include <wine/obj_shellfolder.h>
-#include <wine/obj_contextmenu.h>
-#include <wine/obj_extracticon.h>
-#include <wine/obj_commdlgbrowser.h>
-#include <wine/obj_dockingwindowframe.h>
-#include <wine/obj_dragdrophelper.h>
-
 /*****************************************************************************
  * Predeclare interfaces
  */
diff --git a/include/shobjidl.h b/include/shobjidl.h
index 129d871cb7c..9440fb25f9e 100644
--- a/include/shobjidl.h
+++ b/include/shobjidl.h
@@ -2744,6 +2744,1374 @@ void __RPC_STUB IShellExtInit_Initialize_Stub(
 
 #endif  /* __IShellExtInit_INTERFACE_DEFINED__ */
 
+#ifndef __IPersistFolder3_FWD_DEFINED__
+#define __IPersistFolder3_FWD_DEFINED__
+typedef struct IPersistFolder3 IPersistFolder3;
+#endif
+
+typedef struct {
+    LPITEMIDLIST pidlTargetFolder;
+    WCHAR szTargetParsingName[260];
+    WCHAR szNetworkProvider[260];
+    DWORD dwAttributes;
+    int csidl;
+} PERSIST_FOLDER_TARGET_INFO;
+
+/*****************************************************************************
+ * IPersistFolder3 interface
+ */
+#ifndef __IPersistFolder3_INTERFACE_DEFINED__
+#define __IPersistFolder3_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IPersistFolder3, 0xcef04fdf, 0xfe72, 0x11d2, 0x87,0xa5, 0x00,0xc0,0x4f,0x68,0x37,0xcf);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+struct IPersistFolder3 : public IPersistFolder2
+{
+    virtual HRESULT STDMETHODCALLTYPE InitializeEx(
+        IBindCtx* pbc,
+        LPCITEMIDLIST pidlRoot,
+        const PERSIST_FOLDER_TARGET_INFO* ppfti) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetFolderTargetInfo(
+        PERSIST_FOLDER_TARGET_INFO* ppfti) = 0;
+
+};
+#else
+typedef struct IPersistFolder3Vtbl IPersistFolder3Vtbl;
+struct IPersistFolder3 {
+    const IPersistFolder3Vtbl* lpVtbl;
+};
+struct IPersistFolder3Vtbl {
+    ICOM_MSVTABLE_COMPAT_FIELDS
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IPersistFolder3* This,
+        REFIID riid,
+        void** ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IPersistFolder3* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IPersistFolder3* This);
+
+    /*** IPersist methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetClassID)(
+        IPersistFolder3* This,
+        CLSID* pClassID);
+
+    /*** IPersistFolder methods ***/
+    HRESULT (STDMETHODCALLTYPE *Initialize)(
+        IPersistFolder3* This,
+        LPCITEMIDLIST pidl);
+
+    /*** IPersistFolder2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetCurFolder)(
+        IPersistFolder3* This,
+        LPITEMIDLIST* ppidl);
+
+    /*** IPersistFolder3 methods ***/
+    HRESULT (STDMETHODCALLTYPE *InitializeEx)(
+        IPersistFolder3* This,
+        IBindCtx* pbc,
+        LPCITEMIDLIST pidlRoot,
+        const PERSIST_FOLDER_TARGET_INFO* ppfti);
+
+    HRESULT (STDMETHODCALLTYPE *GetFolderTargetInfo)(
+        IPersistFolder3* This,
+        PERSIST_FOLDER_TARGET_INFO* ppfti);
+
+};
+
+/*** IUnknown methods ***/
+#define IPersistFolder3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IPersistFolder3_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IPersistFolder3_Release(p) (p)->lpVtbl->Release(p)
+/*** IPersist methods ***/
+#define IPersistFolder3_GetClassID(p,a) (p)->lpVtbl->GetClassID(p,a)
+/*** IPersistFolder methods ***/
+#define IPersistFolder3_Initialize(p,a) (p)->lpVtbl->Initialize(p,a)
+/*** IPersistFolder2 methods ***/
+#define IPersistFolder3_GetCurFolder(p,a) (p)->lpVtbl->GetCurFolder(p,a)
+/*** IPersistFolder3 methods ***/
+#define IPersistFolder3_InitializeEx(p,a,b,c) (p)->lpVtbl->InitializeEx(p,a,b,c)
+#define IPersistFolder3_GetFolderTargetInfo(p,a) (p)->lpVtbl->GetFolderTargetInfo(p,a)
+
+#endif
+
+#define IPersistFolder3_METHODS \
+    ICOM_MSVTABLE_COMPAT_FIELDS \
+    /*** IUnknown methods ***/ \
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
+    STDMETHOD_(ULONG,Release)(THIS) PURE; \
+    /*** IPersist methods ***/ \
+    STDMETHOD_(HRESULT,GetClassID)(THIS_ CLSID* pClassID) PURE; \
+    /*** IPersistFolder methods ***/ \
+    STDMETHOD_(HRESULT,Initialize)(THIS_ LPCITEMIDLIST pidl) PURE; \
+    /*** IPersistFolder2 methods ***/ \
+    STDMETHOD_(HRESULT,GetCurFolder)(THIS_ LPITEMIDLIST* ppidl) PURE; \
+    /*** IPersistFolder3 methods ***/ \
+    STDMETHOD_(HRESULT,InitializeEx)(THIS_ IBindCtx* pbc, LPCITEMIDLIST pidlRoot, const PERSIST_FOLDER_TARGET_INFO* ppfti) PURE; \
+    STDMETHOD_(HRESULT,GetFolderTargetInfo)(THIS_ PERSIST_FOLDER_TARGET_INFO* ppfti) PURE;
+
+HRESULT CALLBACK IPersistFolder3_InitializeEx_Proxy(
+    IPersistFolder3* This,
+    IBindCtx* pbc,
+    LPCITEMIDLIST pidlRoot,
+    const PERSIST_FOLDER_TARGET_INFO* ppfti);
+void __RPC_STUB IPersistFolder3_InitializeEx_Stub(
+    struct IRpcStubBuffer* This,
+    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT CALLBACK IPersistFolder3_GetFolderTargetInfo_Proxy(
+    IPersistFolder3* This,
+    PERSIST_FOLDER_TARGET_INFO* ppfti);
+void __RPC_STUB IPersistFolder3_GetFolderTargetInfo_Stub(
+    struct IRpcStubBuffer* This,
+    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IPersistFolder3_INTERFACE_DEFINED__ */
+
+#ifndef __IExtractIconA_FWD_DEFINED__
+#define __IExtractIconA_FWD_DEFINED__
+typedef struct IExtractIconA IExtractIconA;
+#endif
+
+#define GIL_OPENICON     0x0001
+#define GIL_FORSHELL     0x0002
+#define GIL_ASYNC        0x0020
+#define GIL_DEFAULTICON  0x0040
+#define GIL_FORSHORTCUT  0x0080
+#define GIL_SIMULATEDOC  0x0001
+#define GIL_PERINSTANCE  0x0002
+#define GIL_PERCLASS     0x0004
+#define GIL_NOTFILENAME  0x0008
+#define GIL_DONTCACHE    0x0010
+typedef IExtractIconA *LPEXTRACTICONA;
+
+/*****************************************************************************
+ * IExtractIconA interface
+ */
+#ifndef __IExtractIconA_INTERFACE_DEFINED__
+#define __IExtractIconA_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IExtractIconA, 0x000214eb, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+struct IExtractIconA : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetIconLocation(
+        UINT uFlags,
+        LPSTR szIconFile,
+        UINT cchMax,
+        INT* piIndex,
+        UINT* pwFlags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Extract(
+        LPCSTR pszFile,
+        UINT nIconIndex,
+        HICON* phiconLarge,
+        HICON* phiconSmall,
+        UINT nIconSize) = 0;
+
+};
+#else
+typedef struct IExtractIconAVtbl IExtractIconAVtbl;
+struct IExtractIconA {
+    const IExtractIconAVtbl* lpVtbl;
+};
+struct IExtractIconAVtbl {
+    ICOM_MSVTABLE_COMPAT_FIELDS
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IExtractIconA* This,
+        REFIID riid,
+        void** ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IExtractIconA* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IExtractIconA* This);
+
+    /*** IExtractIconA methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIconLocation)(
+        IExtractIconA* This,
+        UINT uFlags,
+        LPSTR szIconFile,
+        UINT cchMax,
+        INT* piIndex,
+        UINT* pwFlags);
+
+    HRESULT (STDMETHODCALLTYPE *Extract)(
+        IExtractIconA* This,
+        LPCSTR pszFile,
+        UINT nIconIndex,
+        HICON* phiconLarge,
+        HICON* phiconSmall,
+        UINT nIconSize);
+
+};
+
+/*** IUnknown methods ***/
+#define IExtractIconA_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IExtractIconA_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IExtractIconA_Release(p) (p)->lpVtbl->Release(p)
+/*** IExtractIconA methods ***/
+#define IExtractIconA_GetIconLocation(p,a,b,c,d,e) (p)->lpVtbl->GetIconLocation(p,a,b,c,d,e)
+#define IExtractIconA_Extract(p,a,b,c,d,e) (p)->lpVtbl->Extract(p,a,b,c,d,e)
+
+#endif
+
+#define IExtractIconA_METHODS \
+    ICOM_MSVTABLE_COMPAT_FIELDS \
+    /*** IUnknown methods ***/ \
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
+    STDMETHOD_(ULONG,Release)(THIS) PURE; \
+    /*** IExtractIconA methods ***/ \
+    STDMETHOD_(HRESULT,GetIconLocation)(THIS_ UINT uFlags, LPSTR szIconFile, UINT cchMax, INT* piIndex, UINT* pwFlags) PURE; \
+    STDMETHOD_(HRESULT,Extract)(THIS_ LPCSTR pszFile, UINT nIconIndex, HICON* phiconLarge, HICON* phiconSmall, UINT nIconSize) PURE;
+
+HRESULT CALLBACK IExtractIconA_GetIconLocation_Proxy(
+    IExtractIconA* This,
+    UINT uFlags,
+    LPSTR szIconFile,
+    UINT cchMax,
+    INT* piIndex,
+    UINT* pwFlags);
+void __RPC_STUB IExtractIconA_GetIconLocation_Stub(
+    struct IRpcStubBuffer* This,
+    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT CALLBACK IExtractIconA_Extract_Proxy(
+    IExtractIconA* This,
+    LPCSTR pszFile,
+    UINT nIconIndex,
+    HICON* phiconLarge,
+    HICON* phiconSmall,
+    UINT nIconSize);
+void __RPC_STUB IExtractIconA_Extract_Stub(
+    struct IRpcStubBuffer* This,
+    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IExtractIconA_INTERFACE_DEFINED__ */
+
+#ifndef __IExtractIconW_FWD_DEFINED__
+#define __IExtractIconW_FWD_DEFINED__
+typedef struct IExtractIconW IExtractIconW;
+#endif
+
+typedef IExtractIconW *LPEXTRACTICONW;
+
+/*****************************************************************************
+ * IExtractIconW interface
+ */
+#ifndef __IExtractIconW_INTERFACE_DEFINED__
+#define __IExtractIconW_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IExtractIconW, 0x000214fa, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+struct IExtractIconW : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetIconLocation(
+        UINT uFlags,
+        LPWSTR szIconFile,
+        UINT cchMax,
+        INT* piIndex,
+        UINT* pwFlags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Extract(
+        LPCWSTR pszFile,
+        UINT nIconIndex,
+        HICON* phiconLarge,
+        HICON* phiconSmall,
+        UINT nIconSize) = 0;
+
+};
+#else
+typedef struct IExtractIconWVtbl IExtractIconWVtbl;
+struct IExtractIconW {
+    const IExtractIconWVtbl* lpVtbl;
+};
+struct IExtractIconWVtbl {
+    ICOM_MSVTABLE_COMPAT_FIELDS
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IExtractIconW* This,
+        REFIID riid,
+        void** ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IExtractIconW* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IExtractIconW* This);
+
+    /*** IExtractIconW methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetIconLocation)(
+        IExtractIconW* This,
+        UINT uFlags,
+        LPWSTR szIconFile,
+        UINT cchMax,
+        INT* piIndex,
+        UINT* pwFlags);
+
+    HRESULT (STDMETHODCALLTYPE *Extract)(
+        IExtractIconW* This,
+        LPCWSTR pszFile,
+        UINT nIconIndex,
+        HICON* phiconLarge,
+        HICON* phiconSmall,
+        UINT nIconSize);
+
+};
+
+/*** IUnknown methods ***/
+#define IExtractIconW_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IExtractIconW_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IExtractIconW_Release(p) (p)->lpVtbl->Release(p)
+/*** IExtractIconW methods ***/
+#define IExtractIconW_GetIconLocation(p,a,b,c,d,e) (p)->lpVtbl->GetIconLocation(p,a,b,c,d,e)
+#define IExtractIconW_Extract(p,a,b,c,d,e) (p)->lpVtbl->Extract(p,a,b,c,d,e)
+
+#endif
+
+#define IExtractIconW_METHODS \
+    ICOM_MSVTABLE_COMPAT_FIELDS \
+    /*** IUnknown methods ***/ \
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
+    STDMETHOD_(ULONG,Release)(THIS) PURE; \
+    /*** IExtractIconW methods ***/ \
+    STDMETHOD_(HRESULT,GetIconLocation)(THIS_ UINT uFlags, LPWSTR szIconFile, UINT cchMax, INT* piIndex, UINT* pwFlags) PURE; \
+    STDMETHOD_(HRESULT,Extract)(THIS_ LPCWSTR pszFile, UINT nIconIndex, HICON* phiconLarge, HICON* phiconSmall, UINT nIconSize) PURE;
+
+HRESULT CALLBACK IExtractIconW_GetIconLocation_Proxy(
+    IExtractIconW* This,
+    UINT uFlags,
+    LPWSTR szIconFile,
+    UINT cchMax,
+    INT* piIndex,
+    UINT* pwFlags);
+void __RPC_STUB IExtractIconW_GetIconLocation_Stub(
+    struct IRpcStubBuffer* This,
+    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT CALLBACK IExtractIconW_Extract_Proxy(
+    IExtractIconW* This,
+    LPCWSTR pszFile,
+    UINT nIconIndex,
+    HICON* phiconLarge,
+    HICON* phiconSmall,
+    UINT nIconSize);
+void __RPC_STUB IExtractIconW_Extract_Stub(
+    struct IRpcStubBuffer* This,
+    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IExtractIconW_INTERFACE_DEFINED__ */
+
+#define LPEXTRACTICON WINELIB_NAME_AW(LPEXTRACTICON)
+#define IExtractIcon WINELIB_NAME_AW(IExtractIcon)
+#ifndef __ICommDlgBrowser_FWD_DEFINED__
+#define __ICommDlgBrowser_FWD_DEFINED__
+typedef struct ICommDlgBrowser ICommDlgBrowser;
+#endif
+
+#define CDBOSC_SETFOCUS     0x00000000
+#define CDBOSC_KILLFOCUS    0x00000001
+#define CDBOSC_SELCHANGE    0x00000002
+#define CDBOSC_RENAME       0x00000003
+#define CDBOSC_STATECHANGE  0x00000004
+typedef ICommDlgBrowser *LPCOMMDLGBROWSER;
+
+/*****************************************************************************
+ * ICommDlgBrowser interface
+ */
+#ifndef __ICommDlgBrowser_INTERFACE_DEFINED__
+#define __ICommDlgBrowser_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ICommDlgBrowser, 0x000214f1, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+struct ICommDlgBrowser : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE OnDefaultCommand(
+        IShellView* shv) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE OnStateChange(
+        IShellView* shv,
+        ULONG uChange) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE IncludeObject(
+        IShellView* shv,
+        LPCITEMIDLIST pidl) = 0;
+
+};
+#else
+typedef struct ICommDlgBrowserVtbl ICommDlgBrowserVtbl;
+struct ICommDlgBrowser {
+    const ICommDlgBrowserVtbl* lpVtbl;
+};
+struct ICommDlgBrowserVtbl {
+    ICOM_MSVTABLE_COMPAT_FIELDS
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ICommDlgBrowser* This,
+        REFIID riid,
+        void** ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ICommDlgBrowser* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ICommDlgBrowser* This);
+
+    /*** ICommDlgBrowser methods ***/
+    HRESULT (STDMETHODCALLTYPE *OnDefaultCommand)(
+        ICommDlgBrowser* This,
+        IShellView* shv);
+
+    HRESULT (STDMETHODCALLTYPE *OnStateChange)(
+        ICommDlgBrowser* This,
+        IShellView* shv,
+        ULONG uChange);
+
+    HRESULT (STDMETHODCALLTYPE *IncludeObject)(
+        ICommDlgBrowser* This,
+        IShellView* shv,
+        LPCITEMIDLIST pidl);
+
+};
+
+/*** IUnknown methods ***/
+#define ICommDlgBrowser_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define ICommDlgBrowser_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define ICommDlgBrowser_Release(p) (p)->lpVtbl->Release(p)
+/*** ICommDlgBrowser methods ***/
+#define ICommDlgBrowser_OnDefaultCommand(p,a) (p)->lpVtbl->OnDefaultCommand(p,a)
+#define ICommDlgBrowser_OnStateChange(p,a,b) (p)->lpVtbl->OnStateChange(p,a,b)
+#define ICommDlgBrowser_IncludeObject(p,a,b) (p)->lpVtbl->IncludeObject(p,a,b)
+
+#endif
+
+#define ICommDlgBrowser_METHODS \
+    ICOM_MSVTABLE_COMPAT_FIELDS \
+    /*** IUnknown methods ***/ \
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
+    STDMETHOD_(ULONG,Release)(THIS) PURE; \
+    /*** ICommDlgBrowser methods ***/ \
+    STDMETHOD_(HRESULT,OnDefaultCommand)(THIS_ IShellView* shv) PURE; \
+    STDMETHOD_(HRESULT,OnStateChange)(THIS_ IShellView* shv, ULONG uChange) PURE; \
+    STDMETHOD_(HRESULT,IncludeObject)(THIS_ IShellView* shv, LPCITEMIDLIST pidl) PURE;
+
+HRESULT CALLBACK ICommDlgBrowser_OnDefaultCommand_Proxy(
+    ICommDlgBrowser* This,
+    IShellView* shv);
+void __RPC_STUB ICommDlgBrowser_OnDefaultCommand_Stub(
+    struct IRpcStubBuffer* This,
+    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT CALLBACK ICommDlgBrowser_OnStateChange_Proxy(
+    ICommDlgBrowser* This,
+    IShellView* shv,
+    ULONG uChange);
+void __RPC_STUB ICommDlgBrowser_OnStateChange_Stub(
+    struct IRpcStubBuffer* This,
+    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT CALLBACK ICommDlgBrowser_IncludeObject_Proxy(
+    ICommDlgBrowser* This,
+    IShellView* shv,
+    LPCITEMIDLIST pidl);
+void __RPC_STUB ICommDlgBrowser_IncludeObject_Stub(
+    struct IRpcStubBuffer* This,
+    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __ICommDlgBrowser_INTERFACE_DEFINED__ */
+
+#ifndef __IDockingWindowFrame_FWD_DEFINED__
+#define __IDockingWindowFrame_FWD_DEFINED__
+typedef struct IDockingWindowFrame IDockingWindowFrame;
+#endif
+
+#define DWFRF_NORMAL           0x0000
+#define DWFRF_DELETECONFIGDATA 0x0001
+#define DWFAF_HIDDEN           0x0001
+/*****************************************************************************
+ * IDockingWindowFrame interface
+ */
+#ifndef __IDockingWindowFrame_INTERFACE_DEFINED__
+#define __IDockingWindowFrame_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDockingWindowFrame, 0x47d2657a, 0x7b27, 0x11d0, 0x8c,0xa9, 0x00,0xa0,0xc9,0x2d,0xbf,0xe8);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+struct IDockingWindowFrame : public IOleWindow
+{
+    virtual HRESULT STDMETHODCALLTYPE AddToolbar(
+        IUnknown* punkSrc,
+        LPCWSTR pwszItem,
+        DWORD dwAddFlags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE RemoveToolbar(
+        IUnknown* punkSrc,
+        DWORD dwRemoveFlags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE FindToolbar(
+        LPCWSTR pwszItem,
+        REFIID riid,
+        LPVOID* ppvObj) = 0;
+
+};
+#else
+typedef struct IDockingWindowFrameVtbl IDockingWindowFrameVtbl;
+struct IDockingWindowFrame {
+    const IDockingWindowFrameVtbl* lpVtbl;
+};
+struct IDockingWindowFrameVtbl {
+    ICOM_MSVTABLE_COMPAT_FIELDS
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDockingWindowFrame* This,
+        REFIID riid,
+        void** ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDockingWindowFrame* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDockingWindowFrame* This);
+
+    /*** IOleWindow methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetWindow)(
+        IDockingWindowFrame* This,
+        HWND* phwnd);
+
+    HRESULT (STDMETHODCALLTYPE *ContextSensitiveHelp)(
+        IDockingWindowFrame* This,
+        BOOL fEnterMode);
+
+    /*** IDockingWindowFrame methods ***/
+    HRESULT (STDMETHODCALLTYPE *AddToolbar)(
+        IDockingWindowFrame* This,
+        IUnknown* punkSrc,
+        LPCWSTR pwszItem,
+        DWORD dwAddFlags);
+
+    HRESULT (STDMETHODCALLTYPE *RemoveToolbar)(
+        IDockingWindowFrame* This,
+        IUnknown* punkSrc,
+        DWORD dwRemoveFlags);
+
+    HRESULT (STDMETHODCALLTYPE *FindToolbar)(
+        IDockingWindowFrame* This,
+        LPCWSTR pwszItem,
+        REFIID riid,
+        LPVOID* ppvObj);
+
+};
+
+/*** IUnknown methods ***/
+#define IDockingWindowFrame_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDockingWindowFrame_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDockingWindowFrame_Release(p) (p)->lpVtbl->Release(p)
+/*** IOleWindow methods ***/
+#define IDockingWindowFrame_GetWindow(p,a) (p)->lpVtbl->GetWindow(p,a)
+#define IDockingWindowFrame_ContextSensitiveHelp(p,a) (p)->lpVtbl->ContextSensitiveHelp(p,a)
+/*** IDockingWindowFrame methods ***/
+#define IDockingWindowFrame_AddToolbar(p,a,b,c) (p)->lpVtbl->AddToolbar(p,a,b,c)
+#define IDockingWindowFrame_RemoveToolbar(p,a,b) (p)->lpVtbl->RemoveToolbar(p,a,b)
+#define IDockingWindowFrame_FindToolbar(p,a,b,c) (p)->lpVtbl->FindToolbar(p,a,b,c)
+
+#endif
+
+#define IDockingWindowFrame_METHODS \
+    ICOM_MSVTABLE_COMPAT_FIELDS \
+    /*** IUnknown methods ***/ \
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
+    STDMETHOD_(ULONG,Release)(THIS) PURE; \
+    /*** IOleWindow methods ***/ \
+    STDMETHOD_(HRESULT,GetWindow)(THIS_ HWND* phwnd) PURE; \
+    STDMETHOD_(HRESULT,ContextSensitiveHelp)(THIS_ BOOL fEnterMode) PURE; \
+    /*** IDockingWindowFrame methods ***/ \
+    STDMETHOD_(HRESULT,AddToolbar)(THIS_ IUnknown* punkSrc, LPCWSTR pwszItem, DWORD dwAddFlags) PURE; \
+    STDMETHOD_(HRESULT,RemoveToolbar)(THIS_ IUnknown* punkSrc, DWORD dwRemoveFlags) PURE; \
+    STDMETHOD_(HRESULT,FindToolbar)(THIS_ LPCWSTR pwszItem, REFIID riid, LPVOID* ppvObj) PURE;
+
+HRESULT CALLBACK IDockingWindowFrame_AddToolbar_Proxy(
+    IDockingWindowFrame* This,
+    IUnknown* punkSrc,
+    LPCWSTR pwszItem,
+    DWORD dwAddFlags);
+void __RPC_STUB IDockingWindowFrame_AddToolbar_Stub(
+    struct IRpcStubBuffer* This,
+    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT CALLBACK IDockingWindowFrame_RemoveToolbar_Proxy(
+    IDockingWindowFrame* This,
+    IUnknown* punkSrc,
+    DWORD dwRemoveFlags);
+void __RPC_STUB IDockingWindowFrame_RemoveToolbar_Stub(
+    struct IRpcStubBuffer* This,
+    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT CALLBACK IDockingWindowFrame_FindToolbar_Proxy(
+    IDockingWindowFrame* This,
+    LPCWSTR pwszItem,
+    REFIID riid,
+    LPVOID* ppvObj);
+void __RPC_STUB IDockingWindowFrame_FindToolbar_Stub(
+    struct IRpcStubBuffer* This,
+    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IDockingWindowFrame_INTERFACE_DEFINED__ */
+
+#ifndef __IDragSourceHelper_FWD_DEFINED__
+#define __IDragSourceHelper_FWD_DEFINED__
+typedef struct IDragSourceHelper IDragSourceHelper;
+#endif
+
+typedef struct {
+    SIZE sizeDragImage;
+    POINT ptOffset;
+    HBITMAP hbmpDragImage;
+    COLORREF crColorKey;
+} SHDRAGIMAGE, *LPSHDRAGIMAGE;
+
+/*****************************************************************************
+ * IDragSourceHelper interface
+ */
+#ifndef __IDragSourceHelper_INTERFACE_DEFINED__
+#define __IDragSourceHelper_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDragSourceHelper, 0xde5bf786, 0x477a, 0x11d2, 0x83,0x9d, 0x00,0xc0,0x4f,0xd9,0x18,0xd0);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+struct IDragSourceHelper : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE InitializeFromBitmap(
+        LPSHDRAGIMAGE pshdi,
+        IDataObject* pDataObject) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE InitializeFromWindow(
+        HWND hwnd,
+        POINT* ppt,
+        IDataObject* pDataObject) = 0;
+
+};
+#else
+typedef struct IDragSourceHelperVtbl IDragSourceHelperVtbl;
+struct IDragSourceHelper {
+    const IDragSourceHelperVtbl* lpVtbl;
+};
+struct IDragSourceHelperVtbl {
+    ICOM_MSVTABLE_COMPAT_FIELDS
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDragSourceHelper* This,
+        REFIID riid,
+        void** ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDragSourceHelper* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDragSourceHelper* This);
+
+    /*** IDragSourceHelper methods ***/
+    HRESULT (STDMETHODCALLTYPE *InitializeFromBitmap)(
+        IDragSourceHelper* This,
+        LPSHDRAGIMAGE pshdi,
+        IDataObject* pDataObject);
+
+    HRESULT (STDMETHODCALLTYPE *InitializeFromWindow)(
+        IDragSourceHelper* This,
+        HWND hwnd,
+        POINT* ppt,
+        IDataObject* pDataObject);
+
+};
+
+/*** IUnknown methods ***/
+#define IDragSourceHelper_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDragSourceHelper_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDragSourceHelper_Release(p) (p)->lpVtbl->Release(p)
+/*** IDragSourceHelper methods ***/
+#define IDragSourceHelper_InitializeFromBitmap(p,a,b) (p)->lpVtbl->InitializeFromBitmap(p,a,b)
+#define IDragSourceHelper_InitializeFromWindow(p,a,b,c) (p)->lpVtbl->InitializeFromWindow(p,a,b,c)
+
+#endif
+
+#define IDragSourceHelper_METHODS \
+    ICOM_MSVTABLE_COMPAT_FIELDS \
+    /*** IUnknown methods ***/ \
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
+    STDMETHOD_(ULONG,Release)(THIS) PURE; \
+    /*** IDragSourceHelper methods ***/ \
+    STDMETHOD_(HRESULT,InitializeFromBitmap)(THIS_ LPSHDRAGIMAGE pshdi, IDataObject* pDataObject) PURE; \
+    STDMETHOD_(HRESULT,InitializeFromWindow)(THIS_ HWND hwnd, POINT* ppt, IDataObject* pDataObject) PURE;
+
+HRESULT CALLBACK IDragSourceHelper_InitializeFromBitmap_Proxy(
+    IDragSourceHelper* This,
+    LPSHDRAGIMAGE pshdi,
+    IDataObject* pDataObject);
+void __RPC_STUB IDragSourceHelper_InitializeFromBitmap_Stub(
+    struct IRpcStubBuffer* This,
+    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT CALLBACK IDragSourceHelper_InitializeFromWindow_Proxy(
+    IDragSourceHelper* This,
+    HWND hwnd,
+    POINT* ppt,
+    IDataObject* pDataObject);
+void __RPC_STUB IDragSourceHelper_InitializeFromWindow_Stub(
+    struct IRpcStubBuffer* This,
+    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IDragSourceHelper_INTERFACE_DEFINED__ */
+
+#ifndef __IDropTargetHelper_FWD_DEFINED__
+#define __IDropTargetHelper_FWD_DEFINED__
+typedef struct IDropTargetHelper IDropTargetHelper;
+#endif
+
+/*****************************************************************************
+ * IDropTargetHelper interface
+ */
+#ifndef __IDropTargetHelper_INTERFACE_DEFINED__
+#define __IDropTargetHelper_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDropTargetHelper, 0x4657278b, 0x411b, 0x11d2, 0x83,0x9a, 0x00,0xc0,0x4f,0xd9,0x18,0xd0);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+struct IDropTargetHelper : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE DragEnter(
+        HWND hwndTarget,
+        IDataObject* pDataObject,
+        POINT* ppt,
+        DWORD dwEffect) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DragLeave(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE DragOver(
+        POINT* ppt,
+        DWORD dwEffect) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Drop(
+        IDataObject* pDataObject,
+        POINT* ppt,
+        DWORD dwEffect) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Show(
+        BOOL fShow) = 0;
+
+};
+#else
+typedef struct IDropTargetHelperVtbl IDropTargetHelperVtbl;
+struct IDropTargetHelper {
+    const IDropTargetHelperVtbl* lpVtbl;
+};
+struct IDropTargetHelperVtbl {
+    ICOM_MSVTABLE_COMPAT_FIELDS
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IDropTargetHelper* This,
+        REFIID riid,
+        void** ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IDropTargetHelper* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IDropTargetHelper* This);
+
+    /*** IDropTargetHelper methods ***/
+    HRESULT (STDMETHODCALLTYPE *DragEnter)(
+        IDropTargetHelper* This,
+        HWND hwndTarget,
+        IDataObject* pDataObject,
+        POINT* ppt,
+        DWORD dwEffect);
+
+    HRESULT (STDMETHODCALLTYPE *DragLeave)(
+        IDropTargetHelper* This);
+
+    HRESULT (STDMETHODCALLTYPE *DragOver)(
+        IDropTargetHelper* This,
+        POINT* ppt,
+        DWORD dwEffect);
+
+    HRESULT (STDMETHODCALLTYPE *Drop)(
+        IDropTargetHelper* This,
+        IDataObject* pDataObject,
+        POINT* ppt,
+        DWORD dwEffect);
+
+    HRESULT (STDMETHODCALLTYPE *Show)(
+        IDropTargetHelper* This,
+        BOOL fShow);
+
+};
+
+/*** IUnknown methods ***/
+#define IDropTargetHelper_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDropTargetHelper_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDropTargetHelper_Release(p) (p)->lpVtbl->Release(p)
+/*** IDropTargetHelper methods ***/
+#define IDropTargetHelper_DragEnter(p,a,b,c,d) (p)->lpVtbl->DragEnter(p,a,b,c,d)
+#define IDropTargetHelper_DragLeave(p) (p)->lpVtbl->DragLeave(p)
+#define IDropTargetHelper_DragOver(p,a,b) (p)->lpVtbl->DragOver(p,a,b)
+#define IDropTargetHelper_Drop(p,a,b,c) (p)->lpVtbl->Drop(p,a,b,c)
+#define IDropTargetHelper_Show(p,a) (p)->lpVtbl->Show(p,a)
+
+#endif
+
+#define IDropTargetHelper_METHODS \
+    ICOM_MSVTABLE_COMPAT_FIELDS \
+    /*** IUnknown methods ***/ \
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
+    STDMETHOD_(ULONG,Release)(THIS) PURE; \
+    /*** IDropTargetHelper methods ***/ \
+    STDMETHOD_(HRESULT,DragEnter)(THIS_ HWND hwndTarget, IDataObject* pDataObject, POINT* ppt, DWORD dwEffect) PURE; \
+    STDMETHOD_(HRESULT,DragLeave)(THIS) PURE; \
+    STDMETHOD_(HRESULT,DragOver)(THIS_ POINT* ppt, DWORD dwEffect) PURE; \
+    STDMETHOD_(HRESULT,Drop)(THIS_ IDataObject* pDataObject, POINT* ppt, DWORD dwEffect) PURE; \
+    STDMETHOD_(HRESULT,Show)(THIS_ BOOL fShow) PURE;
+
+HRESULT CALLBACK IDropTargetHelper_DragEnter_Proxy(
+    IDropTargetHelper* This,
+    HWND hwndTarget,
+    IDataObject* pDataObject,
+    POINT* ppt,
+    DWORD dwEffect);
+void __RPC_STUB IDropTargetHelper_DragEnter_Stub(
+    struct IRpcStubBuffer* This,
+    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT CALLBACK IDropTargetHelper_DragLeave_Proxy(
+    IDropTargetHelper* This);
+void __RPC_STUB IDropTargetHelper_DragLeave_Stub(
+    struct IRpcStubBuffer* This,
+    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT CALLBACK IDropTargetHelper_DragOver_Proxy(
+    IDropTargetHelper* This,
+    POINT* ppt,
+    DWORD dwEffect);
+void __RPC_STUB IDropTargetHelper_DragOver_Stub(
+    struct IRpcStubBuffer* This,
+    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT CALLBACK IDropTargetHelper_Drop_Proxy(
+    IDropTargetHelper* This,
+    IDataObject* pDataObject,
+    POINT* ppt,
+    DWORD dwEffect);
+void __RPC_STUB IDropTargetHelper_Drop_Stub(
+    struct IRpcStubBuffer* This,
+    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT CALLBACK IDropTargetHelper_Show_Proxy(
+    IDropTargetHelper* This,
+    BOOL fShow);
+void __RPC_STUB IDropTargetHelper_Show_Stub(
+    struct IRpcStubBuffer* This,
+    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IDropTargetHelper_INTERFACE_DEFINED__ */
+
+#ifndef __IContextMenu_FWD_DEFINED__
+#define __IContextMenu_FWD_DEFINED__
+typedef struct IContextMenu IContextMenu;
+#endif
+
+#define CMF_NORMAL        0x00000000
+#define CMF_DEFAULTONLY   0x00000001
+#define CMF_VERBSONLY     0x00000002
+#define CMF_EXPLORE       0x00000004
+#define CMF_NOVERBS       0x00000008
+#define CMF_CANRENAME     0x00000010
+#define CMF_NODEFAULT     0x00000020
+#define CMF_INCLUDESTATIC 0x00000040
+#define CMF_EXTENDEDVERBS 0x00000100
+#define CMF_RESERVED      0xffff0000
+#define GCS_VERBA         0x00000000
+#define GCS_HELPTEXTA     0x00000001
+#define GCS_VALIDATEA     0x00000002
+#define GCS_VERBW         0x00000004
+#define GCS_HELPTEXTW     0x00000005
+#define GCS_VALIDATEW     0x00000006
+#define GCS_UNICODE       0x00000004
+#define GCS_VERB          WINELIB_NAME_AW(GCS_VERB)
+#define GCS_HELPTEXT      WINELIB_NAME_AW(GCS_HELPTEXT)
+#define GCS_VALIDATE      WINELIB_NAME_AW(GCS_VALIDATE)
+#define CMDSTR_NEWFOLDERA   "NewFolder"
+#define CMDSTR_VIEWLISTA    "ViewList"
+#define CMDSTR_VIEWDETAILSA "ViewDetails"
+#if defined(__GNUC__)
+# define CMDSTR_NEWFOLDERW (const WCHAR []){ 'N','e','w','F','o','l','d','e','r',0 }
+# define CMDSTR_VIEWLISTW (const WCHAR []){ 'V','i','e','w','L','i','s','t',0 }
+# define CMDSTR_VIEWDETAILSW (const WCHAR []){ 'V','i','e','w','D','e','t','a','i','l','s',0 }
+#elif defined(_MSC_VER)
+# define CMDSTR_NEWFOLDERW   L"NewFolder"
+# define CMDSTR_VIEWLISTW    L"ViewList"
+# define CMDSTR_VIEWDETAILSW L"ViewDetails"
+#else
+static const WCHAR CMDSTR_NEWFOLDERW[] = {'N','e','w','F','o','l','d','e','r',0};
+static const WCHAR CMDSTR_VIEWLISTW [] = {'V','i','e','w','L','i','s','t',0};
+static const WCHAR CMDSTR_VIEWDETAILSW[] = {'V','i','e','w','D','e','t','a','i','l','s',0};
+#endif
+#define CMDSTR_NEWFOLDER    WINELIB_NAME_AW(CMDSTR_NEWFOLDER)
+#define CMDSTR_VIEWLIST     WINELIB_NAME_AW(CMDSTR_VIEWLIST)
+#define CMDSTR_VIEWDETAILS  WINELIB_NAME_AW(CMDSTR_VIEWDETAILS)
+#define CMIC_MASK_HOTKEY         SEE_MASK_HOTKEY
+#define CMIC_MASK_ICON           SEE_MASK_ICON
+#define CMIC_MASK_FLAG_NO_UI     SEE_MASK_FLAG_NO_UI
+#define CMIC_MASK_UNICODE        SEE_MASK_UNICODE
+#define CMIC_MASK_NO_CONSOLE     SEE_MASK_NO_CONSOLE
+#define CMIC_MASK_HASLINKNAME    SEE_MASK_HASLINKNAME
+#define CMIC_MASK_FLAG_SEP_VDM   SEE_MASK_FLAG_SEPVDM
+#define CMIC_MASK_HASTITLE       SEE_MASK_HASTITLE
+#define CMIC_MASK_ASYNCOK        SEE_MASK_ASYNCOK
+#define CMIC_MASK_SHIFT_DOWN     0x10000000
+#define CMIC_MASK_PTINVOKE       0x20000000
+#define CMIC_MASK_CONTROL_DOWN   0x40000000
+#define CMIC_MASK_FLAG_LOG_USAGE SEE_MASK_FLAG_LOG_USAGE
+#define CMIC_MASK_NOZONECHECKS   SEE_MASK_NOZONECHECKS
+typedef IContextMenu *LPCONTEXTMENU;
+
+typedef struct tagCMINVOKECOMMANDINFO {
+    DWORD cbSize;
+    DWORD fMask;
+    HWND hwnd;
+    LPCSTR lpVerb;
+    LPCSTR lpParameters;
+    LPCSTR lpDirectory;
+    INT nShow;
+    DWORD dwHotKey;
+    HANDLE hIcon;
+} CMINVOKECOMMANDINFO, *LPCMINVOKECOMMANDINFO;
+
+typedef struct tagCMInvokeCommandInfoEx {
+    DWORD cbSize;
+    DWORD fMask;
+    HWND hwnd;
+    LPCSTR lpVerb;
+    LPCSTR lpParameters;
+    LPCSTR lpDirectory;
+    INT nShow;
+    DWORD dwHotKey;
+    HANDLE hIcon;
+    LPCSTR lpTitle;
+    LPCWSTR lpVerbW;
+    LPCWSTR lpParametersW;
+    LPCWSTR lpDirectoryW;
+    LPCWSTR lpTitleW;
+    POINT ptInvoke;
+} CMINVOKECOMMANDINFOEX, *LPCMINVOKECOMMANDINFOEX;
+
+/*****************************************************************************
+ * IContextMenu interface
+ */
+#ifndef __IContextMenu_INTERFACE_DEFINED__
+#define __IContextMenu_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IContextMenu, 0x000214e4, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+struct IContextMenu : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE QueryContextMenu(
+        HMENU hmenu,
+        UINT indexMenu,
+        UINT idCmdFirst,
+        UINT idCmdLast,
+        UINT uFlags) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE InvokeCommand(
+        LPCMINVOKECOMMANDINFO lpici) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetCommandString(
+        UINT idCmd,
+        UINT uType,
+        UINT* pwReserved,
+        LPSTR pszName,
+        UINT cchMax) = 0;
+
+};
+#else
+typedef struct IContextMenuVtbl IContextMenuVtbl;
+struct IContextMenu {
+    const IContextMenuVtbl* lpVtbl;
+};
+struct IContextMenuVtbl {
+    ICOM_MSVTABLE_COMPAT_FIELDS
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IContextMenu* This,
+        REFIID riid,
+        void** ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IContextMenu* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IContextMenu* This);
+
+    /*** IContextMenu methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryContextMenu)(
+        IContextMenu* This,
+        HMENU hmenu,
+        UINT indexMenu,
+        UINT idCmdFirst,
+        UINT idCmdLast,
+        UINT uFlags);
+
+    HRESULT (STDMETHODCALLTYPE *InvokeCommand)(
+        IContextMenu* This,
+        LPCMINVOKECOMMANDINFO lpici);
+
+    HRESULT (STDMETHODCALLTYPE *GetCommandString)(
+        IContextMenu* This,
+        UINT idCmd,
+        UINT uType,
+        UINT* pwReserved,
+        LPSTR pszName,
+        UINT cchMax);
+
+};
+
+/*** IUnknown methods ***/
+#define IContextMenu_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IContextMenu_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IContextMenu_Release(p) (p)->lpVtbl->Release(p)
+/*** IContextMenu methods ***/
+#define IContextMenu_QueryContextMenu(p,a,b,c,d,e) (p)->lpVtbl->QueryContextMenu(p,a,b,c,d,e)
+#define IContextMenu_InvokeCommand(p,a) (p)->lpVtbl->InvokeCommand(p,a)
+#define IContextMenu_GetCommandString(p,a,b,c,d,e) (p)->lpVtbl->GetCommandString(p,a,b,c,d,e)
+
+#endif
+
+#define IContextMenu_METHODS \
+    ICOM_MSVTABLE_COMPAT_FIELDS \
+    /*** IUnknown methods ***/ \
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
+    STDMETHOD_(ULONG,Release)(THIS) PURE; \
+    /*** IContextMenu methods ***/ \
+    STDMETHOD_(HRESULT,QueryContextMenu)(THIS_ HMENU hmenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags) PURE; \
+    STDMETHOD_(HRESULT,InvokeCommand)(THIS_ LPCMINVOKECOMMANDINFO lpici) PURE; \
+    STDMETHOD_(HRESULT,GetCommandString)(THIS_ UINT idCmd, UINT uType, UINT* pwReserved, LPSTR pszName, UINT cchMax) PURE;
+
+HRESULT CALLBACK IContextMenu_QueryContextMenu_Proxy(
+    IContextMenu* This,
+    HMENU hmenu,
+    UINT indexMenu,
+    UINT idCmdFirst,
+    UINT idCmdLast,
+    UINT uFlags);
+void __RPC_STUB IContextMenu_QueryContextMenu_Stub(
+    struct IRpcStubBuffer* This,
+    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT CALLBACK IContextMenu_InvokeCommand_Proxy(
+    IContextMenu* This,
+    LPCMINVOKECOMMANDINFO lpici);
+void __RPC_STUB IContextMenu_InvokeCommand_Stub(
+    struct IRpcStubBuffer* This,
+    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+HRESULT CALLBACK IContextMenu_GetCommandString_Proxy(
+    IContextMenu* This,
+    UINT idCmd,
+    UINT uType,
+    UINT* pwReserved,
+    LPSTR pszName,
+    UINT cchMax);
+void __RPC_STUB IContextMenu_GetCommandString_Stub(
+    struct IRpcStubBuffer* This,
+    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IContextMenu_INTERFACE_DEFINED__ */
+
+#ifndef __IContextMenu2_FWD_DEFINED__
+#define __IContextMenu2_FWD_DEFINED__
+typedef struct IContextMenu2 IContextMenu2;
+#endif
+
+typedef IContextMenu2 *LPCONTEXTMENU2;
+
+/*****************************************************************************
+ * IContextMenu2 interface
+ */
+#ifndef __IContextMenu2_INTERFACE_DEFINED__
+#define __IContextMenu2_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IContextMenu2, 0x000214f4, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+struct IContextMenu2 : public IContextMenu
+{
+    virtual HRESULT STDMETHODCALLTYPE HandleMenuMsg(
+        UINT uMsg,
+        WPARAM wParam,
+        LPARAM lParam) = 0;
+
+};
+#else
+typedef struct IContextMenu2Vtbl IContextMenu2Vtbl;
+struct IContextMenu2 {
+    const IContextMenu2Vtbl* lpVtbl;
+};
+struct IContextMenu2Vtbl {
+    ICOM_MSVTABLE_COMPAT_FIELDS
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IContextMenu2* This,
+        REFIID riid,
+        void** ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IContextMenu2* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IContextMenu2* This);
+
+    /*** IContextMenu methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryContextMenu)(
+        IContextMenu2* This,
+        HMENU hmenu,
+        UINT indexMenu,
+        UINT idCmdFirst,
+        UINT idCmdLast,
+        UINT uFlags);
+
+    HRESULT (STDMETHODCALLTYPE *InvokeCommand)(
+        IContextMenu2* This,
+        LPCMINVOKECOMMANDINFO lpici);
+
+    HRESULT (STDMETHODCALLTYPE *GetCommandString)(
+        IContextMenu2* This,
+        UINT idCmd,
+        UINT uType,
+        UINT* pwReserved,
+        LPSTR pszName,
+        UINT cchMax);
+
+    /*** IContextMenu2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *HandleMenuMsg)(
+        IContextMenu2* This,
+        UINT uMsg,
+        WPARAM wParam,
+        LPARAM lParam);
+
+};
+
+/*** IUnknown methods ***/
+#define IContextMenu2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IContextMenu2_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IContextMenu2_Release(p) (p)->lpVtbl->Release(p)
+/*** IContextMenu methods ***/
+#define IContextMenu2_QueryContextMenu(p,a,b,c,d,e) (p)->lpVtbl->QueryContextMenu(p,a,b,c,d,e)
+#define IContextMenu2_InvokeCommand(p,a) (p)->lpVtbl->InvokeCommand(p,a)
+#define IContextMenu2_GetCommandString(p,a,b,c,d,e) (p)->lpVtbl->GetCommandString(p,a,b,c,d,e)
+/*** IContextMenu2 methods ***/
+#define IContextMenu2_HandleMenuMsg(p,a,b,c) (p)->lpVtbl->HandleMenuMsg(p,a,b,c)
+
+#endif
+
+#define IContextMenu2_METHODS \
+    ICOM_MSVTABLE_COMPAT_FIELDS \
+    /*** IUnknown methods ***/ \
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
+    STDMETHOD_(ULONG,Release)(THIS) PURE; \
+    /*** IContextMenu methods ***/ \
+    STDMETHOD_(HRESULT,QueryContextMenu)(THIS_ HMENU hmenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags) PURE; \
+    STDMETHOD_(HRESULT,InvokeCommand)(THIS_ LPCMINVOKECOMMANDINFO lpici) PURE; \
+    STDMETHOD_(HRESULT,GetCommandString)(THIS_ UINT idCmd, UINT uType, UINT* pwReserved, LPSTR pszName, UINT cchMax) PURE; \
+    /*** IContextMenu2 methods ***/ \
+    STDMETHOD_(HRESULT,HandleMenuMsg)(THIS_ UINT uMsg, WPARAM wParam, LPARAM lParam) PURE;
+
+HRESULT CALLBACK IContextMenu2_HandleMenuMsg_Proxy(
+    IContextMenu2* This,
+    UINT uMsg,
+    WPARAM wParam,
+    LPARAM lParam);
+void __RPC_STUB IContextMenu2_HandleMenuMsg_Stub(
+    struct IRpcStubBuffer* This,
+    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IContextMenu2_INTERFACE_DEFINED__ */
+
+#ifndef __IContextMenu3_FWD_DEFINED__
+#define __IContextMenu3_FWD_DEFINED__
+typedef struct IContextMenu3 IContextMenu3;
+#endif
+
+typedef IContextMenu3 *LPCONTEXTMENU3;
+
+/*****************************************************************************
+ * IContextMenu3 interface
+ */
+#ifndef __IContextMenu3_INTERFACE_DEFINED__
+#define __IContextMenu3_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IContextMenu3, 0xbcfce0a0, 0xec17, 0x11d0, 0x8d,0x10, 0x00,0xa0,0xc9,0x0f,0x27,0x19);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+struct IContextMenu3 : public IContextMenu2
+{
+    virtual HRESULT STDMETHODCALLTYPE HandleMenuMsg2(
+        UINT uMsg,
+        WPARAM wParam,
+        LPARAM lParam,
+        LRESULT* plResult) = 0;
+
+};
+#else
+typedef struct IContextMenu3Vtbl IContextMenu3Vtbl;
+struct IContextMenu3 {
+    const IContextMenu3Vtbl* lpVtbl;
+};
+struct IContextMenu3Vtbl {
+    ICOM_MSVTABLE_COMPAT_FIELDS
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IContextMenu3* This,
+        REFIID riid,
+        void** ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IContextMenu3* This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IContextMenu3* This);
+
+    /*** IContextMenu methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryContextMenu)(
+        IContextMenu3* This,
+        HMENU hmenu,
+        UINT indexMenu,
+        UINT idCmdFirst,
+        UINT idCmdLast,
+        UINT uFlags);
+
+    HRESULT (STDMETHODCALLTYPE *InvokeCommand)(
+        IContextMenu3* This,
+        LPCMINVOKECOMMANDINFO lpici);
+
+    HRESULT (STDMETHODCALLTYPE *GetCommandString)(
+        IContextMenu3* This,
+        UINT idCmd,
+        UINT uType,
+        UINT* pwReserved,
+        LPSTR pszName,
+        UINT cchMax);
+
+    /*** IContextMenu2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *HandleMenuMsg)(
+        IContextMenu3* This,
+        UINT uMsg,
+        WPARAM wParam,
+        LPARAM lParam);
+
+    /*** IContextMenu3 methods ***/
+    HRESULT (STDMETHODCALLTYPE *HandleMenuMsg2)(
+        IContextMenu3* This,
+        UINT uMsg,
+        WPARAM wParam,
+        LPARAM lParam,
+        LRESULT* plResult);
+
+};
+
+/*** IUnknown methods ***/
+#define IContextMenu3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IContextMenu3_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IContextMenu3_Release(p) (p)->lpVtbl->Release(p)
+/*** IContextMenu methods ***/
+#define IContextMenu3_QueryContextMenu(p,a,b,c,d,e) (p)->lpVtbl->QueryContextMenu(p,a,b,c,d,e)
+#define IContextMenu3_InvokeCommand(p,a) (p)->lpVtbl->InvokeCommand(p,a)
+#define IContextMenu3_GetCommandString(p,a,b,c,d,e) (p)->lpVtbl->GetCommandString(p,a,b,c,d,e)
+/*** IContextMenu2 methods ***/
+#define IContextMenu3_HandleMenuMsg(p,a,b,c) (p)->lpVtbl->HandleMenuMsg(p,a,b,c)
+/*** IContextMenu3 methods ***/
+#define IContextMenu3_HandleMenuMsg2(p,a,b,c,d) (p)->lpVtbl->HandleMenuMsg2(p,a,b,c,d)
+
+#endif
+
+#define IContextMenu3_METHODS \
+    ICOM_MSVTABLE_COMPAT_FIELDS \
+    /*** IUnknown methods ***/ \
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
+    STDMETHOD_(ULONG,Release)(THIS) PURE; \
+    /*** IContextMenu methods ***/ \
+    STDMETHOD_(HRESULT,QueryContextMenu)(THIS_ HMENU hmenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags) PURE; \
+    STDMETHOD_(HRESULT,InvokeCommand)(THIS_ LPCMINVOKECOMMANDINFO lpici) PURE; \
+    STDMETHOD_(HRESULT,GetCommandString)(THIS_ UINT idCmd, UINT uType, UINT* pwReserved, LPSTR pszName, UINT cchMax) PURE; \
+    /*** IContextMenu2 methods ***/ \
+    STDMETHOD_(HRESULT,HandleMenuMsg)(THIS_ UINT uMsg, WPARAM wParam, LPARAM lParam) PURE; \
+    /*** IContextMenu3 methods ***/ \
+    STDMETHOD_(HRESULT,HandleMenuMsg2)(THIS_ UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT* plResult) PURE;
+
+HRESULT CALLBACK IContextMenu3_HandleMenuMsg2_Proxy(
+    IContextMenu3* This,
+    UINT uMsg,
+    WPARAM wParam,
+    LPARAM lParam,
+    LRESULT* plResult);
+void __RPC_STUB IContextMenu3_HandleMenuMsg2_Stub(
+    struct IRpcStubBuffer* This,
+    struct IRpcChannelBuffer* pRpcChannelBuffer,
+    PRPC_MESSAGE pRpcMessage,
+    DWORD* pdwStubPhase);
+
+#endif  /* __IContextMenu3_INTERFACE_DEFINED__ */
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/include/shobjidl.idl b/include/shobjidl.idl
index a8fe34f3764..8c7d8c988fe 100644
--- a/include/shobjidl.idl
+++ b/include/shobjidl.idl
@@ -691,3 +691,385 @@ interface IShellExtInit : IUnknown
         [in] IDataObject *pdtobj,
         [in] HKEY hkeyProgID);
 }
+
+
+/*******************************************************************************/
+/* Note: the following interfaces are not in shobjidl.idl under Windows, they  */
+/* are declared directly in shlobj.h. It hopefully won't break anything to put */
+/* them here anyway.                                                           */
+/*******************************************************************************/
+
+#ifndef MAX_PATH
+#define MAX_PATH 260
+#endif
+
+
+/*****************************************************************************
+ * IPersistFolder3 interface
+ */
+[
+    object,
+    uuid(cef04fdf-fe72-11d2-87a5-00c04f6837cf),
+    pointer_default(unique)
+]
+interface IPersistFolder3 : IPersistFolder2
+{
+    typedef struct
+    {
+        LPITEMIDLIST	pidlTargetFolder;
+	WCHAR		szTargetParsingName[MAX_PATH];
+	WCHAR		szNetworkProvider[MAX_PATH];
+	DWORD		dwAttributes;
+	int		csidl;
+    } PERSIST_FOLDER_TARGET_INFO;
+
+    HRESULT InitializeEx(
+        [in] IBindCtx *pbc,
+        [in] LPCITEMIDLIST pidlRoot,
+        [in] const PERSIST_FOLDER_TARGET_INFO *ppfti);
+
+    HRESULT GetFolderTargetInfo( [out] PERSIST_FOLDER_TARGET_INFO *ppfti );
+}
+
+
+/*****************************************************************************
+ * IExtractIconA interface
+ */
+[
+    object,
+    uuid(000214eb-0000-0000-c000-000000000046),
+    pointer_default(unique)
+]
+interface IExtractIconA : IUnknown
+{
+cpp_quote("#define GIL_OPENICON     0x0001")
+cpp_quote("#define GIL_FORSHELL     0x0002")
+cpp_quote("#define GIL_ASYNC        0x0020")
+cpp_quote("#define GIL_DEFAULTICON  0x0040")
+cpp_quote("#define GIL_FORSHORTCUT  0x0080")
+
+cpp_quote("#define GIL_SIMULATEDOC  0x0001")
+cpp_quote("#define GIL_PERINSTANCE  0x0002")
+cpp_quote("#define GIL_PERCLASS     0x0004")
+cpp_quote("#define GIL_NOTFILENAME  0x0008")
+cpp_quote("#define GIL_DONTCACHE    0x0010")
+
+    typedef IExtractIconA *LPEXTRACTICONA;
+
+    HRESULT GetIconLocation(
+        [in] UINT uFlags,
+        [out, size_is(cchMax)] LPSTR szIconFile,
+        [in] UINT cchMax,
+        [out] INT *piIndex,
+        [out] UINT *pwFlags);
+
+    HRESULT Extract(
+        [in] LPCSTR pszFile,
+        [in] UINT nIconIndex,
+        [out] HICON *phiconLarge,
+        [out] HICON *phiconSmall,
+        [in] UINT nIconSize );
+}
+
+
+/*****************************************************************************
+ * IExtractIconW interface
+ */
+[
+    object,
+    uuid(000214fa-0000-0000-c000-000000000046),
+    pointer_default(unique)
+]
+interface IExtractIconW : IUnknown
+{
+    typedef IExtractIconW *LPEXTRACTICONW;
+
+    HRESULT GetIconLocation(
+        [in] UINT uFlags,
+        [out, size_is(cchMax)] LPWSTR szIconFile,
+        [in] UINT cchMax,
+        [out] INT *piIndex,
+        [out] UINT *pwFlags);
+
+    HRESULT Extract(
+        [in] LPCWSTR pszFile,
+        [in] UINT nIconIndex,
+        [out] HICON *phiconLarge,
+        [out] HICON *phiconSmall,
+        [in] UINT nIconSize );
+}
+
+cpp_quote("#define LPEXTRACTICON WINELIB_NAME_AW(LPEXTRACTICON)")
+cpp_quote("#define IExtractIcon WINELIB_NAME_AW(IExtractIcon)")
+
+
+/*****************************************************************************
+ * ICommDlgBrowser interface
+ */
+[
+    object,
+    uuid(000214f1-0000-0000-c000-000000000046),
+    pointer_default(unique)
+]
+interface ICommDlgBrowser : IUnknown
+{
+cpp_quote("#define CDBOSC_SETFOCUS     0x00000000")
+cpp_quote("#define CDBOSC_KILLFOCUS    0x00000001")
+cpp_quote("#define CDBOSC_SELCHANGE    0x00000002")
+cpp_quote("#define CDBOSC_RENAME       0x00000003")
+cpp_quote("#define CDBOSC_STATECHANGE  0x00000004")
+
+    typedef ICommDlgBrowser *LPCOMMDLGBROWSER;
+
+    HRESULT OnDefaultCommand( [in] IShellView *shv );
+    HRESULT OnStateChange( [in] IShellView *shv, [in] ULONG uChange );
+    HRESULT IncludeObject( [in] IShellView *shv, [in] LPCITEMIDLIST pidl );
+}
+
+
+/*****************************************************************************
+ * IDockingWindowFrame interface
+ */
+[
+    object,
+    uuid(47d2657a-7b27-11d0-8ca9-00a0c92dbfe8),
+    pointer_default(unique)
+]
+interface IDockingWindowFrame : IOleWindow
+{
+cpp_quote("#define DWFRF_NORMAL           0x0000")
+cpp_quote("#define DWFRF_DELETECONFIGDATA 0x0001")
+cpp_quote("#define DWFAF_HIDDEN           0x0001")
+
+    HRESULT AddToolbar(
+        [in] IUnknown *punkSrc,
+        [in] LPCWSTR pwszItem,
+        [in] DWORD dwAddFlags);
+
+    HRESULT RemoveToolbar(
+        [in] IUnknown *punkSrc,
+        [in] DWORD dwRemoveFlags);
+
+    HRESULT FindToolbar(
+        [in] LPCWSTR pwszItem,
+        [in] REFIID riid,
+        [out] LPVOID *ppvObj);
+}
+
+
+/*****************************************************************************
+ * IDragSourceHelper interface
+ */
+[
+    object,
+    uuid(de5bf786-477a-11d2-839d-00c04fd918d0),
+    pointer_default(unique)
+]
+interface IDragSourceHelper : IUnknown
+{
+    typedef struct
+    {
+        SIZE     sizeDragImage;
+        POINT    ptOffset;
+        HBITMAP  hbmpDragImage;
+        COLORREF crColorKey;
+    } SHDRAGIMAGE, *LPSHDRAGIMAGE;
+
+  HRESULT InitializeFromBitmap(
+      [in] LPSHDRAGIMAGE pshdi,
+      [in] IDataObject *pDataObject);
+
+  HRESULT InitializeFromWindow(
+      [in] HWND hwnd,
+      [in] POINT *ppt,
+      [in] IDataObject *pDataObject);
+}
+
+
+/*****************************************************************************
+ * IDropTargetHelper interface
+ */
+[
+    object,
+    uuid(4657278b-411b-11d2-839a-00c04fd918d0),
+    pointer_default(unique)
+]
+interface IDropTargetHelper : IUnknown
+{
+    HRESULT DragEnter(
+        [in] HWND hwndTarget,
+        [in] IDataObject *pDataObject,
+        [in] POINT *ppt,
+        [in] DWORD dwEffect);
+
+    HRESULT DragLeave();
+
+    HRESULT DragOver(
+        [in] POINT *ppt,
+        [in] DWORD dwEffect);
+
+    HRESULT Drop(
+        [in] IDataObject *pDataObject,
+        [in] POINT *ppt,
+        [in] DWORD dwEffect);
+
+    HRESULT Show( [in] BOOL fShow );
+}
+
+
+/*****************************************************************************
+ * IContextMenu interface
+ */
+[
+    object,
+    uuid(000214e4-0000-0000-c000-000000000046),
+    pointer_default(unique)
+]
+interface IContextMenu : IUnknown
+{
+cpp_quote("#define CMF_NORMAL        0x00000000")
+cpp_quote("#define CMF_DEFAULTONLY   0x00000001")
+cpp_quote("#define CMF_VERBSONLY     0x00000002")
+cpp_quote("#define CMF_EXPLORE       0x00000004")
+cpp_quote("#define CMF_NOVERBS       0x00000008")
+cpp_quote("#define CMF_CANRENAME     0x00000010")
+cpp_quote("#define CMF_NODEFAULT     0x00000020")
+cpp_quote("#define CMF_INCLUDESTATIC 0x00000040")
+cpp_quote("#define CMF_EXTENDEDVERBS 0x00000100")
+cpp_quote("#define CMF_RESERVED      0xffff0000")
+
+cpp_quote("#define GCS_VERBA         0x00000000")
+cpp_quote("#define GCS_HELPTEXTA     0x00000001")
+cpp_quote("#define GCS_VALIDATEA     0x00000002")
+cpp_quote("#define GCS_VERBW         0x00000004")
+cpp_quote("#define GCS_HELPTEXTW     0x00000005")
+cpp_quote("#define GCS_VALIDATEW     0x00000006")
+cpp_quote("#define GCS_UNICODE       0x00000004")
+cpp_quote("#define GCS_VERB          WINELIB_NAME_AW(GCS_VERB)")
+cpp_quote("#define GCS_HELPTEXT      WINELIB_NAME_AW(GCS_HELPTEXT)")
+cpp_quote("#define GCS_VALIDATE      WINELIB_NAME_AW(GCS_VALIDATE)")
+
+cpp_quote("#define CMDSTR_NEWFOLDERA   \"NewFolder\"")
+cpp_quote("#define CMDSTR_VIEWLISTA    \"ViewList\"")
+cpp_quote("#define CMDSTR_VIEWDETAILSA \"ViewDetails\"")
+cpp_quote("#if defined(__GNUC__)")
+cpp_quote("# define CMDSTR_NEWFOLDERW (const WCHAR []){ 'N','e','w','F','o','l','d','e','r',0 }")
+cpp_quote("# define CMDSTR_VIEWLISTW (const WCHAR []){ 'V','i','e','w','L','i','s','t',0 }")
+cpp_quote("# define CMDSTR_VIEWDETAILSW (const WCHAR []){ 'V','i','e','w','D','e','t','a','i','l','s',0 }")
+cpp_quote("#elif defined(_MSC_VER)")
+cpp_quote("# define CMDSTR_NEWFOLDERW   L\"NewFolder\"")
+cpp_quote("# define CMDSTR_VIEWLISTW    L\"ViewList\"")
+cpp_quote("# define CMDSTR_VIEWDETAILSW L\"ViewDetails\"")
+cpp_quote("#else")
+cpp_quote("static const WCHAR CMDSTR_NEWFOLDERW[] = {'N','e','w','F','o','l','d','e','r',0};")
+cpp_quote("static const WCHAR CMDSTR_VIEWLISTW [] = {'V','i','e','w','L','i','s','t',0};")
+cpp_quote("static const WCHAR CMDSTR_VIEWDETAILSW[] = {'V','i','e','w','D','e','t','a','i','l','s',0};")
+cpp_quote("#endif")
+cpp_quote("#define CMDSTR_NEWFOLDER    WINELIB_NAME_AW(CMDSTR_NEWFOLDER)")
+cpp_quote("#define CMDSTR_VIEWLIST     WINELIB_NAME_AW(CMDSTR_VIEWLIST)")
+cpp_quote("#define CMDSTR_VIEWDETAILS  WINELIB_NAME_AW(CMDSTR_VIEWDETAILS)")
+
+cpp_quote("#define CMIC_MASK_HOTKEY         SEE_MASK_HOTKEY")
+cpp_quote("#define CMIC_MASK_ICON           SEE_MASK_ICON")
+cpp_quote("#define CMIC_MASK_FLAG_NO_UI     SEE_MASK_FLAG_NO_UI")
+cpp_quote("#define CMIC_MASK_UNICODE        SEE_MASK_UNICODE")
+cpp_quote("#define CMIC_MASK_NO_CONSOLE     SEE_MASK_NO_CONSOLE")
+cpp_quote("#define CMIC_MASK_HASLINKNAME    SEE_MASK_HASLINKNAME")
+cpp_quote("#define CMIC_MASK_FLAG_SEP_VDM   SEE_MASK_FLAG_SEPVDM")
+cpp_quote("#define CMIC_MASK_HASTITLE       SEE_MASK_HASTITLE")
+cpp_quote("#define CMIC_MASK_ASYNCOK        SEE_MASK_ASYNCOK")
+cpp_quote("#define CMIC_MASK_SHIFT_DOWN     0x10000000")
+cpp_quote("#define CMIC_MASK_PTINVOKE       0x20000000")
+cpp_quote("#define CMIC_MASK_CONTROL_DOWN   0x40000000")
+cpp_quote("#define CMIC_MASK_FLAG_LOG_USAGE SEE_MASK_FLAG_LOG_USAGE")
+cpp_quote("#define CMIC_MASK_NOZONECHECKS   SEE_MASK_NOZONECHECKS")
+
+    typedef IContextMenu *LPCONTEXTMENU;
+
+    typedef struct tagCMINVOKECOMMANDINFO
+    {
+        DWORD cbSize;
+        DWORD fMask;
+        HWND hwnd;
+        LPCSTR lpVerb;
+        LPCSTR lpParameters;
+        LPCSTR lpDirectory;
+        INT nShow;
+        DWORD dwHotKey;
+        HANDLE hIcon;
+    } CMINVOKECOMMANDINFO, *LPCMINVOKECOMMANDINFO;
+
+    typedef struct tagCMInvokeCommandInfoEx
+    {
+        DWORD cbSize;
+        DWORD fMask;
+        HWND hwnd;
+        LPCSTR lpVerb;
+        LPCSTR lpParameters;
+        LPCSTR lpDirectory;
+        INT nShow;
+        DWORD dwHotKey;
+        HANDLE hIcon;
+        LPCSTR lpTitle;
+        LPCWSTR lpVerbW;
+        LPCWSTR lpParametersW;
+        LPCWSTR lpDirectoryW;
+        LPCWSTR lpTitleW;
+        POINT ptInvoke;
+    } CMINVOKECOMMANDINFOEX, *LPCMINVOKECOMMANDINFOEX;
+
+    HRESULT QueryContextMenu(
+        [in] HMENU hmenu,
+        [in] UINT indexMenu,
+        [in] UINT idCmdFirst,
+        [in] UINT idCmdLast,
+        [in] UINT uFlags);
+
+    HRESULT InvokeCommand( [in] LPCMINVOKECOMMANDINFO lpici );
+
+    HRESULT GetCommandString(
+        [in] UINT idCmd,
+        [in] UINT uType,
+        [out] UINT *pwReserved,
+        [out, size_is(cchMax)] LPSTR pszName,
+        [in] UINT cchMax);
+}
+
+
+/*****************************************************************************
+ * IContextMenu2 interface
+ */
+[
+    object,
+    uuid(000214f4-0000-0000-c000-000000000046),
+    pointer_default(unique)
+]
+interface IContextMenu2 : IContextMenu
+{
+    typedef IContextMenu2 *LPCONTEXTMENU2;
+
+    HRESULT HandleMenuMsg(
+        [in] UINT uMsg,
+        [in] WPARAM wParam,
+        [in] LPARAM lParam);
+}
+
+
+/*****************************************************************************
+ * IContextMenu3 interface
+ */
+[
+    object,
+    uuid(bcfce0a0-ec17-11d0-8d10-00a0c90f2719),
+    pointer_default(unique)
+]
+interface IContextMenu3 : IContextMenu2
+{
+    typedef IContextMenu3 *LPCONTEXTMENU3;
+
+    HRESULT HandleMenuMsg2(
+        [in] UINT uMsg,
+        [in] WPARAM wParam,
+        [in] LPARAM lParam,
+        [out] LRESULT *plResult);
+}
diff --git a/include/wine/obj_commdlgbrowser.h b/include/wine/obj_commdlgbrowser.h
deleted file mode 100644
index 55d9f9be91f..00000000000
--- a/include/wine/obj_commdlgbrowser.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- *    ICommDlgBrowser
- *
- * Copyright (C) 1999 Juergen Schmied
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-
-#ifndef __WINE_WINE_OBJ_COMMDLGBROWSER_H
-#define __WINE_WINE_OBJ_COMMDLGBROWSER_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* defined(__cplusplus) */
-
-typedef struct 	ICommDlgBrowser ICommDlgBrowser, *LPCOMMDLGBROWSER;
-
-/* for OnStateChange*/
-#define CDBOSC_SETFOCUS     0x00000000
-#define CDBOSC_KILLFOCUS    0x00000001
-#define CDBOSC_SELCHANGE    0x00000002
-#define CDBOSC_RENAME       0x00000003
-
-
-#define INTERFACE ICommDlgBrowser
-#define ICommDlgBrowser_METHODS \
-	IUnknown_METHODS \
-	STDMETHOD(OnDefaultCommand)(THIS_ IShellView * IShellView) PURE; \
-	STDMETHOD(OnStateChange)(THIS_ IShellView * IShellView, ULONG  uChange) PURE; \
-	STDMETHOD(IncludeObject)(THIS_ IShellView * IShellView, LPCITEMIDLIST  pidl) PURE;
-ICOM_DEFINE(ICommDlgBrowser,IUnknown)
-#undef INTERFACE
-
-#ifdef COBJMACROS
-#define ICommDlgBrowser_QueryInterface(p,a,b)   (p)->lpVtbl->QueryInterface(p,a,b)
-#define ICommDlgBrowser_AddRef(p)               (p)->lpVtbl->AddRef(p)
-#define ICommDlgBrowser_Release(p)              (p)->lpVtbl->Release(p)
-#define ICommDlgBrowser_OnDefaultCommand(p,a)   (p)->lpVtbl->OnDefaultCommand(p,a)
-#define ICommDlgBrowser_OnStateChange(p,a,b)    (p)->lpVtbl->OnStateChange(p,a,b)
-#define ICommDlgBrowser_IncludeObject(p,a,b)    (p)->lpVtbl->IncludeObject(p,a,b)
-#endif
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif /* defined(__cplusplus) */
-
-#endif /* __WINE_WINE_OBJ_COMMDLGBROWSER_H */
diff --git a/include/wine/obj_contextmenu.h b/include/wine/obj_contextmenu.h
deleted file mode 100644
index 37c2ece1215..00000000000
--- a/include/wine/obj_contextmenu.h
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- *    IContextMenu
- *
- * Undocumented:
- * word95 gets a IContextMenu Interface and calls HandleMenuMsg()
- * which should only a member of IContextMenu2.
- *
- * Copyright (C) 1999 Juergen Schmied
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-
-#ifndef __WINE_WINE_OBJ_CONTEXTMENU_H
-#define __WINE_WINE_OBJ_CONTEXTMENU_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* defined(__cplusplus) */
-
-typedef struct IContextMenu IContextMenu, *LPCONTEXTMENU;
-
-/* QueryContextMenu uFlags */
-#define CMF_NORMAL              0x00000000
-#define CMF_DEFAULTONLY         0x00000001
-#define CMF_VERBSONLY           0x00000002
-#define CMF_EXPLORE             0x00000004
-#define CMF_NOVERBS             0x00000008
-#define CMF_CANRENAME           0x00000010
-#define CMF_NODEFAULT           0x00000020
-#define CMF_INCLUDESTATIC       0x00000040
-#define CMF_RESERVED            0xffff0000      /* View specific */
-
-/* GetCommandString uFlags */
-#define GCS_VERBA        0x00000000     /* canonical verb */
-#define GCS_HELPTEXTA    0x00000001     /* help text (for status bar) */
-#define GCS_VALIDATEA    0x00000002     /* validate command exists */
-#define GCS_VERBW        0x00000004     /* canonical verb (unicode) */
-#define GCS_HELPTEXTW    0x00000005     /* help text (unicode version) */
-#define GCS_VALIDATEW    0x00000006     /* validate command exists (unicode) */
-#define GCS_UNICODE      0x00000004     /* for bit testing - Unicode string */
-
-#define GCS_VERB        GCS_VERBA
-#define GCS_HELPTEXT    GCS_HELPTEXTA
-#define GCS_VALIDATE    GCS_VALIDATEA
-
-#define CMDSTR_NEWFOLDERA   "NewFolder"
-#define CMDSTR_VIEWLISTA    "ViewList"
-#define CMDSTR_VIEWDETAILSA "ViewDetails"
-#if defined(__GNUC__)
-# define CMDSTR_NEWFOLDERW (const WCHAR []){ 'N','e','w','F','o','l','d','e','r',0 }
-# define CMDSTR_VIEWLISTW (const WCHAR []){ 'V','i','e','w','L','i','s','t',0 }
-# define CMDSTR_VIEWDETAILSW (const WCHAR []){ 'V','i','e','w','D','e','t','a','i','l','s',0 }
-#elif defined(_MSC_VER)
-# define CMDSTR_NEWFOLDERW   L"NewFolder"
-# define CMDSTR_VIEWLISTW    L"ViewList"
-# define CMDSTR_VIEWDETAILSW L"ViewDetails"
-#else
-static const WCHAR CMDSTR_NEWFOLDERW[] = {'N','e','w','F','o','l','d','e','r',0};
-static const WCHAR CMDSTR_VIEWLISTW [] = {'V','i','e','w','L','i','s','t',0};
-static const WCHAR CMDSTR_VIEWDETAILSW[] = {'V','i','e','w','D','e','t','a','i','l','s',0};
-#endif
-
-#define CMDSTR_NEWFOLDER    CMDSTR_NEWFOLDERA
-#define CMDSTR_VIEWLIST     CMDSTR_VIEWLISTA
-#define CMDSTR_VIEWDETAILS  CMDSTR_VIEWDETAILSA
-
-#define CMIC_MASK_HOTKEY        SEE_MASK_HOTKEY
-#define CMIC_MASK_ICON          SEE_MASK_ICON
-#define CMIC_MASK_FLAG_NO_UI    SEE_MASK_FLAG_NO_UI
-#define CMIC_MASK_UNICODE       SEE_MASK_UNICODE
-#define CMIC_MASK_NO_CONSOLE    SEE_MASK_NO_CONSOLE
-#define CMIC_MASK_HASLINKNAME   SEE_MASK_HASLINKNAME
-#define CMIC_MASK_FLAG_SEP_VDM  SEE_MASK_FLAG_SEPVDM
-#define CMIC_MASK_HASTITLE      SEE_MASK_HASTITLE
-#define CMIC_MASK_ASYNCOK       SEE_MASK_ASYNCOK
-
-#define CMIC_MASK_PTINVOKE      0x20000000
-
-/*NOTE: When SEE_MASK_HMONITOR is set, hIcon is treated as hMonitor */
-typedef struct tagCMINVOKECOMMANDINFO
-{	DWORD cbSize;        /* sizeof(CMINVOKECOMMANDINFO) */
-	DWORD fMask;         /* any combination of CMIC_MASK_* */
-	HWND hwnd;         /* might be NULL (indicating no owner window) */
-	LPCSTR lpVerb;       /* either a string or MAKEINTRESOURCE(idOffset) */
-	LPCSTR lpParameters; /* might be NULL (indicating no parameter) */
-	LPCSTR lpDirectory;  /* might be NULL (indicating no specific directory) */
-	INT nShow;           /* one of SW_ values for ShowWindow() API */
-
-	DWORD dwHotKey;
-	HANDLE hIcon;
-} CMINVOKECOMMANDINFO,  *LPCMINVOKECOMMANDINFO;
-
-typedef struct tagCMInvokeCommandInfoEx
-{	DWORD cbSize;        /* must be sizeof(CMINVOKECOMMANDINFOEX) */
-	DWORD fMask;         /* any combination of CMIC_MASK_* */
-	HWND hwnd;         /* might be NULL (indicating no owner window) */
-	LPCSTR lpVerb;       /* either a string or MAKEINTRESOURCE(idOffset) */
-	LPCSTR lpParameters; /* might be NULL (indicating no parameter) */
-	LPCSTR lpDirectory;  /* might be NULL (indicating no specific directory) */
-	INT nShow;           /* one of SW_ values for ShowWindow() API */
-
-	DWORD dwHotKey;
-
-	HANDLE hIcon;
-	LPCSTR lpTitle;        /* For CreateProcess-StartupInfo.lpTitle */
-	LPCWSTR lpVerbW;       /* Unicode verb (for those who can use it) */
-	LPCWSTR lpParametersW; /* Unicode parameters (for those who can use it) */
-	LPCWSTR lpDirectoryW;  /* Unicode directory (for those who can use it) */
-	LPCWSTR lpTitleW;      /* Unicode title (for those who can use it) */
-	POINT ptInvoke;      /* Point where it's invoked */
-
-} CMINVOKECOMMANDINFOEX,  *LPCMINVOKECOMMANDINFOEX;
-
-#define INTERFACE IContextMenu
-#define IContextMenu_METHODS \
-	IUnknown_METHODS \
-	STDMETHOD(QueryContextMenu)(THIS_ HMENU  hmenu, UINT  indexMenu, UINT  idCmdFirst, UINT  idCmdLast, UINT  uFlags) PURE; \
-	STDMETHOD(InvokeCommand)(THIS_ LPCMINVOKECOMMANDINFO  lpici) PURE; \
-	STDMETHOD(GetCommandString)(THIS_ UINT  idCmd, UINT  uType, UINT * pwReserved, LPSTR  pszName, UINT  cchMax) PURE; \
-	STDMETHOD(HandleMenuMsg)(THIS_ UINT  uMsg, WPARAM  wParam, LPARAM  lParam) PURE; \
-	void * guard;   /*possibly another nasty entry from ContextMenu3 ?*/
-ICOM_DEFINE(IContextMenu,IUnknown)
-#undef INTERFACE
-
-#ifdef COBJMACROS
-#define IContextMenu_QueryInterface(p,a,b)              (p)->lpVtbl->QueryInterface(p,a,b)
-#define IContextMenu_AddRef(p)                          (p)->lpVtbl->AddRef(p)
-#define IContextMenu_Release(p)                         (p)->lpVtbl->Release(p)
-#define IContextMenu_QueryContextMenu(p,a,b,c,d,e)      (p)->lpVtbl->QueryContextMenu(p,a,b,c,d,e)
-#define IContextMenu_InvokeCommand(p,a)                 (p)->lpVtbl->InvokeCommand(p,a)
-#define IContextMenu_GetCommandString(p,a,b,c,d,e)      (p)->lpVtbl->GetCommandString(p,a,b,c,d,e)
-#define IContextMenu_HandleMenuMsg(p,a,b,c)             (p)->lpVtbl->HandleMenuMsg(p,a,b,c)
-#endif
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif /* defined(__cplusplus) */
-
-#endif /* __WINE_WINE_OBJ_CONTEXTMENU_H */
diff --git a/include/wine/obj_dockingwindowframe.h b/include/wine/obj_dockingwindowframe.h
deleted file mode 100644
index 873dd791b4b..00000000000
--- a/include/wine/obj_dockingwindowframe.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- *    IDockingWindowFrame
- *
- * Copyright (C) 1999 Juergen Schmied
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-
-#ifndef __WINE_WINE_OBJ_DOCKINGWINDOWFRAME_H
-#define __WINE_WINE_OBJ_DOCKINGWINDOWFRAME_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* defined(__cplusplus) */
-
-typedef struct IDockingWindowFrame IDockingWindowFrame,	*LPDOCKINGWINDOWFRAME;
-DEFINE_GUID (IID_IDockingWindowFrame,	0x47D2657AL, 0x7B27, 0x11D0, 0x8C, 0xA9, 0x00, 0xA0, 0xC9, 0x2D, 0xBF, 0xE8);
-
-#define DWFRF_NORMAL		0x0000  /* femove toolbar flags*/
-#define DWFRF_DELETECONFIGDATA	0x0001
-#define DWFAF_HIDDEN		0x0001   /* add tolbar*/
-
-#define INTERFACE IDockingWindowFrame
-#define IDockingWindowFrame_METHODS \
-	IOleWindow_METHODS \
-	STDMETHOD(AddToolbar)(THIS_ IUnknown * punkSrc, LPCWSTR  pwszItem, DWORD  dwAddFlags) PURE; \
-	STDMETHOD(RemoveToolbar)(THIS_ IUnknown * punkSrc, DWORD  dwRemoveFlags) PURE; \
-	STDMETHOD(FindToolbar)(THIS_ LPCWSTR  pwszItem, REFIID  riid, LPVOID * ppvObj) PURE;
-ICOM_DEFINE(IDockingWindowFrame,IOleWindow)
-#undef INTERFACE
-
-#ifdef COBJMACROS
-/*** IUnknown methods ***/
-#define IDockingWindowFrame_QueryInterface(p,a,b)	(p)->lpVtbl->QueryInterface(p,a,b)
-#define IDockingWindowFrame_AddRef(p)	(p)->lpVtbl->AddRef(p)
-#define IDockingWindowFrame_Release(p)	(p)->lpVtbl->Release(p)
-/*** IDockingWindowFrame methods ***/
-#define IDockingWindowFrame_GetWindow(p,a)	(p)->lpVtbl->GetWindow(p,a)
-#define IDockingWindowFrame_ContextSensitiveHelp(p,a)	(p)->lpVtbl->ContextSensitiveHelp(p,a)
-#define IDockingWindowFrame_AddToolbar(p,a,b,c)	(p)->lpVtbl->AddToolbar(p,a,b,c)
-#define IDockingWindowFrame_RemoveToolbar(p,a,b)	(p)->lpVtbl->RemoveToolbar(p,a,b)
-#define IDockingWindowFrame_FindToolbar(p,a,b,c)	(p)->lpVtbl->FindToolbar(p,a,b,c)
-#endif
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif /* defined(__cplusplus) */
-
-#endif /* __WINE_WINE_OBJ_DOCKINGWINDOWFRAME_H */
diff --git a/include/wine/obj_dragdrophelper.h b/include/wine/obj_dragdrophelper.h
deleted file mode 100644
index bcd7e14daf2..00000000000
--- a/include/wine/obj_dragdrophelper.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Defines the COM interfaces related to SHELL DragDropHelper
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-
-#ifndef __WINE_WINE_OBJ_DRAGDROPHELPER_H
-#define __WINE_WINE_OBJ_DRAGDROPHELPER_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* defined(__cplusplus) */
-
-/*****************************************************************************
- * Predeclare the interfaces
- */
-DEFINE_GUID(CLSID_DragDropHelper, 0x4657278a, 0x411b, 0x11d2, 0x83, 0x9a, 0x0, 0xc0, 0x4f, 0xd9, 0x18, 0xd0);
-
-DEFINE_GUID(IID_IDropTargetHelper, 0x4657278b, 0x411b, 0x11d2, 0x83, 0x9a, 0x0, 0xc0, 0x4f, 0xd9, 0x18, 0xd0);
-typedef struct IDropTargetHelper IDropTargetHelper,*LPDROPTARGETHELPER;
-
-DEFINE_GUID(IID_IDragSourceHelper,  0xde5bf786, 0x477a, 0x11d2, 0x83, 0x9d, 0x0, 0xc0, 0x4f, 0xd9, 0x18, 0xd0);
-typedef struct IDragSourceHelper IDragSourceHelper,*LPDRAGSOURCEHELPER;
-
-/*****************************************************************************
- * IDragSourceHelper interface
- */
-
-typedef struct {
-    SIZE        sizeDragImage;
-    POINT       ptOffset;
-    HBITMAP     hbmpDragImage;
-    COLORREF    crColorKey;
-} SHDRAGIMAGE, *LPSHDRAGIMAGE;
-
-
-#define INTERFACE IDragSourceHelper
-#define IDragSourceHelper_METHODS \
-    IUnknown_METHODS \
-    STDMETHOD(InitializeFromBitmap)(THIS_ LPSHDRAGIMAGE  pshdi, IDataObject * pDataObject) PURE; \
-    STDMETHOD(InitializeFromWindow)(THIS_ HWND  hwnd, POINT * ppt, IDataObject * pDataObject) PURE;
-ICOM_DEFINE(IDragSourceHelper,IUnknown)
-#undef INTERFACE
-
-#ifdef COBJMACROS
-/*** IUnknown methods ***/
-#define IDragSourceHelper_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
-#define IDragSourceHelper_AddRef(p)             (p)->lpVtbl->AddRef(p)
-#define IDragSourceHelper_Release(p)            (p)->lpVtbl->Release(p)
-/*** IDropSource methods ***/
-#define IDragSourceHelper_InitializeFromBitmap(p,a,b)   (p)->lpVtbl->InitializeFromBitmap(p,a,b)
-#define IDragSourceHelper_InitializeFromWindow(p,a,b,c) (p)->lpVtbl->InitializeFromWindow(p,a,b,c)
-#endif
-
-
-/*****************************************************************************
- * IDropTargetHelper interface
- */
-#define INTERFACE IDropTargetHelper
-#define IDropTargetHelper_METHODS \
-    IUnknown_METHODS \
-    STDMETHOD(DragEnter)(THIS_ HWND  hwndTarget, IDataObject * pDataObject, POINT * ppt, DWORD  dwEffect) PURE; \
-    STDMETHOD(DragLeave)(THIS) PURE; \
-    STDMETHOD(DragOver)(THIS_ POINT * ppt, DWORD  dwEffect) PURE; \
-    STDMETHOD(Drop)(THIS_ IDataObject * pDataObject, POINT * ppt,DWORD  dwEffect) PURE; \
-    STDMETHOD(Show)(THIS_ BOOL  fShow) PURE;
-ICOM_DEFINE(IDropTargetHelper,IUnknown)
-#undef INTERFACE
-
-#ifdef COBJMACROS
-/*** IUnknown methods ***/
-#define IDropTargetHelper_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
-#define IDropTargetHelper_AddRef(p)             (p)->lpVtbl->AddRef(p)
-#define IDropTargetHelper_Release(p)            (p)->lpVtbl->Release(p)
-/*** IDropTargetHelper methods ***/
-#define IDropTargetHelper_DragEnter(p,a,b,c,d)  (p)->lpVtbl->DragEnter(p,a,b,c,d)
-#define IDropTargetHelper_DragLeave(p)          (p)->lpVtbl->DragLeave(p)
-#define IDropTargetHelper_DragOver(p,a,b)       (p)->lpVtbl->DragOver(p,a,b)
-#define IDropTargetHelper_Drop(p,a,b,c)         (p)->lpVtbl->Drop(p,a,b,c)
-#define IDropTargetHelper_Show(p,a)             (p)->lpVtbl->Show(p,a,b,c,d)
-#endif
-
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif /* defined(__cplusplus) */
-
-#endif /*  __WINE_WINE_OBJ_DRAGDROPHELPER_H */
diff --git a/include/wine/obj_extracticon.h b/include/wine/obj_extracticon.h
deleted file mode 100644
index 36f00ec5324..00000000000
--- a/include/wine/obj_extracticon.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- *    IExtractIconA, IExtractIconW
- *
- * Copyright (C) 1999 Juergen Schmied
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-
-#ifndef __WINE_WINE_OBJ_EXTRACTICON_H
-#define __WINE_WINE_OBJ_EXTRACTICON_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* defined(__cplusplus) */
-
-#define IID_IExtractIcon WINELIB_NAME_AW(IID_IExtractIcon)
-
-typedef struct IExtractIconA IExtractIconA,*LPEXTRACTICONA;
-typedef struct IExtractIconW IExtractIconW,*LPEXTRACTICONW;
-#define LPEXTRACTICON WINELIB_NAME_AW(LPEXTRACTICON)
-#define IExtractIcon WINELIB_NAME_AW(IExtractIcon)
-
-/* GetIconLocation() input flags*/
-#define GIL_OPENICON     0x0001      /* allows containers to specify an "open" look */
-#define GIL_FORSHELL     0x0002      /* icon is to be displayed in a ShellFolder */
-#define GIL_ASYNC        0x0020      /* this is an async extract, return E_ASYNC */
-
-/* GetIconLocation() return flags */
-#define GIL_SIMULATEDOC  0x0001      /* simulate this document icon for this */
-#define GIL_PERINSTANCE  0x0002      /* icons from this class are per instance (each file has its own) */
-#define GIL_PERCLASS     0x0004      /* icons from this class per class (shared for all files of this type) */
-#define GIL_NOTFILENAME  0x0008      /* location is not a filename, must call ::ExtractIcon */
-#define GIL_DONTCACHE    0x0010      /* this icon should not be cached */
-
-
-#define INTERFACE IExtractIconA
-#define IExtractIconA_METHODS \
-	IUnknown_METHODS \
-	STDMETHOD(GetIconLocation)(THIS_ UINT  uFlags, LPSTR  szIconFile, UINT  cchMax, INT * piIndex, UINT  * pwFlags) PURE; \
-	STDMETHOD(Extract)(THIS_ LPCSTR  pszFile, UINT  nIconIndex, HICON * phiconLarge, HICON * phiconSmall, UINT  nIconSize) PURE;
-ICOM_DEFINE(IExtractIconA,IUnknown)
-#undef INTERFACE
-
-#ifdef COBJMACROS
-#define IExtractIconA_QueryInterface(p,a,b)     (p)->lpVtbl->QueryInterface(p,a,b)
-#define IExtractIconA_AddRef(p)                 (p)->lpVtbl->AddRef(p)
-#define IExtractIconA_Release(p)                (p)->lpVtbl->Release(p)
-#define IExtractIconA_GetIconLocation(p,a,b,c,d,e)      (p)->lpVtbl->GetIconLocation(p,a,b,c,d,e)
-#define IExtractIconA_Extract(p,a,b,c,d,e)      (p)->lpVtbl->Extract(p,a,b,c,d,e)
-#endif
-
-
-#define INTERFACE IExtractIconW
-#define IExtractIconW_METHODS \
-	IUnknown_METHODS \
-	STDMETHOD(GetIconLocation)(THIS_ UINT  uFlags, LPWSTR  szIconFile, UINT  cchMax, INT * piIndex, UINT  * pwFlags) PURE; \
-	STDMETHOD(Extract)(THIS_ LPCWSTR  pszFile, UINT  nIconIndex, HICON * phiconLarge, HICON * phiconSmall, UINT  nIconSize) PURE;
-ICOM_DEFINE(IExtractIconW,IUnknown)
-#undef INTERFACE
-
-#ifdef COBJMACROS
-#define IExtractIconW_QueryInterface(p,a,b)     (p)->lpVtbl->QueryInterface(p,a,b)
-#define IExtractIconW_AddRef(p)                 (p)->lpVtbl->AddRef(p)
-#define IExtractIconW_Release(p)                (p)->lpVtbl->Release(p)
-#define IExtractIconW_GetIconLocation(p,a,b,c,d,e)      (p)->lpVtbl->GetIconLocation(p,a,b,c,d,e)
-#define IExtractIconW_Extract(p,a,b,c,d,e)      (p)->lpVtbl->Extract(p,a,b,c,d,e)
-#endif
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif /* defined(__cplusplus) */
-
-#endif /* __WINE_WINE_OBJ_EXTRACTICON_H */
diff --git a/include/wine/obj_shellfolder.h b/include/wine/obj_shellfolder.h
deleted file mode 100644
index 15fe09af0cc..00000000000
--- a/include/wine/obj_shellfolder.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Defines the COM interfaces and APIs related to IShellFolder
- *
- * Depends on 'obj_base.h'.
- *
- * Copyright (C) 1999 Juergen Schmied
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-
-#ifndef __WINE_WINE_OBJ_SHELLFOLDER_H
-#define __WINE_WINE_OBJ_SHELLFOLDER_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* defined(__cplusplus) */
-
-/*****************************************************************************
- * Predeclare the interfaces
- */
-DEFINE_GUID(IID_IPersistFolder3, 0xcef04fdf, 0xfe72, 0x11d2, 0x87, 0xa5, 0x0, 0xc0, 0x4f, 0x68, 0x37, 0xcf);
-typedef struct IPersistFolder3 IPersistFolder3, *LPPERSISTFOLDER3;
-
-/* GetDetailsEx */
-#define PID_FINDDATA		0
-#define PID_NETRESOURCE		1
-#define PID_DESCRIPTIONID	2
-
-
-/*****************************************************************************
- * IPersistFolder3 interface
- */
-
-typedef struct {
-	LPITEMIDLIST	pidlTargetFolder;
-	WCHAR		szTargetParsingName[MAX_PATH];
-	WCHAR		szNetworkProvider[MAX_PATH];
-	DWORD		dwAttributes;
-	int		csidl;
-} PERSIST_FOLDER_TARGET_INFO;
-
-#define INTERFACE IPersistFolder3
-#define IPersistFolder3_METHODS \
-    IPersistFolder2_METHODS \
-    STDMETHOD(InitializeEx)(THIS_ IBindCtx * pbc, LPCITEMIDLIST  pidlRoot, const PERSIST_FOLDER_TARGET_INFO * ppfti) PURE;\
-    STDMETHOD(GetFolderTargetInfo)(THIS_ PERSIST_FOLDER_TARGET_INFO * ppfti) PURE;
-ICOM_DEFINE(IPersistFolder3, IPersistFolder2)
-#undef INTERFACE
-
-#ifdef COBJMACROS
-/*** IUnknown methods ***/
-#define IPersistFolder3_QueryInterface(p,a,b)   (p)->lpVtbl->QueryInterface(p,a,b)
-#define IPersistFolder3_AddRef(p)               (p)->lpVtbl->AddRef(p)
-#define IPersistFolder3_Release(p)              (p)->lpVtbl->Release(p)
-/*** IPersist methods ***/
-#define IPersistFolder3_GetClassID(p,a)         (p)->lpVtbl->GetClassID(p,a)
-/*** IPersistFolder methods ***/
-#define IPersistFolder3_Initialize(p,a)         (p)->lpVtbl->Initialize(p,a)
-/*** IPersistFolder2 methods ***/
-#define IPersistFolder3_GetCurFolder(p,a)       (p)->lpVtbl->GetCurFolder(p,a)
-/*** IPersistFolder3 methods ***/
-#define IPersistFolder3_InitializeEx(p,a,b,c)   (p)->lpVtbl->InitializeEx(p,a,b,c)
-#define IPersistFolder3_GetFolderTargetInfo(p,a) (p)->lpVtbl->InitializeEx(p,a)
-#endif
-
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif /* defined(__cplusplus) */
-
-#endif /* __WINE_WINE_OBJ_SHELLFOLDER_H */
diff --git a/include/wtypes.h b/include/wtypes.h
index ae79eff8462..4a1950ba3a5 100644
--- a/include/wtypes.h
+++ b/include/wtypes.h
@@ -76,6 +76,8 @@ typedef void *HTASK;
 
 typedef void *HKEY;
 
+typedef void *HICON;
+
 typedef LONG_PTR LRESULT;
 
 typedef double DATE;
diff --git a/include/wtypes.idl b/include/wtypes.idl
index 5a05e5a4bb2..a4c000bce00 100644
--- a/include/wtypes.idl
+++ b/include/wtypes.idl
@@ -75,6 +75,7 @@ DECLARE_HANDLE(HINSTANCE);
 DECLARE_HANDLE(HRGN);
 DECLARE_HANDLE(HTASK);
 DECLARE_HANDLE(HKEY);
+DECLARE_HANDLE(HICON);
 
 typedef LONG_PTR LRESULT;
 
-- 
GitLab