Complete cleanup, bugfixes.
New: PathStripPath, PathMakeUniqueName, PathStripToRoot,
PathGetShortPath, PathParseIconLocation, PathRemoveExtension,
PathRemoveArgs, PathAppend, PathBuildRoot, PathCanonicalize,
PathFindNextComponent, PathRemoveFileSpec.

diff --git a/include/shell.h b/include/shell.h
index 8a5e5c6..bd43f45 100644
--- a/include/shell.h
+++ b/include/shell.h
@@ -65,6 +65,7 @@
 { WORD	cb;	/* nr of bytes in this item */
   BYTE	abID[1];/* first byte in this item */
 } SHITEMID,*LPSHITEMID;
+typedef LPSHITEMID const LPCSHITEMID;
 
 typedef struct 
 { SHITEMID mkid; /* first itemid in list */
@@ -87,94 +88,11 @@
 * SHGetSpecialFolderLocation API
 */
 HRESULT WINAPI SHGetSpecialFolderLocation(HWND, INT, LPITEMIDLIST *);
-/****************************************************************************
-*  string and path functions
-*/
-BOOL WINAPI PathIsRootA(LPCSTR x);
-BOOL WINAPI PathIsRootW(LPCWSTR x);
-#define  PathIsRoot WINELIB_NAME_AW(PathIsRoot)
-BOOL WINAPI PathIsRootAW(LPCVOID x);
-
-LPSTR  WINAPI PathAddBackslashA(LPSTR path);	
-LPWSTR WINAPI PathAddBackslashW(LPWSTR path);	
-#define  PathAddBackslash WINELIB_NAME_AW(PathAddBackslash)
-LPVOID  WINAPI PathAddBackslashAW(LPVOID path);	
-
-BOOL  WINAPI PathQualifyA(LPCSTR path);	
-BOOL WINAPI PathQualifyW(LPCWSTR path);	
-#define  PathQualify WINELIB_NAME_AW(PathQualify)
-BOOL  WINAPI PathQualifyAW(LPCVOID path);	
-
-LPSTR  WINAPI PathQuoteSpacesA(LPCSTR path);	
-LPWSTR WINAPI PathQuoteSpacesW(LPCWSTR path);	
-#define  PathQuoteSpaces WINELIB_NAME_AW(PathQuoteSpaces)
-LPVOID  WINAPI PathQuoteSpacesAW(LPCVOID path);	
-
-LPSTR  WINAPI PathCombineA(LPSTR szDest, LPCSTR lpszDir, LPCSTR lpszFile);
-LPWSTR WINAPI PathCombineW(LPWSTR szDest, LPCWSTR lpszDir, LPCWSTR lpszFile);
-#define  PathCombine WINELIB_NAME_AW(PathCombine)
-LPVOID WINAPI PathCombineAW(LPVOID szDest, LPCVOID lpszDir, LPCVOID lpszFile);
-
-LPCSTR WINAPI PathFindExtensionA(LPCSTR path);
-LPCWSTR WINAPI PathFindExtensionW(LPCWSTR path);
-#define  PathFindExtension WINELIB_NAME_AW(PathFindExtension)
-LPCVOID WINAPI PathFindExtensionAW(LPCVOID path); 
-
-LPCSTR WINAPI PathGetExtensionA(LPCSTR path, DWORD y, DWORD x);
-LPCWSTR WINAPI PathGetExtensionW(LPCWSTR path, DWORD y, DWORD x);
-#define  PathGetExtension WINELIB_NAME_AW(PathGetExtension)
-LPCVOID WINAPI PathGetExtensionAW(LPCVOID path, DWORD y, DWORD x); 
-
-LPCSTR WINAPI PathFindFilenameA(LPCSTR path);
-LPCWSTR WINAPI PathFindFilenameW(LPCWSTR path);
-#define  PathFindFilename WINELIB_NAME_AW(PathFindFilename)
-LPCVOID WINAPI PathFindFilenameAW(LPCVOID path); 
-
-BOOL WINAPI PathMatchSpecA(LPCSTR x, LPCSTR y);
-BOOL WINAPI PathMatchSpecW(LPCWSTR x, LPCWSTR y);
-#define  PathMatchSpec WINELIB_NAME_AW(PathMatchSpec)
-BOOL WINAPI PathMatchSpecAW(LPVOID x, LPVOID y);
-
-LPSTR WINAPI PathRemoveBlanksA(LPSTR str);
-LPWSTR WINAPI PathRemoveBlanksW(LPWSTR str);
-#define  PathRemoveBlanks WINELIB_NAME_AW(PathRemoveBlanks)
-LPVOID WINAPI PathRemoveBlanksAW(LPVOID str);
-
-BOOL WINAPI PathIsRelativeA(LPCSTR str);
-BOOL WINAPI PathIsRelativeW(LPCWSTR str);
-#define  PathIsRelative WINELIB_NAME_AW(PathIsRelative)
-BOOL WINAPI PathIsRelativeAW(LPCVOID str);
-
-BOOL WINAPI PathIsUNCA(LPCSTR str);
-BOOL WINAPI PathIsUNCW(LPCWSTR str);
-#define  PathIsUNC WINELIB_NAME_AW(PathIsUNC)
-BOOL WINAPI PathIsUNCAW(LPCVOID str);
-
-BOOL WINAPI PathIsURLA(LPCSTR str);
-BOOL WINAPI PathIsURLW(LPCWSTR str);
-#define  PathIsURL WINELIB_NAME_AW(PathIsURL)
-BOOL WINAPI PathIsURLAW(LPCVOID str);
-
-BOOL WINAPI PathFindOnPathA(LPSTR sFile, LPCSTR sOtherDirs);
-BOOL WINAPI PathFindOnPathW(LPWSTR sFile, LPCWSTR sOtherDirs);
-#define PathFindOnPath WINELIB_NAME_AW(PathFindOnPath)
-BOOL WINAPI PathFindOnPathAW(LPVOID sFile, LPCVOID sOtherDirs);
-
-LPSTR WINAPI StrFormatByteSizeA ( DWORD dw, LPSTR pszBuf, UINT cchBuf );
-LPWSTR WINAPI StrFormatByteSizeW ( DWORD dw, LPWSTR pszBuf, UINT cchBuf );
-#define  StrFormatByteSize WINELIB_NAME_AW(StrFormatByteSize)
-
-DWORD WINAPI PathCleanupSpecA(LPSTR x, LPSTR y);
-DWORD WINAPI PathCleanupSpecW(LPWSTR x, LPWSTR y);
-#define  PathCleanupSpec WINELIB_NAME_AW(PathCleanupSpec)
 
 /****************************************************************************
 *  other functions
 */
 
-LPVOID WINAPI SHAlloc(DWORD len);
-DWORD WINAPI SHFree(LPVOID x);
-
 #define	CSIDL_DESKTOP		0x0000
 #define	CSIDL_PROGRAMS		0x0002
 #define	CSIDL_CONTROLS		0x0003
diff --git a/include/shlobj.h b/include/shlobj.h
index f245399..a1ac588 100644
--- a/include/shlobj.h
+++ b/include/shlobj.h
@@ -72,13 +72,9 @@
 * IShellView interface
 */
 
-
-
 typedef GUID SHELLVIEWID;
 #define SV_CLASS_NAME   ("SHELLDLL_DefView")
 
-UINT WINAPI SHMapPIDLToSystemImageListIndex(LPSHELLFOLDER sh, LPITEMIDLIST pidl, UINT * pIndex);
-
 /****************************************************************************
  * IShellIcon interface
  */
@@ -341,29 +337,6 @@
 
 DWORD WINAPI SHGetMalloc(LPMALLOC *lpmal) ;
 
-/****************************************************************************
- *	Shell File Menu API
- */
-/* FileMenu_Create nSelHeight */
-#define	FM_FULL_SELHEIGHT	-1;
-#define	FM_DEFAULT_SELHEIGHT	0
-
-/* FileMenu_Create uFlags */
-#define	FMF_SMALL_ICONS		0x00
-#define	FMF_LARGE_ICONS		0x08
-#define	FMF_NO_COLUMN_BREAK	0x10
-
-/* FileMenu_InsertUsingPidl uFlags */
-#define	FMF_NO_EMPTY_ITEM	0x01
-#define	FMF_NO_PROGRAM_GROUPS	0x04
-
-typedef void (CALLBACK * LPFNFMCALLBACK)(LPCITEMIDLIST pidlFolder, LPCITEMIDLIST pidlFile);
-
-/* FileMenu_AppendItem lpszText */
-#define	FM_SEPARATOR		(LPCSTR)1
-#define	FM_BLANK_ICON		-1
-#define	FM_DEFAULT_HEIGHT	0
-
 /**********************************************************************
  * SHGetSettings ()
  */
diff --git a/include/shlwapi.h b/include/shlwapi.h
new file mode 100644
index 0000000..36ffdf6
--- /dev/null
+++ b/include/shlwapi.h
@@ -0,0 +1,36 @@
+#ifndef __WINE_SHLWAPI_H
+#define __WINE_SHLWAPI_H
+
+#include "windef.h"
+#include "wine/obj_queryassociations.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+LPSTR WINAPI PathFindFileNameA(LPCSTR pPath);
+LPWSTR WINAPI PathFindFileNameW(LPCWSTR pPath);
+#define PathFindFileName WINELIB_NAME_AW(PathFindFileName)
+LPVOID WINAPI PathFindFileNameAW(LPCVOID path); 
+
+int WINAPI PathGetDriveNumberA(LPCSTR lpszPath);
+int WINAPI PathGetDriveNumberW(LPCWSTR lpszPath);
+#define PathGetDriveNumber WINELIB_NAME_AW(PathGetDriveNumber)
+
+BOOL WINAPI PathCanonicalizeA(LPSTR lpszDst, LPCSTR lpszSrc);
+BOOL WINAPI PathCanonicalizeW(LPWSTR lpszDst, LPCWSTR lpszSrc);
+#define PathCanonicalize WINELIB_NAME_AW(PathCanonicalize)
+
+LPSTR WINAPI PathFindNextComponentA(LPCSTR pszPath);
+LPWSTR WINAPI PathFindNextComponentW(LPCWSTR pszPath);
+#define PathFindNextComponent WINELIB_NAME_AW(PathFindNextComponent)
+
+BOOL WINAPI PathIsURLA(LPCSTR pszPath);
+BOOL WINAPI PathIsURLW(LPCWSTR pszPath);
+#define PathIsURL WINELIB_NAME_AW(PathIsURL)
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* __WINE_SHLWAPI_H */
diff --git a/include/wine/obj_shellbrowser.h b/include/wine/obj_shellbrowser.h
index 6b1a9ae..368cf50 100644
--- a/include/wine/obj_shellbrowser.h
+++ b/include/wine/obj_shellbrowser.h
@@ -58,14 +58,6 @@
 #define FCT_CONFIGABLE  0x0002
 #define FCT_ADDTOEND    0x0004
 
-/* undocumented, found in the web posted by Chris Becke */ 
-#define CWM_SETPATH	(WM_USER+2)
-#define CWM_WANTIDLE	(WM_USER+3)
-#define CWM_GETSETCURRENTINFO	(WM_USER+4)
-#define CWM_SELECTITEM	(WM_USER+5)
-#define CWM_STOPWAITING	(WM_USER+6)
-#define CWM_GETISHELLBROWSER (WM_USER+7)
-
 #define ICOM_INTERFACE IShellBrowser
 #define IShellBrowser_METHODS \
 	ICOM_METHOD2(HRESULT, InsertMenusSB, HMENU, hmenuShared, LPOLEMENUGROUPWIDTHS, lpMenuWidths) \
diff --git a/include/wine/undocshell.h b/include/wine/undocshell.h
index 1bdd039..5ae92a5 100644
--- a/include/wine/undocshell.h
+++ b/include/wine/undocshell.h
@@ -2,8 +2,11 @@
 #define __WINE_UNDOCSHELL_H
 
 #include "windef.h"
-#include "shell.h"
-#include "wine/obj_shellfolder.h"	/* strret */
+//#include "shell.h"
+#include "commctrl.h"
+#include "wine/obj_shellfolder.h"
+#include "wine/obj_shellview.h"
+#include "wine/obj_dragdrop.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -14,46 +17,113 @@
  */
 LPITEMIDLIST WINAPI ILClone (LPCITEMIDLIST pidl);
 LPITEMIDLIST WINAPI ILCloneFirst(LPCITEMIDLIST pidl);
-LPITEMIDLIST WINAPI ILCombine(LPCITEMIDLIST iil1,LPCITEMIDLIST iil2);
+
+LPITEMIDLIST WINAPI ILCombine(
+	LPCITEMIDLIST iil1,
+	LPCITEMIDLIST iil2);
 
 DWORD WINAPI ILGetSize(LPITEMIDLIST pidl);
 
 LPITEMIDLIST WINAPI ILGetNext(LPITEMIDLIST pidl);
 LPITEMIDLIST WINAPI ILFindLastID(LPITEMIDLIST pidl);
 BOOL WINAPI ILRemoveLastID(LPCITEMIDLIST pidl);
-LPITEMIDLIST WINAPI ILFindChild(LPCITEMIDLIST pidl1,LPCITEMIDLIST pidl2);
 
-BOOL WINAPI ILIsEqual(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2);
+LPITEMIDLIST WINAPI ILFindChild(
+	LPCITEMIDLIST pidl1,
+	LPCITEMIDLIST pidl2);
 
-BOOL WINAPI ILGetDisplayName(LPCITEMIDLIST pidl,LPSTR path);
+LPITEMIDLIST WINAPI ILAppendID(
+	LPITEMIDLIST pidl,
+	LPCSHITEMID lpItemID,
+	BOOL bAddToEnd);
+
+BOOL WINAPI ILIsEqual(
+	LPCITEMIDLIST pidl1,
+	LPCITEMIDLIST pidl2);
+
+BOOL WINAPI ILIsParent(
+	LPCITEMIDLIST pidlParent,
+	LPCITEMIDLIST pidlChild,
+	BOOL bImmediate);
+
+BOOL WINAPI ILGetDisplayName(
+	LPCITEMIDLIST pidl,
+	LPSTR path);
 
 DWORD WINAPI ILFree(LPITEMIDLIST pidl);
 
+HRESULT WINAPI ILSaveToStream(
+	LPSTREAM pstrm,
+	LPCITEMIDLIST pidl);
+
+HRESULT WINAPI ILLoadFromStream(
+	LPSTREAM pstrm,
+	LPITEMIDLIST *ppidl);
+
+LPITEMIDLIST WINAPI ILGlobalClone(LPCITEMIDLIST pidl);
+void WINAPI ILGlobalFree(LPCITEMIDLIST pidl);
+
 LPITEMIDLIST WINAPI SHSimpleIDListFromPathA (LPCSTR lpszPath);
 LPITEMIDLIST WINAPI SHSimpleIDListFromPathW (LPCWSTR lpszPath);
 LPITEMIDLIST WINAPI SHSimpleIDListFromPathAW (LPCVOID lpszPath);
 
-HRESULT WINAPI SHILCreateFromPathA (LPCSTR path, LPITEMIDLIST * ppidl, DWORD *attributes);
-HRESULT WINAPI SHILCreateFromPathW (LPCWSTR path, LPITEMIDLIST * ppidl, DWORD *attributes);
-HRESULT WINAPI SHILCreateFromPathAW (LPCVOID path, LPITEMIDLIST * ppidl, DWORD *attributes);
+HRESULT WINAPI SHILCreateFromPathA (
+	LPCSTR path,
+	LPITEMIDLIST * ppidl,
+	DWORD *attributes);
+
+HRESULT WINAPI SHILCreateFromPathW (
+	LPCWSTR path,
+	LPITEMIDLIST * ppidl,
+	DWORD *attributes);
+
+HRESULT WINAPI SHILCreateFromPathAW (
+	LPCVOID path,
+	LPITEMIDLIST * ppidl,
+	DWORD *attributes);
 
 LPITEMIDLIST WINAPI ILCreateFromPathA(LPCSTR path);
 LPITEMIDLIST WINAPI ILCreateFromPathW(LPCWSTR path);
 LPITEMIDLIST WINAPI ILCreateFromPathAW(LPCVOID path);
 
+HRESULT WINAPI SHBindToParent(
+	LPCITEMIDLIST pidl,
+	REFIID riid,
+	LPVOID *ppv,
+	LPCITEMIDLIST *ppidlLast);
+
 /*
 	string functions
 */
-HRESULT WINAPI SHBindToParent(LPCITEMIDLIST pidl, REFIID riid, LPVOID *ppv, LPCITEMIDLIST *ppidlLast);
+HRESULT WINAPI StrRetToStrNA (
+	LPVOID dest,
+	DWORD len,
+	LPSTRRET src,
+	LPITEMIDLIST pidl);
 
-HRESULT WINAPI StrRetToStrNA (LPVOID dest, DWORD len, LPSTRRET src, LPITEMIDLIST pidl);
-HRESULT WINAPI StrRetToStrNW (LPVOID dest, DWORD len, LPSTRRET src, LPITEMIDLIST pidl);
-HRESULT WINAPI StrRetToStrNAW (LPVOID dest, DWORD len, LPSTRRET src, LPITEMIDLIST pidl);
+HRESULT WINAPI StrRetToStrNW (
+	LPVOID dest,
+	DWORD len,
+	LPSTRRET src,
+	LPITEMIDLIST pidl);
 
-HRESULT WINAPI StrRetToBufA (LPSTRRET src, LPITEMIDLIST pidl, LPSTR dest, DWORD len);
-HRESULT WINAPI StrRetToBufW (LPSTRRET src, LPITEMIDLIST pidl, LPWSTR dest, DWORD len);
+HRESULT WINAPI StrRetToStrNAW (
+	LPVOID dest,
+	DWORD len,
+	LPSTRRET src,
+	LPITEMIDLIST pidl);
 
+HRESULT WINAPI StrRetToBufA (
+	LPSTRRET src,
+	LPITEMIDLIST pidl,
+	LPSTR dest,
+	DWORD len);
 
+HRESULT WINAPI StrRetToBufW (
+	LPSTRRET src,
+	LPITEMIDLIST pidl,
+	LPWSTR dest,
+	DWORD len);
 
 /****************************************************************************
 * SHChangeNotifyRegister API
@@ -78,16 +148,822 @@
 } DWORDITEMID;
 
 HANDLE WINAPI SHChangeNotifyRegister(
-    HWND hwnd,
-    LONG dwFlags,
-    LONG wEventMask,
-    DWORD uMsg,
-    int cItems,
-    LPCNOTIFYREGISTER lpItems);
+	HWND hwnd,
+	LONG dwFlags,
+	LONG wEventMask,
+	DWORD uMsg,
+	int cItems,
+	LPCNOTIFYREGISTER lpItems);
 
-BOOL WINAPI SHChangeNotifyDeregister( HANDLE hNotify);
+BOOL WINAPI SHChangeNotifyDeregister(HANDLE hNotify);
+
+HANDLE WINAPI SHChangeNotification_Lock(
+	HANDLE hMemoryMap,
+	DWORD dwProcessId,
+	LPCITEMIDLIST **lppidls,
+	LPLONG lpwEventId);
+
+BOOL WINAPI SHChangeNotification_Unlock(HANDLE hLock);
+
+/****************************************************************************
+ * Shell Common Dialogs
+ */
+
+BOOL WINAPI PickIconDlg(
+	HWND hwndOwner,
+	LPSTR lpstrFile,
+	DWORD nMaxFile,
+	LPDWORD lpdwIconIndex);
+
+/* RunFileDlg flags */
+#define RFF_NOBROWSE       0x01 
+#define RFF_NODEFAULT      0x02
+#define RFF_CALCDIRECTORY  0x04
+#define RFF_NOLABEL        0x08
+#define RFF_NOSEPARATEMEM  0x20  /* NT only */
+
+/* RunFileFlg notification structure */
+typedef struct
+{
+  NMHDR   hdr;
+  LPCSTR  lpFile;
+  LPCSTR  lpDirectory; 
+  int     nShow;
+} NM_RUNFILEDLG, * LPNM_RUNFILEDLG;
+
+/* RunFileDlg notification return values */
+#define RF_OK      0x00
+#define RF_CANCEL  0x01
+#define RF_RETRY   0x02
+
+void WINAPI RunFileDlg(
+	HWND hwndOwner,
+	HICON hIcon,
+	LPCSTR lpstrDirectory,
+	LPCSTR lpstrTitle,
+	LPCSTR lpstrDescription,
+	UINT uFlags);
+
+void WINAPI ExitWindowsDialog(HWND hwndOwner);
+
+int  WINAPI RestartDialog(
+	HWND hwndOwner,
+	LPCSTR lpstrReason,
+	UINT uFlags); 
+
+BOOL WINAPI GetFileNameFromBrowse(
+	HWND hwndOwner,
+	LPSTR lpstrFile,
+	DWORD nMaxFile,
+	LPCSTR lpstrInitialDir,
+	LPCSTR lpstrDefExt,
+	LPCSTR lpstrFilter,
+	LPCSTR lpstrTitle);
+
+BOOL WINAPI SHFindFiles(
+	LPCITEMIDLIST pidlRoot,
+	LPCITEMIDLIST pidlSavedSearch);
+
+BOOL WINAPI SHFindComputer(
+	LPCITEMIDLIST pidlRoot,
+	LPCITEMIDLIST pidlSavedSearch);
+ 
+/* SHObjectProperties flags */
+#define OPF_PRINTERNAME  0x01
+#define OPF_PATHNAME     0x02
+
+BOOL WINAPI SHObjectProperties(
+	HWND hwndOwner,
+	UINT uFlags,
+	LPCSTR lpstrName,
+	LPCSTR lpstrParameters);
+
+void WINAPI SHHandleDiskFull(HWND hwndOwner,
+	UINT uDrive);
+
+int  WINAPI SHOutOfMemoryMessageBox(
+	HWND hwndOwner,
+	LPCSTR lpCaption,
+	UINT uType);
+
+DWORD WINAPI SHNetConnectionDialog(
+	HWND hwndOwner,
+	LPCSTR lpstrRemoteName,
+	DWORD dwType);
+
+int WINAPIV ShellMessageBoxA(
+	HINSTANCE hInstance,
+	HWND hWnd,
+	LPCSTR lpText,
+	LPCSTR lpCaption,
+	UINT uType,
+	...);
+
+int WINAPIV ShellMessageBoxW(
+	HINSTANCE hInstance,
+	HWND hWnd,
+	LPCWSTR lpText,
+	LPCWSTR lpCaption,
+	UINT uType,
+	...);
+
+#define ShellMessageBox WINELIB_NAME_AW(ShellMessageBox)
+
+/****************************************************************************
+ * Memory Routines
+ */
+
+LPVOID WINAPI SHAlloc(ULONG cb);
+void WINAPI SHFree(LPVOID pv);
+
+HANDLE WINAPI SHAllocShared(
+	LPVOID pv,
+	ULONG cb,
+	DWORD pid);
+
+BOOL WINAPI SHFreeShared(
+	HANDLE hMem,
+	DWORD pid);
+
+LPVOID WINAPI SHLockShared(
+	HANDLE hMem,
+	DWORD pid);
+
+BOOL WINAPI SHUnlockShared(LPVOID pv);
+
+/****************************************************************************
+ * Cabinet Window Messages
+ */
+
+#define CWM_SETPATH           (WM_USER + 2)
+#define CWM_WANTIDLE	      (WM_USER + 3)
+#define CWM_GETSETCURRENTINFO (WM_USER + 4)
+#define CWM_SELECTITEM        (WM_USER + 5)
+#define CWM_SELECTITEMSTR     (WM_USER + 6)
+#define CWM_GETISHELLBROWSER  (WM_USER + 7)
+#define CWM_TESTPATH          (WM_USER + 9)
+#define CWM_STATECHANGE       (WM_USER + 10)
+#define CWM_GETPATH           (WM_USER + 12)
+
+/* CWM_TESTPATH types */
+#define CWTP_ISEQUAL  0 
+#define CWTP_ISCHILD  1 
+
+/* CWM_TESTPATH structure */
+typedef struct 
+{
+	DWORD dwType;
+	ITEMIDLIST idl;
+} CWTESTPATHSTRUCT,* LPCWTESTPATHSTRUCT;
+
+/****************************************************************************
+ * System Imagelist Routines
+ */
+
+int WINAPI Shell_GetCachedImageIndex(
+	LPCSTR lpszFileName,
+	UINT nIconIndex,
+	BOOL bSimulateDoc);
+
+BOOL WINAPI Shell_GetImageLists(
+	HIMAGELIST *lphimlLarge,
+	HIMAGELIST *lphimlSmall);
+
+HICON WINAPI SHGetFileIcon(
+	DWORD dwReserved,
+	LPCSTR lpszPath,
+	DWORD dwFileAttributes,
+	UINT uFlags);
+
+int WINAPI SHMapPIDLToSystemImageListIndex(
+	LPSHELLFOLDER psf,
+	LPCITEMIDLIST pidl,
+	UINT * pOpenIndex);
+
+BOOL WINAPI FileIconInit(BOOL bFullInit);
+
+/****************************************************************************
+ * File Menu Routines
+ */
+/* FileMenu_Create nSelHeight constants */
+#define FM_DEFAULT_SELHEIGHT  -1
+#define FM_FULL_SELHEIGHT     0
+
+/* FileMenu_Create flags */
+#define FMF_SMALL_ICONS      0x00
+#define FMF_LARGE_ICONS      0x08
+#define FMF_NO_COLUMN_BREAK  0x10
+
+HMENU WINAPI FileMenu_Create(
+	COLORREF crBorderColor,
+	int nBorderWidth,
+	HBITMAP hBorderBmp,
+	int nSelHeight,
+	UINT uFlags);
+
+void WINAPI FileMenu_Destroy(HMENU hMenu);
+
+/* FileMenu_AppendItem constants */
+#define FM_SEPARATOR       (LPCSTR)1
+#define FM_BLANK_ICON      -1
+#define FM_DEFAULT_HEIGHT  0
+
+BOOL WINAPI FileMenu_AppendItem(
+	HMENU hMenu,
+	LPCSTR lpszText,
+	UINT uID,
+	int iIcon,
+	HMENU hMenuPopup,
+	int nItemHeight);
+
+/* FileMenu_InsertUsingPidl flags */
+#define FMF_NO_EMPTY_ITEM      0x01
+#define FMF_NO_PROGRAM_GROUPS  0x04
+
+/* FileMenu_InsertUsingPidl callback function */
+typedef void (CALLBACK *LPFNFMCALLBACK)(LPCITEMIDLIST pidlFolder, LPCITEMIDLIST pidlFile);
+
+int WINAPI FileMenu_InsertUsingPidl(
+	HMENU hMenu,
+	UINT uID,
+	LPCITEMIDLIST pidl,
+	UINT uFlags,
+	UINT uEnumFlags,
+	LPFNFMCALLBACK lpfnCallback);
+
+int WINAPI FileMenu_ReplaceUsingPidl(
+	HMENU hMenu,
+	UINT uID,
+	LPCITEMIDLIST pidl,
+	UINT uEnumFlags,
+	LPFNFMCALLBACK lpfnCallback);
+
+void WINAPI FileMenu_Invalidate(HMENU hMenu);
+
+HMENU WINAPI FileMenu_FindSubMenuByPidl(
+	HMENU hMenu,
+	LPCITEMIDLIST pidl);
+
+BOOL WINAPI FileMenu_TrackPopupMenuEx(
+	HMENU hMenu,
+	UINT uFlags,
+	int x,
+	int y,
+	HWND hWnd,
+	LPTPMPARAMS lptpm);
+
+BOOL WINAPI FileMenu_GetLastSelectedItemPidls(
+	UINT uReserved,
+	LPITEMIDLIST *ppidlFolder,
+	LPITEMIDLIST *ppidlItem);
+
+LRESULT WINAPI FileMenu_MeasureItem(
+	HWND hWnd,
+	LPMEASUREITEMSTRUCT lpmis);
+
+LRESULT WINAPI FileMenu_DrawItem(
+	HWND hWnd,
+	LPDRAWITEMSTRUCT lpdis);
+
+BOOL WINAPI FileMenu_InitMenuPopup(HMENU hMenu);
+
+void WINAPI FileMenu_AbortInitMenu(void);
+
+LRESULT WINAPI FileMenu_HandleMenuChar(
+	HMENU hMenu,
+	WPARAM wParam);
+
+BOOL WINAPI FileMenu_DeleteAllItems(HMENU hMenu);
+
+BOOL WINAPI FileMenu_DeleteItemByCmd(
+	HMENU hMenu,
+	UINT uID);
+
+BOOL WINAPI FileMenu_DeleteItemByIndex(
+	HMENU hMenu,
+	UINT uPos);
+
+BOOL WINAPI FileMenu_DeleteMenuItemByFirstID(
+	HMENU hMenu,
+	UINT uID);
+
+BOOL WINAPI FileMenu_DeleteSeparator(HMENU hMenu);
+
+BOOL WINAPI FileMenu_EnableItemByCmd(
+	HMENU hMenu,
+	UINT uID,
+	BOOL bEnable);
+
+DWORD WINAPI FileMenu_GetItemExtent(
+	HMENU hMenu,
+	UINT uPos);
+
+int WINAPI FileMenu_AppendFilesForPidl(
+	HMENU hMenu,
+	LPCITEMIDLIST pidl,
+	BOOL bAddSeparator);
+
+int WINAPI FileMenu_AddFilesForPidl(
+	HMENU hMenu,
+	UINT uReserved,
+	UINT uID,
+	LPCITEMIDLIST pidl,
+	UINT uFlags,
+	UINT uEnumFlags,
+	LPFNFMCALLBACK lpfnCallback);
+
+/****************************************************************************
+ * Drag And Drop Routines
+ */
+HRESULT WINAPI SHLoadOLE(DWORD dwFlags);
+
+HRESULT WINAPI SHRegisterDragDrop(
+	HWND hWnd,
+	LPDROPTARGET lpDropTarget);
+
+HRESULT WINAPI SHRevokeDragDrop(HWND hWnd);
+
+HRESULT WINAPI SHDoDragDrop(
+	HWND hWnd,
+	LPDATAOBJECT lpDataObject,
+	LPDROPSOURCE lpDropSource,
+	DWORD dwOKEffect,
+	LPDWORD pdwEffect);
+
+BOOL WINAPI DAD_DragEnter(HWND hWnd);
+
+BOOL WINAPI DAD_DragEnterEx(
+	HWND hWnd,
+	POINT pt);
+
+BOOL WINAPI DAD_DragMove(POINT pt);
+
+/* DAD_AutoScroll return values */
+#define DAD_SCROLL_UP    1
+#define DAD_SCROLL_DOWN  2
+#define DAD_SCROLL_LEFT  4
+#define DAD_SCROLL_RIGHT 8
+
+/* DAD_AutoScroll sample structure */
+typedef struct 
+{
+	DWORD  dwCount;
+	DWORD  dwLastTime;
+	BOOL   bWrapped;
+	POINT  aptPositions[3];
+	DWORD  adwTimes[3];
+} SCROLLSAMPLES, *LPSCROLLSAMPLES;
+
+DWORD WINAPI DAD_AutoScroll(HWND hWnd,
+	LPSCROLLSAMPLES lpSamples,
+	LPPOINT lppt);
+
+BOOL WINAPI DAD_DragLeave();
+
+BOOL WINAPI DAD_SetDragImageFromListView(
+	HWND hWnd,
+	POINT pt);
+
+BOOL WINAPI DAD_SetDragImage(
+	HIMAGELIST himlTrack,
+	LPPOINT lppt);
+
+BOOL WINAPI DAD_ShowDragImage(BOOL bShow);
+
+HRESULT WINAPI SHCreateStdEnumFmtEtc(
+	DWORD cFormats,
+	const FORMATETC *lpFormats,
+	LPENUMFORMATETC *ppenumFormatetc);
+
+HRESULT WINAPI CIDLData_CreateFromIDArray(
+	LPCITEMIDLIST pidlFolder,
+	DWORD cpidlFiles,
+	LPCITEMIDLIST *lppidlFiles,
+	LPDATAOBJECT *ppdataObject);
+
+/****************************************************************************
+ * Path Manipulation Routines
+ */
+
+LPSTR WINAPI PathAppend(
+	LPSTR lpszPath1,
+	LPCSTR lpszPath2);
+
+LPSTR  WINAPI PathCombineA(LPSTR szDest, LPCSTR lpszDir, LPCSTR lpszFile);
+LPWSTR WINAPI PathCombineW(LPWSTR szDest, LPCWSTR lpszDir, LPCWSTR lpszFile);
+#define  PathCombine WINELIB_NAME_AW(PathCombine)
+LPVOID WINAPI PathCombineAW(LPVOID szDest, LPCVOID lpszDir, LPCVOID lpszFile);
+
+LPSTR  WINAPI PathAddBackslashA(LPSTR path);	
+LPWSTR WINAPI PathAddBackslashW(LPWSTR path);	
+#define  PathAddBackslash WINELIB_NAME_AW(PathAddBackslash)
+LPVOID  WINAPI PathAddBackslashAW(LPVOID path);	
+
+LPSTR WINAPI PathRemoveBackslashA(LPSTR lpszPath);
+LPWSTR WINAPI PathRemoveBackslashW(LPWSTR lpszPath);
+#define  PathRemoveBackslash WINELIB_NAME_AW(PathRemoveBackslash)
+
+LPSTR WINAPI PathBuildRoot(
+	LPSTR lpszPath,
+	int drive);
+
+LPSTR WINAPI PathFindExtensionA(LPCSTR path);
+LPWSTR WINAPI PathFindExtensionW(LPCWSTR path);
+#define  PathFindExtension WINELIB_NAME_AW(PathFindExtension)
+LPVOID WINAPI PathFindExtensionAW(LPCVOID path); 
+
+LPSTR WINAPI PathGetExtensionA(LPCSTR lpszPath);
+LPWSTR WINAPI PathGetExtensionW(LPCWSTR lpszPath);
+#define  PathGetExtension WINELIB_NAME_AW(PathGetExtension)
+LPVOID WINAPI PathGetExtensionAW(LPCVOID lpszPath); 
+
+LPSTR WINAPI PathGetArgs(LPCSTR lpszPath);
+
+BOOL WINAPI PathRemoveFileSpec(LPSTR lpszPath);
+
+LPSTR WINAPI PathGetShortPath(LPSTR lpszPath);
+
+LPSTR WINAPI PathRemoveBlanksA(LPSTR lpszPath);
+LPWSTR WINAPI PathRemoveBlanksW(LPWSTR lpszPath);
+#define  PathRemoveBlanks WINELIB_NAME_AW(PathRemoveBlanks)
+LPVOID WINAPI PathRemoveBlanksAW(LPVOID lpszPath);
+
+LPSTR  WINAPI PathQuoteSpacesA(LPCSTR path);	
+LPWSTR WINAPI PathQuoteSpacesW(LPCWSTR path);	
+#define  PathQuoteSpaces WINELIB_NAME_AW(PathQuoteSpaces)
+LPVOID  WINAPI PathQuoteSpacesAW(LPCVOID path);	
+
+void WINAPI PathUnquoteSpaces(LPSTR lpszPath);
+
+BOOL WINAPI PathIsUNCA(LPCSTR lpszPath);
+BOOL WINAPI PathIsUNCW(LPCWSTR lpszPath);
+#define  PathIsUNC WINELIB_NAME_AW(PathIsUNC)
+BOOL WINAPI PathIsUNCAW(LPCVOID lpszPath);
+
+BOOL WINAPI PathIsRelativeA(LPCSTR lpszPath);
+BOOL WINAPI PathIsRelativeW(LPCWSTR lpszPath);
+#define  PathIsRelative WINELIB_NAME_AW(PathIsRelative)
+BOOL WINAPI PathIsRelativeAW(LPCVOID lpszPath);
+
+BOOL WINAPI PathIsRootA(LPCSTR x);
+BOOL WINAPI PathIsRootW(LPCWSTR x);
+#define  PathIsRoot WINELIB_NAME_AW(PathIsRoot)
+BOOL WINAPI PathIsRootAW(LPCVOID x);
+
+BOOL WINAPI PathIsExe(LPCSTR lpszPath);
+
+BOOL WINAPI PathIsDirectory(LPCSTR lpszPath);
+
+BOOL WINAPI PathFileExists(LPCSTR lpszPath);
+
+BOOL WINAPI PathMatchSpecA(
+	LPCSTR lpszPath,
+	LPCSTR lpszSpec);
+BOOL WINAPI PathMatchSpecW(
+	LPCWSTR lpszPath,
+	LPCWSTR lpszSpec);
+#define  PathMatchSpec WINELIB_NAME_AW(PathMatchSpec)
+BOOL WINAPI PathMatchSpecAW(LPVOID lpszPath, LPVOID lpszSpec);
+
+BOOL WINAPI PathMakeUniqueName(
+	LPSTR lpszBuffer, 
+	DWORD dwBuffSize,
+	LPCSTR lpszShortName,
+	LPCSTR lpszLongName, 
+	LPCSTR lpszPathName);
+
+BOOL WINAPI PathYetAnotherMakeUniqueName(
+	LPSTR lpszBuffer,
+	LPCSTR lpszPathName,
+	LPCSTR lpszShortName,
+	LPCSTR lpszLongName);
+
+BOOL WINAPI PathFindOnPath(
+	LPSTR lpszFile, 
+	LPCSTR *alpszPaths);
+
+/* PathCleanupSpec return values */
+#define PCS_REPLACEDCHARS  0x00000001
+#define PCS_REMOVEDCHARS   0x00000002
+#define PCS_SHORTENED      0x00000004
+#define PCS_PATHTOOLONG    0x80000008
+
+DWORD WINAPI PathCleanupSpec(
+	LPCSTR lpszPath, 
+	LPSTR lpszFile);
+
+BOOL  WINAPI PathQualifyA(LPCSTR path);	
+BOOL WINAPI PathQualifyW(LPCWSTR path);	
+#define  PathQualify WINELIB_NAME_AW(PathQualify)
+BOOL  WINAPI PathQualifyAW(LPCVOID path);	
 
 
+/* PathResolve flags */
+#define PRF_CHECKEXISTANCE  0x01
+#define PRF_EXECUTABLE      0x02
+#define PRF_QUALIFYONPATH   0x04
+#define PRF_WINDOWS31       0x08
+
+BOOL WINAPI PathResolve(
+	LPSTR lpszPath,
+	LPCSTR *alpszPaths, 
+	DWORD dwFlags);
+
+BOOL WINAPI PathSetDlgItemPath(
+	HWND hDlg,
+	int nIDDlgItem, 
+	LPCSTR lpszPath);
+
+/* PathProcessCommand flags */
+#define PPCF_QUOTEPATH        0x01 /* implies PPCF_INCLUDEARGS */
+#define PPCF_INCLUDEARGS      0x02
+#define PPCF_NODIRECTORIES    0x10
+#define PPCF_DONTRESOLVE      0x20
+#define PPCF_PATHISRELATIVE   0x40
+
+int WINAPI PathProcessCommand(
+	LPCWSTR lpszPath,
+	LPWSTR lpszBuff, 
+	DWORD dwBuffSize,
+	DWORD dwFlags);
+
+void WINAPI PathStripPath(LPWSTR lpszPath);
+
+BOOL WINAPI PathStripToRoot(LPWSTR lpszPath);
+
+void WINAPI PathRemoveArgs(LPWSTR lpszPath);
+
+void WINAPI PathRemoveExtension(LPWSTR lpszPath);
+
+int WINAPI PathParseIconLocation(LPWSTR lpszPath);
+
+BOOL WINAPI PathIsSameRoot(
+	LPCWSTR lpszPath1,
+	LPCWSTR lpszPath2);
+
+BOOL WINAPI PathFindOnPathA(LPSTR sFile, LPCSTR sOtherDirs);
+BOOL WINAPI PathFindOnPathW(LPWSTR sFile, LPCWSTR sOtherDirs);
+#define PathFindOnPath WINELIB_NAME_AW(PathFindOnPath)
+BOOL WINAPI PathFindOnPathAW(LPVOID sFile, LPCVOID sOtherDirs);
+
+LPSTR WINAPI StrFormatByteSizeA ( DWORD dw, LPSTR pszBuf, UINT cchBuf );
+LPWSTR WINAPI StrFormatByteSizeW ( DWORD dw, LPWSTR pszBuf, UINT cchBuf );
+#define  StrFormatByteSize WINELIB_NAME_AW(StrFormatByteSize)
+
+DWORD WINAPI PathCleanupSpecA(LPSTR x, LPSTR y);
+DWORD WINAPI PathCleanupSpecW(LPWSTR x, LPWSTR y);
+#define  PathCleanupSpec WINELIB_NAME_AW(PathCleanupSpec)
+
+/****************************************************************************
+ * Shell Namespace Routines
+ */
+
+/* SHCreateShellFolderViewEx callback function */
+typedef HRESULT (CALLBACK* LPFNSFVCALLBACK)(
+	DWORD dwUser,
+	LPSHELLFOLDER pshf,
+	HWND hWnd,
+	UINT uMsg,
+	WPARAM wParam,
+	LPARAM lParam);
+
+/* SHCreateShellFolderViewEx structure */
+typedef struct 
+{
+  DWORD            dwSize;
+  LPSHELLFOLDER    pshf;
+  DWORD            dwUser;
+  LPCITEMIDLIST    pidlFolder;
+  DWORD            dwEventId;
+  LPFNSFVCALLBACK  lpfnCallback;
+  UINT             uViewMode;
+} SHELLFOLDERVIEWINFO, * LPSHELLFOLDERVIEWINFO;
+typedef const SHELLFOLDERVIEWINFO * LPCSHELLFOLDERVIEWINFO;
+
+HRESULT WINAPI SHCreateShellFolderViewEx(
+	LPCSHELLFOLDERVIEWINFO pshfvi,
+	LPSHELLVIEW *ppshv);
+
+/* SHCreateShellFolderViewEx callback messages */
+#define SFVCB_ADDTOMENU           0x0001
+#define SFVCB_INVOKECOMMAND       0x0002
+#define SFVCB_GETMENUHELP         0x0003
+#define SFVCB_GETTOOLBARTIP       0x0004
+#define SFVCB_GETTOOLBARINFO      0x0005
+#define SFVCB_ADDTOOLBARITEMS     0x0006
+#define SFVCB_INITMENUPOPUP       0x0007
+#define SFVCB_SELECTIONCHANGED    0x0008
+#define SFVCB_DRAWMENUITEM        0x0009
+#define SFVCB_MEASUREMENUITEM     0x000A
+#define SFVCB_EXITMENULOOP        0x000B
+#define SFVCB_VIEWRELEASE         0x000C
+#define SFVCB_GETNAMELENGTH       0x000D
+#define SFVCB_CHANGENOTIFY        0x000E
+#define SFVCB_WINDOWCREATED       0x000F
+#define SFVCB_WINDOWCLOSING       0x0010
+#define SFVCB_LISTREFRESHED       0x0011
+#define SFVCB_WINDOWFOCUSED       0x0012
+#define SFVCB_REGISTERCOPYHOOK    0x0014
+#define SFVCB_COPYHOOKCALLBACK    0x0015
+#define SFVCB_GETDETAILSOF        0x0017
+#define SFVCB_COLUMNCLICK         0x0018
+#define SFVCB_GETCHANGENOTIFYPIDL 0x0019
+#define SFVCB_GETESTIMATEDCOUNT   0x001A
+#define SFVCB_ADJUSTVIEWMODE      0x001B
+#define SFVCB_REMOVEFROMMENU      0x001C
+#define SFVCB_ADDINGOBJECT        0x001D
+#define SFVCB_REMOVINGOBJECT      0x001E
+#define SFVCB_UPDATESTATUSBAR     0x001F
+#define SFVCB_ISSLOWREFRESH       0x0020
+#define SFVCB_GETCOMMANDDIR       0x0021
+#define SFVCB_GETCOLUMNSTREAM     0x0022
+#define SFVCB_CANSELECTALL        0x0023
+#define SFVCB_DRAGSUCCEEDED       0x0024
+#define SFVCB_ISSTRICTREFRESH     0x0025
+#define SFVCB_ISCHILDOBJECT       0x0026
+
+/* Generic structure used by several messages */
+typedef struct 
+{
+  DWORD          dwReserved;
+  DWORD          dwReserved2;
+  LPCITEMIDLIST  pidl;
+  LPDWORD        lpdwUser;
+} SFVCBINFO, * LPSFVCBINFO;
+typedef const SFVCBINFO * LPCSFVCBINFO;
+
+/* SFVCB_ADDTOMENU structure */
+typedef struct  
+{
+  HMENU  hMenu;
+  UINT   indexMenu;
+  UINT   idCmdFirst;
+  UINT   idCmdLast;
+} SFVMENUINFO, * LPSFVMENUINFO;
+
+/* SFVCB_GETTOOLBARINFO structure */
+typedef struct 
+{
+  UINT  nButtons;
+  UINT  uFlags;
+} SFVTOOLBARINFO, * LPSFVTOOLBARINFO;
+
+/* SFVTOOLBARINFO flags */
+typedef enum 
+{
+  SFVTI_ADDTOEND   = 0,
+  SFVTI_ADDTOFRONT = 1,
+  SFVTI_OVERWRITE  = 2
+} SFVTIF; 
+
+/* SFVCB_SELECTIONCHANGED structure */
+typedef struct 
+{
+  UINT           uOldState;
+  UINT           uNewState;
+  LPCITEMIDLIST  pidl;
+  LPDWORD        lpdwUser;
+} SFVSELECTSTATE, * LPSFVSELECTSTATE;
+typedef const SFVSELECTSTATE * LPCSFVSELECTSTATE;
+
+/* SFVCB_COPYHOOKCALLBACK structure */
+typedef struct 
+{
+  HWND    hwnd;
+  UINT    wFunc;
+  UINT    wFlags;
+  LPCSTR  pszSrcFile;
+  DWORD   dwSrcAttribs;
+  LPCSTR  pszDestFile;
+  DWORD   dwDestAttribs;
+} SFVCOPYHOOKINFO, * LPSFVCOPYHOOKINFO;
+typedef const SFVCOPYHOOKINFO * LPCSFVCOPYHOOKINFO;
+
+/* SFVCB_GETDETAILSOF structure */
+typedef struct 
+{
+  LPCITEMIDLIST  pidl;
+  int            fmt;
+  int            cx;
+  STRRET         lpText;
+} SFVCOLUMNINFO, * LPSFVCOLUMNINFO;
+
+int WINAPI SHShellFolderView_Message(
+	HWND hwndCabinet, 
+	DWORD dwMessage,
+	DWORD dwParam); 
+
+/* SHShellFolderView_Message messages */
+#define SFVM_REARRANGE          0x0001
+#define SFVM_GETARRANGECOLUMN   0x0002
+#define SFVM_ADDOBJECT          0x0003
+#define SFVM_GETITEMCOUNT       0x0004
+#define SFVM_GETITEMPIDL        0x0005
+#define SFVM_REMOVEOBJECT       0x0006
+#define SFVM_UPDATEOBJECT       0x0007
+#define SFVM_SETREDRAW          0x0008
+#define SFVM_GETSELECTEDOBJECTS 0x0009
+#define SFVM_ISDROPONSOURCE     0x000A
+#define SFVM_MOVEICONS          0x000B
+#define SFVM_GETDRAGPOINT       0x000C
+#define SFVM_GETDROPPOINT       0x000D
+#define SFVM_SETOBJECTPOS       0x000E
+#define SFVM_ISDROPONBACKGROUND 0x000F
+#define SFVM_CUTOBJECTS         0x0010
+#define SFVM_TOGGLEAUTOARRANGE  0x0011
+#define SFVM_LINEUPICONS        0x0012
+#define SFVM_GETAUTOARRANGE     0x0013
+#define SFVM_GETSELECTEDCOUNT   0x0014
+#define SFVM_GETITEMSPACING     0x0015
+#define SFVM_REFRESHOBJECT      0x0016
+#define SFVM_SETCLIPBOARDPOINTS 0x0017
+
+/****************************************************************************
+ * Misc Stuff
+ */
+
+/* SHWaitForFileToOpen flags */
+#define SHWFF_ADD     0x01
+#define SHWFF_REMOVE  0x02
+#define SHWFF_WAIT    0x04
+
+BOOL WINAPI SHWaitForFileToOpen(
+	LPCITEMIDLIST pidl, 
+	DWORD dwFlags,
+	DWORD dwTimeout);
+
+WORD WINAPI ArrangeWindows(
+	HWND hwndParent,
+	DWORD dwReserved,
+	LPCRECT lpRect,
+	WORD cKids,
+	CONST HWND * lpKids);
+
+/* RegisterShellHook types */
+#define RSH_DEREGISTER        0
+#define RSH_REGISTER          1
+#define RSH_REGISTER_PROGMAN  2
+#define RSH_REGISTER_TASKMAN  3
+
+BOOL WINAPI RegisterShellHook(
+	HWND hWnd,
+	DWORD dwType);
+
+/* SHCreateDefClassObject callback function */
+typedef HRESULT (CALLBACK *LPFNCDCOCALLBACK)(
+	LPUNKNOWN pUnkOuter,
+	REFIID riidObject,
+	LPVOID *ppvObject);
+
+HRESULT WINAPI SHCreateDefClassObject(
+	REFIID riidFactory, 
+	LPVOID *ppvFactory,
+	LPFNCDCOCALLBACK lpfnCallback,
+	LPDWORD lpdwUsage, 
+	REFIID riidObject);
+
+HRESULT WINAPI SHCoCreateInstance(
+	LPCSTR lpszClsid, 
+	REFCLSID rClsid,
+	LPUNKNOWN pUnkOuter,
+	REFIID riid,
+	LPVOID *ppv);
+
+void WINAPI SHFreeUnusedLibraries();
+
+/* SHCreateLinks flags */
+#define SHCLF_PREFIXNAME       0x01
+#define SHCLF_CREATEONDESKTOP  0x02
+
+HRESULT WINAPI SHCreateLinks(
+	HWND hWnd,
+	LPCSTR lpszDir, 
+	LPDATAOBJECT lpDataObject,
+	UINT uFlags,
+	LPITEMIDLIST *lppidlLinks);
+
+/* SHGetNewLinkInfo flags */
+#define SHGNLI_PIDL        0x01
+#define SHGNLI_PREFIXNAME  0x02
+#define SHGNLI_NOUNIQUE    0x04
+
+BOOL WINAPI SHGetNewLinkInfoA(
+	LPCSTR pszLinkTo,
+	LPCSTR pszDir, 
+	LPSTR pszName,
+	BOOL *pfMustCopy,
+	UINT uFlags);
+
+BOOL WINAPI SHGetNewLinkInfoW(
+	LPCWSTR pszLinkTo,
+	LPCWSTR pszDir, 
+	LPWSTR pszName,
+	BOOL *pfMustCopy,
+	UINT uFlags);
+#define SHGetNewLinkInfo WINELIB_NAME_AW(SHGetNewLinkInfo)
+
+/* policy functions */
+BOOL WINAPI SHInitRestricted(LPSTR, LPSTR);
 
 #ifdef __cplusplus
 } /* extern "C" */