mingw-5.1.4/win32/include/shlobj.h
changeset 0 76b1f169d9fe
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mingw-5.1.4/win32/include/shlobj.h	Fri Apr 03 17:16:45 2009 +0100
@@ -0,0 +1,1535 @@
+#ifndef _SHLOBJ_H
+#define _SHLOBJ_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <ole2.h>
+#include <shlguid.h>
+#include <shellapi.h>
+#pragma pack(push,1)
+#include <commctrl.h>
+
+#define BIF_RETURNONLYFSDIRS 1
+#define BIF_DONTGOBELOWDOMAIN 2
+#define BIF_STATUSTEXT 4
+#define BIF_RETURNFSANCESTORS 8
+#define BIF_EDITBOX 16
+#define BIF_VALIDATE 32
+#define BIF_NEWDIALOGSTYLE 64
+#define BIF_BROWSEINCLUDEURLS 128
+#define BIF_USENEWUI ( BIF_EDITBOX | BIF_NEWDIALOGSTYLE )
+#define BIF_BROWSEFORCOMPUTER 0x1000
+#define BIF_BROWSEFORPRINTER 0x2000
+#define BIF_BROWSEINCLUDEFILES 0x4000
+#define BIF_SHAREABLE 0x8000
+#define BFFM_INITIALIZED 1
+#define BFFM_SELCHANGED 2
+#define BFFM_VALIDATEFAILEDA 3
+#define BFFM_VALIDATEFAILEDW 4
+#define BFFM_SETSTATUSTEXTA (WM_USER + 100)
+#define BFFM_SETSTATUSTEXTW (WM_USER + 104)
+#define BFFM_ENABLEOK (WM_USER + 101)
+#define BFFM_SETSELECTIONA (WM_USER + 102)
+#define BFFM_SETSELECTIONW (WM_USER + 103)
+#define BFFM_SETOKTEXT (WM_USER + 105)
+#define BFFM_SETEXPANDED (WM_USER + 106)
+#ifdef UNICODE
+#define BFFM_SETSTATUSTEXT  BFFM_SETSTATUSTEXTW
+#define BFFM_SETSELECTION   BFFM_SETSELECTIONW
+#define BFFM_VALIDATEFAILED BFFM_VALIDATEFAILEDW
+#else
+#define BFFM_SETSTATUSTEXT  BFFM_SETSTATUSTEXTA
+#define BFFM_SETSELECTION   BFFM_SETSELECTIONA
+#define BFFM_VALIDATEFAILED BFFM_VALIDATEFAILEDA
+#endif
+#define DVASPECT_SHORTNAME 2
+#define SHARD_PIDL	1
+#define SHARD_PATH	2
+#define SHCNE_RENAMEITEM	1
+#define SHCNE_CREATE	2
+#define SHCNE_DELETE	4
+#define SHCNE_MKDIR	8
+#define SHCNE_RMDIR	16
+#define SHCNE_MEDIAINSERTED	32
+#define SHCNE_MEDIAREMOVED	64
+#define SHCNE_DRIVEREMOVED	128
+#define SHCNE_DRIVEADD	256
+#define SHCNE_NETSHARE	512
+#define SHCNE_NETUNSHARE	1024
+#define SHCNE_ATTRIBUTES	2048
+#define SHCNE_UPDATEDIR	4096
+#define SHCNE_UPDATEITEM	8192
+#define SHCNE_SERVERDISCONNECT	16384
+#define SHCNE_UPDATEIMAGE	32768
+#define SHCNE_DRIVEADDGUI	65536
+#define SHCNE_RENAMEFOLDER	0x20000
+#define SHCNE_FREESPACE	0x40000
+#define SHCNE_ASSOCCHANGED	0x8000000
+#define SHCNE_DISKEVENTS	0x2381F
+#define SHCNE_GLOBALEVENTS	0xC0581E0
+#define SHCNE_ALLEVENTS	0x7FFFFFFF
+#define SHCNE_INTERRUPT	0x80000000
+#define SHCNF_IDLIST	0
+#define SHCNF_PATHA	1
+#define SHCNF_PRINTERA	2
+#define SHCNF_DWORD	3
+#define SHCNF_PATHW	5
+#define SHCNF_PRINTERW	6
+#define SHCNF_TYPE	0xFF
+#define SHCNF_FLUSH	0x1000
+#define SHCNF_FLUSHNOWAIT	0x2000
+#ifdef UNICODE
+#define SHCNF_PATH      SHCNF_PATHW
+#define SHCNF_PRINTER   SHCNF_PRINTERW
+#else
+#define SHCNF_PATH      SHCNF_PATHA
+#define SHCNF_PRINTER   SHCNF_PRINTERA
+#endif
+#define SFGAO_CANCOPY	DROPEFFECT_COPY
+#define SFGAO_CANMOVE	DROPEFFECT_MOVE
+#define SFGAO_CANLINK	DROPEFFECT_LINK
+#define SFGAO_CANRENAME		0x00000010L
+#define SFGAO_CANDELETE		0x00000020L
+#define SFGAO_HASPROPSHEET	0x00000040L
+#define SFGAO_DROPTARGET	0x00000100L
+#define SFGAO_CAPABILITYMASK	0x00000177L
+#define SFGAO_ISSLOW            0x00004000L
+#define SFGAO_GHOSTED		0x00008000L
+#define SFGAO_LINK		0x00010000L
+#define SFGAO_SHARE		0x00020000L
+#define SFGAO_READONLY		0x00040000L
+#define SFGAO_HIDDEN		0x00080000L
+#define SFGAO_DISPLAYATTRMASK   (SFGAO_ISSLOW \
+				 | SFGAO_GHOSTED \
+				 | SFGAO_LINK \
+				 | SFGAO_SHARE \
+				 | SFGAO_READONLY \
+				 | SFGAO_HIDDEN)
+#define SFGAO_FILESYSANCESTOR	0x10000000L
+#define SFGAO_FOLDER		0x20000000L
+#define SFGAO_FILESYSTEM	0x40000000L
+#define SFGAO_HASSUBFOLDER	0x80000000L
+#define SFGAO_CONTENTSMASK	0x80000000L
+#define SFGAO_VALIDATE		0x01000000L
+#define SFGAO_REMOVABLE		0x02000000L
+#define SFGAO_COMPRESSED	0x04000000L
+#define STRRET_WSTR	0
+#define STRRET_OFFSET	1
+#define STRRET_CSTR	2
+#define SHGDFIL_FINDDATA	1
+#define SHGDFIL_NETRESOURCE	2
+#define SHGDFIL_DESCRIPTIONID	3
+#define SHDID_ROOT_REGITEM	1
+#define SHDID_FS_FILE	2
+#define SHDID_FS_DIRECTORY	3
+#define SHDID_FS_OTHER	4
+#define SHDID_COMPUTER_DRIVE35	5
+#define SHDID_COMPUTER_DRIVE525	6
+#define SHDID_COMPUTER_REMOVABLE	7
+#define SHDID_COMPUTER_FIXED	8
+#define SHDID_COMPUTER_NETDRIVE	9
+#define SHDID_COMPUTER_CDROM	10
+#define SHDID_COMPUTER_RAMDISK	11
+#define SHDID_COMPUTER_OTHER	12
+#define SHDID_NET_DOMAIN	13
+#define SHDID_NET_SERVER	14
+#define SHDID_NET_SHARE	15
+#define SHDID_NET_RESTOFNET	16
+#define SHDID_NET_OTHER	17
+#ifndef REGSTR_PATH_EXPLORER
+#define REGSTR_PATH_EXPLORER	TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer")
+#endif
+#define REGSTR_PATH_SPECIAL_FOLDERS	REGSTR_PATH_EXPLORER TEXT("\\Shell Folders")
+#define CSIDL_DESKTOP	0
+#define CSIDL_INTERNET  1
+#define CSIDL_PROGRAMS	2
+#define CSIDL_CONTROLS	3
+#define CSIDL_PRINTERS	4
+#define CSIDL_PERSONAL	5
+#define CSIDL_FAVORITES	6
+#define CSIDL_STARTUP	7
+#define CSIDL_RECENT	8
+#define CSIDL_SENDTO	9
+#define CSIDL_BITBUCKET	10
+#define CSIDL_STARTMENU	11
+#define CSIDL_MYMUSIC	13
+#define CSIDL_MYVIDEO	14
+#define CSIDL_DESKTOPDIRECTORY	16
+#define CSIDL_DRIVES	17
+#define CSIDL_NETWORK	18
+#define CSIDL_NETHOOD	19
+#define CSIDL_FONTS	20
+#define CSIDL_TEMPLATES	21
+#define CSIDL_COMMON_STARTMENU	22
+#define CSIDL_COMMON_PROGRAMS	23
+#define CSIDL_COMMON_STARTUP	24
+#define CSIDL_COMMON_DESKTOPDIRECTORY	25
+#define CSIDL_APPDATA   26
+#define CSIDL_PRINTHOOD 27
+#define CSIDL_LOCAL_APPDATA 28
+#define CSIDL_ALTSTARTUP    29
+#define CSIDL_COMMON_ALTSTARTUP	30
+#define CSIDL_COMMON_FAVORITES	31
+#define CSIDL_INTERNET_CACHE   32
+#define CSIDL_COOKIES	33
+#define CSIDL_HISTORY	34
+#define CSIDL_COMMON_APPDATA	35
+#define CSIDL_WINDOWS	36
+#define CSIDL_SYSTEM	37
+#define CSIDL_PROGRAM_FILES	38
+#define CSIDL_MYPICTURES	39
+#define CSIDL_PROFILE	40
+#define CSIDL_SYSTEMX86	41
+#define CSIDL_PROGRAM_FILESX86	42
+#define CSIDL_PROGRAM_FILES_COMMON	43
+#define CSIDL_PROGRAM_FILES_COMMONX86	44
+#define CSIDL_COMMON_TEMPLATES	45
+#define CSIDL_COMMON_DOCUMENTS	46
+#define CSIDL_COMMON_ADMINTOOLS	47
+#define CSIDL_ADMINTOOLS	48
+#define CSIDL_CONNECTIONS	49
+#define CSIDL_COMMON_MUSIC	53
+#define CSIDL_COMMON_PICTURES	54
+#define CSIDL_COMMON_VIDEO	55
+#define CSIDL_RESOURCES	56
+#define CSIDL_RESOURCES_LOCALIZED	57
+#define CSIDL_COMMON_OEM_LINKS	58
+#define CSIDL_CDBURN_AREA	59
+#define CSIDL_COMPUTERSNEARME	61
+#define CSIDL_FLAG_DONT_VERIFY	0x4000
+#define CSIDL_FLAG_CREATE	0x8000
+#define CSIDL_FLAG_MASK	0xFF00
+#define CFSTR_SHELLIDLIST	TEXT("Shell IDList Array")
+#define CFSTR_SHELLIDLISTOFFSET	TEXT("Shell Object Offsets")
+#define CFSTR_NETRESOURCES	TEXT("Net Resource")
+#define CFSTR_FILECONTENTS	TEXT("FileContents")
+#define CFSTR_FILENAMEA		TEXT("FileName")
+#define CFSTR_FILENAMEMAPA	TEXT("FileNameMap")
+#define CFSTR_FILEDESCRIPTORA	TEXT("FileGroupDescriptor")
+#define CFSTR_INETURLA		TEXT("UniformResourceLocator")
+#define CFSTR_SHELLURL		CFSTR_INETURLA
+#define CFSTR_FILENAMEW		TEXT("FileNameW")
+#define CFSTR_FILENAMEMAPW	TEXT("FileNameMapW")
+#define CFSTR_FILEDESCRIPTORW	TEXT("FileGroupDescriptorW")
+#define CFSTR_INETURLW		TEXT("UniformResourceLocatorW")
+#ifdef UNICODE
+#define CFSTR_FILENAME		CFSTR_FILENAMEW
+#define CFSTR_FILENAMEMAP	CFSTR_FILENAMEMAPW
+#define CFSTR_FILEDESCRIPTOR	CFSTR_FILEDESCRIPTORW
+#define CFSTR_INETURL		CFSTR_INETURLW
+#else
+#define CFSTR_FILENAME		CFSTR_FILENAMEA
+#define CFSTR_FILENAMEMAP	CFSTR_FILENAMEMAPA
+#define CFSTR_FILEDESCRIPTOR	CFSTR_FILEDESCRIPTORA
+#define CFSTR_INETURL		CFSTR_INETURLA
+#endif
+#define CFSTR_PRINTERGROUP	TEXT("PrinterFriendlyName")
+#define CFSTR_INDRAGLOOP	TEXT("InShellDragLoop")
+#define CFSTR_PASTESUCCEEDED	TEXT("Paste Succeeded")
+#define CFSTR_PERFORMEDDROPEFFECT	TEXT("Performed DropEffect")
+#define CFSTR_PREFERREDDROPEFFECT	TEXT("Preferred DropEffect")
+#define CMF_NORMAL	0
+#define CMF_DEFAULTONLY	1
+#define CMF_VERBSONLY	2
+#define CMF_EXPLORE	4
+#define CMF_NOVERBS	8
+#define CMF_CANRENAME	16
+#define CMF_NODEFAULT	32
+#define CMF_INCLUDESTATIC	64
+#define CMF_RESERVED	0xffff0000
+#define GCS_VERBA        0
+#define GCS_HELPTEXTA    1
+#define GCS_VALIDATEA    2
+#define GCS_VERBW        4
+#define GCS_HELPTEXTW    5
+#define GCS_VALIDATEW    6
+#define GCS_UNICODE      4
+#ifdef UNICODE
+#define GCS_VERB        GCS_VERBW
+#define GCS_HELPTEXT    GCS_HELPTEXTW
+#define GCS_VALIDATE    GCS_VALIDATEW
+#else
+#define GCS_VERB        GCS_VERBA
+#define GCS_HELPTEXT    GCS_HELPTEXTA
+#define GCS_VALIDATE    GCS_VALIDATEA
+#endif
+#define CMDSTR_NEWFOLDERA	"NewFolder"
+#define CMDSTR_VIEWLISTA	"ViewList"
+#define CMDSTR_VIEWDETAILSA	"ViewDetails"
+#define CMDSTR_NEWFOLDERW	L"NewFolder"
+#define CMDSTR_VIEWLISTW	L"ViewList"
+#define CMDSTR_VIEWDETAILSW	L"ViewDetails"
+#ifdef UNICODE
+#define CMDSTR_NEWFOLDER	CMDSTR_NEWFOLDERW
+#define CMDSTR_VIEWLIST		CMDSTR_VIEWLISTW
+#define CMDSTR_VIEWDETAILS	CMDSTR_VIEWDETAILSW
+#else
+#define CMDSTR_NEWFOLDER	CMDSTR_NEWFOLDER
+#define CMDSTR_VIEWLIST		CMDSTR_VIEWLIST
+#define CMDSTR_VIEWDETAILS	CMDSTR_VIEWDETAILS
+#endif
+#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_MODAL	0x80000000
+#define CMIC_VALID_SEE_FLAGS	SEE_VALID_CMIC_FLAGS
+#define GIL_OPENICON	1
+#define GIL_FORSHELL	2
+#define GIL_SIMULATEDOC	1
+#define GIL_PERINSTANCE	2
+#define GIL_PERCLASS	4
+#define GIL_NOTFILENAME	8
+#define GIL_DONTCACHE	16
+#define FVSIF_RECT	1
+#define FVSIF_PINNED	2
+#define FVSIF_NEWFAILED 0x8000000
+#define FVSIF_NEWFILE	0x80000000
+#define FVSIF_CANVIEWIT 0x40000000
+#define CDBOSC_SETFOCUS	0
+#define CDBOSC_KILLFOCUS	1
+#define CDBOSC_SELCHANGE	2
+#define CDBOSC_RENAME	3
+#define FCIDM_SHVIEWFIRST	0
+#define FCIDM_SHVIEWLAST	0x7fff
+#define FCIDM_BROWSERFIRST	0xa000
+#define FCIDM_BROWSERLAST	0xbf00
+#define FCIDM_GLOBALFIRST	0x8000
+#define FCIDM_GLOBALLAST	0x9fff
+#define FCIDM_MENU_FILE	FCIDM_GLOBALFIRST
+#define FCIDM_MENU_EDIT	(FCIDM_GLOBALFIRST+0x0040)
+#define FCIDM_MENU_VIEW	(FCIDM_GLOBALFIRST+0x0080)
+#define FCIDM_MENU_VIEW_SEP_OPTIONS	(FCIDM_GLOBALFIRST+0x0081)
+#define FCIDM_MENU_TOOLS	(FCIDM_GLOBALFIRST+0x00c0)
+#define FCIDM_MENU_TOOLS_SEP_GOTO	(FCIDM_GLOBALFIRST+0x00c1)
+#define FCIDM_MENU_HELP	(FCIDM_GLOBALFIRST+0x0100)
+#define FCIDM_MENU_FIND	(FCIDM_GLOBALFIRST+0x0140)
+#define FCIDM_MENU_EXPLORE	(FCIDM_GLOBALFIRST+0x0150)
+#define FCIDM_MENU_FAVORITES	(FCIDM_GLOBALFIRST+0x0170)
+#define FCIDM_TOOLBAR	FCIDM_BROWSERFIRST
+#define FCIDM_STATUS	(FCIDM_BROWSERFIRST+1)
+#define SBSP_DEFBROWSER	0
+#define SBSP_SAMEBROWSER	1
+#define SBSP_NEWBROWSER	2
+#define SBSP_DEFMODE	0
+#define SBSP_OPENMODE	16
+#define SBSP_EXPLOREMODE	32
+#define SBSP_ABSOLUTE	0
+#define SBSP_RELATIVE	0x1000
+#define SBSP_PARENT	0x2000
+#define SBSP_INITIATEDBYHLINKFRAME	0x80000000
+#define SBSP_REDIRECT	0x40000000
+#define FCW_STATUS	1
+#define FCW_TOOLBAR	2
+#define FCW_TREE	3
+#define FCT_MERGE	1
+#define FCT_CONFIGABLE	2
+#define FCT_ADDTOEND	4
+#define SVSI_DESELECT	0
+#define SVSI_SELECT	1
+#define SVSI_EDIT	3
+#define SVSI_DESELECTOTHERS	4
+#define SVSI_ENSUREVISIBLE	8
+#define SVSI_FOCUSED	16
+#define SVGIO_BACKGROUND	0
+#define SVGIO_SELECTION	1
+#define SVGIO_ALLVIEW	2
+#define SV2GV_CURRENTVIEW ((UINT)-1)
+#define SV2GV_DEFAULTVIEW ((UINT)-2)
+
+typedef ULONG SFGAOF;
+typedef DWORD SHGDNF;
+
+typedef struct _IDA {
+	UINT cidl;
+	UINT aoffset[1];
+} CIDA,*LPIDA;
+typedef struct _SHITEMID {
+	USHORT	cb;
+	BYTE	abID[1];
+} SHITEMID, * LPSHITEMID;
+typedef const SHITEMID *LPCSHITEMID;
+typedef struct _ITEMIDLIST {
+	SHITEMID mkid;
+} ITEMIDLIST,*LPITEMIDLIST;
+typedef const ITEMIDLIST *LPCITEMIDLIST;
+typedef int (CALLBACK* BFFCALLBACK)(HWND,UINT,LPARAM,LPARAM);
+typedef struct _browseinfoA {
+	HWND	hwndOwner;
+	LPCITEMIDLIST	pidlRoot;
+	LPSTR	pszDisplayName;
+	LPCSTR	lpszTitle;
+	UINT	ulFlags;
+	BFFCALLBACK	lpfn;
+	LPARAM	lParam;
+	int	iImage;
+} BROWSEINFOA,*PBROWSEINFOA,*LPBROWSEINFOA;
+typedef struct _browseinfoW {
+	HWND	hwndOwner;
+	LPCITEMIDLIST	pidlRoot;
+	LPWSTR	pszDisplayName;
+	LPCWSTR	lpszTitle;
+	UINT	ulFlags;
+	BFFCALLBACK	lpfn;
+	LPARAM	lParam;
+	int	iImage;
+} BROWSEINFOW,*PBROWSEINFOW,*LPBROWSEINFOW;
+typedef struct _CMInvokeCommandInfo {
+	DWORD cbSize;
+	DWORD fMask;
+	HWND hwnd;
+	LPCSTR lpVerb;
+	LPCSTR lpParameters;
+	LPCSTR lpDirectory;
+	int nShow;
+	DWORD dwHotKey;
+	HANDLE hIcon;
+} CMINVOKECOMMANDINFO,*LPCMINVOKECOMMANDINFO;
+typedef struct _DROPFILES {
+	DWORD pFiles;
+	POINT pt;
+	BOOL fNC;
+	BOOL fWide;
+} DROPFILES,*LPDROPFILES;
+typedef enum tagSHGDN {
+	SHGDN_NORMAL=0,
+	SHGDN_INFOLDER,
+	SHGDN_FOREDITING=0x1000,
+	SHGDN_INCLUDE_NONFILESYS=0x2000,
+	SHGDN_FORADDRESSBAR=0x4000,
+	SHGDN_FORPARSING=0x8000
+} SHGNO;
+typedef enum tagSHCONTF {
+	SHCONTF_FOLDERS = 32,
+	SHCONTF_NONFOLDERS = 64,
+	SHCONTF_INCLUDEHIDDEN = 128,
+	SHCONTF_INIT_ON_FIRST_NEXT = 256,
+	SHCONTF_NETPRINTERSRCH = 512,
+	SHCONTF_SHAREABLE = 1024,
+	SHCONTF_STORAGE = 2048
+} SHCONTF;
+typedef struct _STRRET {
+	UINT uType;
+	_ANONYMOUS_UNION union {
+		LPWSTR pOleStr;
+		UINT uOffset;
+		char cStr[MAX_PATH];
+	} DUMMYUNIONNAME;
+} STRRET,*LPSTRRET;
+typedef enum {
+	FD_CLSID=1,FD_SIZEPOINT=2,FD_ATTRIBUTES=4,FD_CREATETIME=8,FD_ACCESSTIME=16,
+	FD_WRITESTIME=32,FD_FILESIZE=64,FD_LINKUI=0x8000
+} FD_FLAGS;
+typedef struct _FILEDESCRIPTORA {
+	DWORD dwFlags;
+	CLSID clsid;
+	SIZEL sizel;
+	POINTL pointl;
+	DWORD dwFileAttributes;
+	FILETIME ftCreationTime;
+	FILETIME ftLastAccessTime;
+	FILETIME ftLastWriteTime;
+	DWORD nFileSizeHigh;
+	DWORD nFileSizeLow;
+	CHAR cFileName[MAX_PATH];
+} FILEDESCRIPTORA,*LPFILEDESCRIPTORA;
+typedef struct _FILEDESCRIPTORW {
+	DWORD dwFlags;
+	CLSID clsid;
+	SIZEL sizel;
+	POINTL pointl;
+	DWORD dwFileAttributes;
+	FILETIME ftCreationTime;
+	FILETIME ftLastAccessTime;
+	FILETIME ftLastWriteTime;
+	DWORD nFileSizeHigh;
+	DWORD nFileSizeLow;
+	WCHAR cFileName[MAX_PATH];
+} FILEDESCRIPTORW,*LPFILEDESCRIPTORW;
+typedef struct _FILEGROUPDESCRIPTORA {
+	UINT cItems;
+	FILEDESCRIPTORA fgd[1];
+} FILEGROUPDESCRIPTORA,*LPFILEGROUPDESCRIPTORA;
+typedef struct _FILEGROUPDESCRIPTORW {
+	UINT cItems;
+	FILEDESCRIPTORW fgd[1];
+} FILEGROUPDESCRIPTORW,*LPFILEGROUPDESCRIPTORW;
+typedef enum {
+	SLR_NO_UI=1,
+	SLR_ANY_MATCH=2,
+	SLR_UPDATE=4,
+	SLR_NOUPDATE=8,
+	SLR_NOSEARCH=16,
+	SLR_NOTRACK=32,
+	SLR_NOLINKINFO=64,
+	SLR_INVOKE_MSI=128
+} SLR_FLAGS;
+typedef enum {
+	SLGP_SHORTPATH=1,
+	SLGP_UNCPRIORITY=2,
+	SLGP_RAWPATH=4
+} SLGP_FLAGS;
+typedef PBYTE LPVIEWSETTINGS;
+typedef enum {
+	FWF_AUTOARRANGE=1,FWF_ABBREVIATEDNAMES=2,FWF_SNAPTOGRID=4,FWF_OWNERDATA=8,
+	FWF_BESTFITWINDOW=16,FWF_DESKTOP=32,FWF_SINGLESEL=64,FWF_NOSUBFOLDERS=128,
+	FWF_TRANSPARENT=256,FWF_NOCLIENTEDGE=512,FWF_NOSCROLL=0x400,FWF_ALIGNLEFT=0x800,
+	FWF_SINGLECLICKACTIVATE=0x8000
+} FOLDERFLAGS;
+typedef enum {
+	FVM_ICON=1,
+	FVM_SMALLICON,
+	FVM_LIST,
+	FVM_DETAILS
+} FOLDERVIEWMODE;
+typedef struct {
+	UINT ViewMode;
+	UINT fFlags;
+} FOLDERSETTINGS,*LPFOLDERSETTINGS;
+typedef const FOLDERSETTINGS *LPCFOLDERSETTINGS;
+typedef struct {
+    DWORD cbSize;
+	HWND hwndOwner;
+	int iShow;
+	DWORD dwFlags;
+	RECT rect;
+	LPUNKNOWN punkRel;
+	OLECHAR strNewFile[MAX_PATH];
+} FVSHOWINFO,*LPFVSHOWINFO;
+typedef struct _NRESARRAY {
+	UINT cItems;
+	NETRESOURCE nr[1];
+} NRESARRAY, *LPNRESARRAY;
+enum { SBSC_HIDE,SBSC_SHOW,SBSC_TOGGLE,SBSC_QUERY };
+enum {
+	SBCMDID_ENABLESHOWTREE,SBCMDID_SHOWCONTROL,SBCMDID_CANCELNAVIGATION,
+	SBCMDID_MAYSAVECHANGES,SBCMDID_SETHLINKFRAME,SBCMDID_ENABLESTOP,SBCMDID_OPTIONS
+};
+typedef enum {
+	SVUIA_DEACTIVATE,SVUIA_ACTIVATE_NOFOCUS,SVUIA_ACTIVATE_FOCUS,
+	SVUIA_INPLACEACTIVATE
+} SVUIA_STATUS;
+#if (_WIN32_IE >= 0x0500)
+typedef struct tagEXTRASEARCH
+{
+	GUID guidSearch;
+	WCHAR wszFriendlyName[80];
+	WCHAR wszUrl[2084];
+} EXTRASEARCH, *LPEXTRASEARCH;
+typedef DWORD SHCOLSTATEF;
+typedef struct
+{
+	GUID fmtid;
+	DWORD pid;
+} SHCOLUMNID, *LPSHCOLUMNID;
+typedef const SHCOLUMNID *LPCSHCOLUMNID;
+typedef struct _SHELLDETAILS
+{
+	int fmt; 
+	int cxChar;
+	STRRET str;
+} SHELLDETAILS, *LPSHELLDETAILS;
+typedef struct
+{
+	LPITEMIDLIST pidlTargetFolder;
+	WCHAR szTargetParsingName[MAX_PATH];
+	WCHAR szNetworkProvider[MAX_PATH];
+	DWORD dwAttributes;
+	int csidl;
+} PERSIST_FOLDER_TARGET_INFO;
+
+typedef enum {
+	SHGFP_TYPE_CURRENT = 0,
+	SHGFP_TYPE_DEFAULT = 1,
+} SHGFP_TYPE;
+#endif
+
+
+DECLARE_ENUMERATOR_(IEnumIDList,LPITEMIDLIST);
+typedef IEnumIDList *LPENUMIDLIST;
+
+#ifdef COBJMACROS
+#define IEnumIDList_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
+#define IEnumIDList_Release(T) (T)->lpVtbl->AddRef(T)
+#define IEnumIDList_AddRef(T) (T)->lpVtbl->Release(T)
+#define IEnumIDList_Next(T,a,b,c) (T)->lpVtbl->Next(T,a,b,c)
+#define IEnumIDList_Skip(T,a) (T)->lpVtbl->Skip(T,a)
+#define IEnumIDList_Reset(T) (T)->lpVtbl->Reset(T)
+#define IEnumIDList_Clone(T,a) (T)->lpVtbl->Clone(T,a)
+#endif
+
+#define INTERFACE IObjMgr
+DECLARE_INTERFACE_(IObjMgr, IUnknown)
+{
+	STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+	STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+	STDMETHOD_(ULONG,Release)(THIS) PURE;
+	STDMETHOD(Append)(THIS_ IUnknown*) PURE;
+	STDMETHOD(Remove)(THIS_ IUnknown*) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE IContextMenu
+DECLARE_INTERFACE_(IContextMenu,IUnknown)
+{
+	STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+	STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+	STDMETHOD_(ULONG,Release)(THIS) PURE;
+	STDMETHOD(QueryContextMenu)(THIS_ HMENU,UINT,UINT,UINT,UINT) PURE;
+	STDMETHOD(InvokeCommand)(THIS_ LPCMINVOKECOMMANDINFO) PURE;
+	STDMETHOD(GetCommandString)(THIS_ UINT,UINT,PUINT,LPSTR,UINT) PURE;
+};
+#undef INTERFACE
+typedef IContextMenu *LPCONTEXTMENU;
+
+#ifdef COBJMACROS
+#define IContextMenu_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
+#define IContextMenu_AddRef(T) (T)->lpVtbl->AddRef(T)
+#define IContextMenu_Release(T) (T)->lpVtbl->Release(T)
+#define IContextMenu_QueryContextMenu(T,a,b,c,d,e) (T)->lpVtbl->QueryContextMenu(T,a,b,c,d,e)
+#define IContextMenu_InvokeCommand(T,a) (T)->lpVtbl->InvokeCommand(T,a)
+#define IContextMenu_GetCommandString(T,a,b,c,d,e) (T)->lpVtbl->GetCommandString(T,a,b,c,d,e)
+#endif
+
+#define INTERFACE IContextMenu2
+DECLARE_INTERFACE_(IContextMenu2,IContextMenu)
+{
+	STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+	STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+	STDMETHOD_(ULONG,Release)(THIS) PURE;
+	STDMETHOD(QueryContextMenu)(THIS_ HMENU,UINT,UINT,UINT,UINT) PURE;
+	STDMETHOD(InvokeCommand)(THIS_ LPCMINVOKECOMMANDINFO) PURE;
+	STDMETHOD(GetCommandString)(THIS_ UINT,UINT,PUINT,LPSTR,UINT) PURE;
+	STDMETHOD(HandleMenuMsg)(THIS_ UINT,WPARAM,LPARAM) PURE;
+};
+#undef INTERFACE
+typedef IContextMenu2 *LPCONTEXTMENU2;
+
+#define INTERFACE IContextMenu3
+DECLARE_INTERFACE_(IContextMenu3,IContextMenu2)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(QueryContextMenu)(THIS_ HMENU,UINT,UINT,UINT,UINT) PURE;
+ STDMETHOD(InvokeCommand)(THIS_ LPCMINVOKECOMMANDINFO) PURE;
+ STDMETHOD(GetCommandString)(THIS_ UINT,UINT,PUINT,LPSTR,UINT) PURE;
+ STDMETHOD(HandleMenuMsg)(THIS_ UINT,WPARAM,LPARAM) PURE;
+ STDMETHOD(HandleMenuMsg2)(THIS_ UINT,WPARAM,LPARAM,LRESULT*) PURE;
+};
+#undef INTERFACE
+typedef IContextMenu3 *LPCONTEXTMENU3;
+
+#if (_WIN32_IE >= 0x0500)
+#pragma pack(push,8)
+typedef struct {
+	ULONG dwFlags;
+	ULONG dwReserved;
+	WCHAR wszFolder[MAX_PATH];
+} SHCOLUMNINIT,*LPSHCOLUMNINIT;
+typedef const SHCOLUMNINIT* LPCSHCOLUMNINIT;
+typedef struct {
+	ULONG dwFlags;
+	DWORD dwFileAttributes;
+	ULONG dwReserved;
+	WCHAR *pwszExt;
+	WCHAR wszFile[MAX_PATH];
+} SHCOLUMNDATA,*LPSHCOLUMNDATA;
+typedef const SHCOLUMNDATA* LPCSHCOLUMNDATA;
+#pragma pack(pop)
+
+#define MAX_COLUMN_NAME_LEN 80
+#define MAX_COLUMN_DESC_LEN 128
+
+#pragma pack(push,1)
+typedef struct {
+	SHCOLUMNID scid;
+	VARTYPE vt;
+	DWORD fmt;
+	UINT cChars;
+	DWORD csFlags;
+	WCHAR wszTitle[MAX_COLUMN_NAME_LEN];
+	WCHAR wszDescription[MAX_COLUMN_DESC_LEN];
+} SHCOLUMNINFO,*LPSHCOLUMNINFO;
+typedef const SHCOLUMNINFO* LPCSHCOLUMNINFO;
+#pragma pack(pop)
+
+typedef enum {
+	SHCOLSTATE_TYPE_STR = 0x00000001,
+	SHCOLSTATE_TYPE_INT = 0x00000002,
+	SHCOLSTATE_TYPE_DATE = 0x00000003,
+	SHCOLSTATE_TYPEMASK = 0x0000000f,
+	SHCOLSTATE_ONBYDEFAULT = 0x00000010,
+	SHCOLSTATE_SLOW = 0x00000020,
+	SHCOLSTATE_EXTENDED = 0x00000040,
+	SHCOLSTATE_SECONDARYUI = 0x00000080,
+	SHCOLSTATE_HIDDEN = 0x00000100,
+	SHCOLSTATE_PREFER_VARCMP = 0x00000200
+} SHCOLSTATE;
+
+#ifdef COBJMACROS
+#define IContextMenu2_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
+#define IContextMenu2_AddRef(T) (T)->lpVtbl->AddRef(T)
+#define IContextMenu2_Release(T) (T)->lpVtbl->Release(T)
+#define IContextMenu2_QueryContextMenu(T,a,b,c,d,e) (T)->lpVtbl->QueryContextMenu(T,a,b,c,d,e)
+#define IContextMenu2_InvokeCommand(T,a) (T)->lpVtbl->InvokeCommand(T,a)
+#define IContextMenu2_GetCommandString(T,a,b,c,d,e) (T)->lpVtbl->GetCommandString(T,a,b,c,d,e)
+#define IContextMenu2_HandleMenuMsg(T,a,b,c) (T)->lpVtbl->HandleMenuMsg(T,a,b,c)
+#endif
+
+#ifdef COBJMACROS
+#define IContextMenu3_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
+#define IContextMenu3_AddRef(T) (T)->lpVtbl->AddRef(T)
+#define IContextMenu3_Release(T) (T)->lpVtbl->Release(T)
+#define IContextMenu3_QueryContextMenu(T,a,b,c,d,e) (T)->lpVtbl->QueryContextMenu(T,a,b,c,d,e)
+#define IContextMenu3_InvokeCommand(T,a) (T)->lpVtbl->InvokeCommand(T,a)
+#define IContextMenu3_GetCommandString(T,a,b,c,d,e) (T)->lpVtbl->GetCommandString(T,a,b,c,d,e)
+#define IContextMenu3_HandleMenuMsg(T,a,b,c) (T)->lpVtbl->HandleMenuMsg(T,a,b,c)
+#define IContextMenu3_HandleMenuMsg2(T,a,b,c,d) (T)->lpVtbl->HandleMenuMsg(T,a,b,c,d)
+#endif
+
+#define INTERFACE IColumnProvider
+DECLARE_INTERFACE_(IColumnProvider,IUnknown)
+{
+	STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+	STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+	STDMETHOD_(ULONG,Release)(THIS) PURE;
+	STDMETHOD(Initialize)(THIS_ LPCSHCOLUMNINIT) PURE;
+	STDMETHOD(GetColumnInfo)(THIS_ DWORD,SHCOLUMNINFO*) PURE;
+	STDMETHOD(GetItemData)(THIS_ LPCSHCOLUMNID,LPCSHCOLUMNDATA,VARIANT*) PURE;
+};
+#undef INTERFACE
+#endif  /* _WIN32_IE >= 0x0500 */
+
+#define INTERFACE IQueryInfo
+DECLARE_INTERFACE_(IQueryInfo,IUnknown)
+{
+	STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+	STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+	STDMETHOD_(ULONG,Release)(THIS) PURE;
+	STDMETHOD(GetInfoTip)(THIS_ DWORD,WCHAR**) PURE;
+	STDMETHOD(GetInfoFlags)(THIS_ DWORD*) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE IShellExtInit
+DECLARE_INTERFACE_(IShellExtInit, IUnknown)
+{
+	STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+	STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+	STDMETHOD_(ULONG,Release)(THIS) PURE;
+	STDMETHOD(Initialize)(THIS_ LPCITEMIDLIST,LPDATAOBJECT,HKEY) PURE;
+};
+#undef INTERFACE
+typedef IShellExtInit *LPSHELLEXTINIT;
+
+#define INTERFACE IShellPropSheetExt
+DECLARE_INTERFACE_(IShellPropSheetExt, IUnknown)
+{
+	STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+	STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+	STDMETHOD_(ULONG,Release)(THIS) PURE;
+	STDMETHOD(AddPages)(THIS_ LPFNADDPROPSHEETPAGE,LPARAM) PURE;
+	STDMETHOD(ReplacePage)(THIS_ UINT,LPFNADDPROPSHEETPAGE,LPARAM) PURE;
+};
+#undef INTERFACE
+typedef IShellPropSheetExt *LPSHELLPROPSHEETEXT;
+
+#define INTERFACE IExtractIconA
+DECLARE_INTERFACE_(IExtractIconA, IUnknown)
+{
+	STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+	STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+	STDMETHOD_(ULONG,Release)(THIS) PURE;
+	STDMETHOD(GetIconLocation)(THIS_ UINT,LPSTR,UINT,int*,PUINT) PURE;
+	STDMETHOD(Extract)(THIS_ LPCSTR,UINT,HICON*,HICON*,UINT) PURE;
+};
+#undef INTERFACE
+typedef IExtractIconA *LPEXTRACTICONA;
+
+#ifdef COBJMACROS
+#define IExtractIconA_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
+#define IExtractIconA_AddRef(T) (T)->lpVtbl->AddRef(T)
+#define IExtractIconA_Release(T) (T)->lpVtbl->Release(T)
+#define IExtractIconA_GetIconLocation(T,a,b,c,d,e) (T)->lpVtbl->GetIconLocation(T,a,b,c,d,e)
+#define IExtractIconA_Extract(T,a,b,c,d,e) (T)->lpVtbl->Extract(T,a,b,c,d,e)
+#endif
+
+#define INTERFACE IExtractIconW
+DECLARE_INTERFACE_(IExtractIconW, IUnknown)
+{
+	STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+	STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+	STDMETHOD_(ULONG,Release)(THIS) PURE;
+	STDMETHOD(GetIconLocation)(THIS_ UINT,LPWSTR,UINT,int*,PUINT) PURE;
+	STDMETHOD(Extract)(THIS_ LPCWSTR,UINT,HICON*,HICON*,UINT) PURE;
+};
+#undef INTERFACE
+typedef IExtractIconW *LPEXTRACTICONW;
+
+#ifdef COBJMACROS
+#define IExtractIconW_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
+#define IExtractIconW_AddRef(T) (T)->lpVtbl->AddRef(T)
+#define IExtractIconW_Release(T) (T)->lpVtbl->Release(T)
+#define IExtractIconW_GetIconLocation(T,a,b,c,d,e) (T)->lpVtbl->GetIconLocation(T,a,b,c,d,e)
+#define IExtractIconW_Extract(T,a,b,c,d,e) (T)->lpVtbl->Extract(T,a,b,c,d,e)
+#endif
+
+#ifdef UNICODE
+#define IExtractIcon IExtractIconW
+#define LPEXTRACTICON LPEXTRACTICONW
+#else
+#define IExtractIcon IExtractIconA
+#define LPEXTRACTICON LPEXTRACTICONA
+#endif
+
+#define INTERFACE IShellLinkA
+DECLARE_INTERFACE_(IShellLinkA, IUnknown)
+{
+	STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+	STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+	STDMETHOD_(ULONG,Release)(THIS) PURE;
+	STDMETHOD(GetPath)(THIS_ LPSTR,int,WIN32_FIND_DATAA*,DWORD) PURE;
+	STDMETHOD(GetIDList)(THIS_ LPITEMIDLIST*) PURE;
+	STDMETHOD(SetIDList)(THIS_ LPCITEMIDLIST) PURE;
+	STDMETHOD(GetDescription)(THIS_ LPSTR,int) PURE;
+	STDMETHOD(SetDescription)(THIS_ LPCSTR) PURE;
+	STDMETHOD(GetWorkingDirectory)(THIS_ LPSTR,int) PURE;
+	STDMETHOD(SetWorkingDirectory)(THIS_ LPCSTR) PURE;
+	STDMETHOD(GetArguments)(THIS_ LPSTR,int) PURE;
+	STDMETHOD(SetArguments)(THIS_ LPCSTR) PURE;
+	STDMETHOD(GetHotkey)(THIS_ PWORD) PURE;
+	STDMETHOD(SetHotkey)(THIS_ WORD) PURE;
+	STDMETHOD(GetShowCmd)(THIS_ int*) PURE;
+	STDMETHOD(SetShowCmd)(THIS_ int) PURE;
+	STDMETHOD(GetIconLocation)(THIS_ LPSTR,int,int*) PURE;
+	STDMETHOD(SetIconLocation)(THIS_ LPCSTR,int) PURE;
+	STDMETHOD(SetRelativePath)(THIS_ LPCSTR ,DWORD) PURE;
+	STDMETHOD(Resolve)(THIS_ HWND,DWORD) PURE;
+	STDMETHOD(SetPath)(THIS_ LPCSTR) PURE;
+};
+#undef INTERFACE
+
+#ifdef COBJMACROS
+#define IShellLinkA_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
+#define IShellLinkA_AddRef(T) (T)->lpVtbl->AddRef(T)
+#define IShellLinkA_Release(T) (T)->lpVtbl->Release(T)
+#define IShellLinkA_GetPath(T,a,b,c,d) (T)->lpVtbl->GetPath(T,a,b,c,d)
+#define IShellLinkA_GetIDList(T,a) (T)->lpVtbl->GetIDList(T,a)
+#define IShellLinkA_SetIDList(T,a) (T)->lpVtbl->SetIDList(T,a)
+#define IShellLinkA_GetDescription(T,a,b) (T)->lpVtbl->GetDescription(T,a,b)
+#define IShellLinkA_SetDescription(T,a) (T)->lpVtbl->SetDescription(T,a)
+#define IShellLinkA_GetWorkingDirectory(T,a,b) (T)->lpVtbl->GetWorkingDirectory(T,a,b)
+#define IShellLinkA_SetWorkingDirectory(T,a) (T)->lpVtbl->SetWorkingDirectory(T,a)
+#define IShellLinkA_GetArguments(T,a,b) (T)->lpVtbl->GetArguments(T,a,b)
+#define IShellLinkA_SetArguments(T,a) (T)->lpVtbl->SetArguments(T,a)
+#define IShellLinkA_GetHotkey(T,a) (T)->lpVtbl->GetHotkey(T,a)
+#define IShellLinkA_SetHotkey(T,a) (T)->lpVtbl->SetHotkey(T,a)
+#define IShellLinkA_GetShowCmd(T,a) (T)->lpVtbl->GetShowCmd(T,a)
+#define IShellLinkA_SetShowCmd(T,a) (T)->lpVtbl->SetShowCmd(T,a)
+#define IShellLinkA_GetIconLocation(T,a,b,c) (T)->lpVtbl->GetIconLocation(T,a,b,c)
+#define IShellLinkA_SetIconLocation(T,a,b) (T)->lpVtbl->SetIconLocation(T,a,b)
+#define IShellLinkA_SetRelativePath(T,a,b) (T)->lpVtbl->SetRelativePath(T,a,b)
+#define IShellLinkA_Resolve(T,a,b) (T)->lpVtbl->Resolve(T,a,b)
+#define IShellLinkA_SetPath(T,a) (T)->lpVtbl->SetPath(T,a)
+#endif
+
+#define INTERFACE IShellLinkW
+DECLARE_INTERFACE_(IShellLinkW, IUnknown)
+{
+	STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+	STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+	STDMETHOD_(ULONG,Release)(THIS) PURE;
+	STDMETHOD(GetPath)(THIS_ LPWSTR,int,WIN32_FIND_DATAW*,DWORD) PURE;
+	STDMETHOD(GetIDList)(THIS_ LPITEMIDLIST*) PURE;
+	STDMETHOD(SetIDList)(THIS_ LPCITEMIDLIST) PURE;
+	STDMETHOD(GetDescription)(THIS_ LPWSTR,int) PURE;
+	STDMETHOD(SetDescription)(THIS_ LPCWSTR) PURE;
+	STDMETHOD(GetWorkingDirectory)(THIS_ LPWSTR,int) PURE;
+	STDMETHOD(SetWorkingDirectory)(THIS_ LPCWSTR) PURE;
+	STDMETHOD(GetArguments)(THIS_ LPWSTR,int) PURE;
+	STDMETHOD(SetArguments)(THIS_ LPCWSTR) PURE;
+	STDMETHOD(GetHotkey)(THIS_ PWORD) PURE;
+	STDMETHOD(SetHotkey)(THIS_ WORD) PURE;
+	STDMETHOD(GetShowCmd)(THIS_ int*) PURE;
+	STDMETHOD(SetShowCmd)(THIS_ int) PURE;
+	STDMETHOD(GetIconLocation)(THIS_ LPWSTR,int,int*) PURE;
+	STDMETHOD(SetIconLocation)(THIS_ LPCWSTR,int) PURE;
+	STDMETHOD(SetRelativePath)(THIS_ LPCWSTR ,DWORD) PURE;
+	STDMETHOD(Resolve)(THIS_ HWND,DWORD) PURE;
+	STDMETHOD(SetPath)(THIS_ LPCWSTR) PURE;
+};
+#undef INTERFACE
+
+#ifdef COBJMACROS
+#define IShellLinkW_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
+#define IShellLinkW_AddRef(T) (T)->lpVtbl->AddRef(T)
+#define IShellLinkW_Release(T) (T)->lpVtbl->Release(T)
+#define IShellLinkW_GetPath(T,a,b,c,d) (T)->lpVtbl->GetPath(T,a,b,c,d)
+#define IShellLinkW_GetIDList(T,a) (T)->lpVtbl->GetIDList(T,a)
+#define IShellLinkW_SetIDList(T,a) (T)->lpVtbl->SetIDList(T,a)
+#define IShellLinkW_GetDescription(T,a,b) (T)->lpVtbl->GetDescription(T,a,b)
+#define IShellLinkW_SetDescription(T,a) (T)->lpVtbl->SetDescription(T,a)
+#define IShellLinkW_GetWorkingDirectory(T,a,b) (T)->lpVtbl->GetWorkingDirectory(T,a,b)
+#define IShellLinkW_SetWorkingDirectory(T,a) (T)->lpVtbl->SetWorkingDirectory(T,a)
+#define IShellLinkW_GetArguments(T,a,b) (T)->lpVtbl->GetArguments(T,a,b)
+#define IShellLinkW_SetArguments(T,a) (T)->lpVtbl->SetArguments(T,a)
+#define IShellLinkW_GetHotkey(T,a) (T)->lpVtbl->GetHotkey(T,a)
+#define IShellLinkW_SetHotkey(T,a) (T)->lpVtbl->SetHotkey(T,a)
+#define IShellLinkW_GetShowCmd(T,a) (T)->lpVtbl->GetShowCmd(T,a)
+#define IShellLinkW_SetShowCmd(T,a) (T)->lpVtbl->SetShowCmd(T,a)
+#define IShellLinkW_GetIconLocation(T,a,b,c) (T)->lpVtbl->GetIconLocation(T,a,b,c)
+#define IShellLinkW_SetIconLocation(T,a,b) (T)->lpVtbl->SetIconLocation(T,a,b)
+#define IShellLinkW_SetRelativePath(T,a,b) (T)->lpVtbl->SetRelativePath(T,a,b)
+#define IShellLinkW_Resolve(T,a,b) (T)->lpVtbl->Resolve(T,a,b)
+#define IShellLinkW_SetPath(T,a) (T)->lpVtbl->SetPath(T,a)
+#endif
+
+#define INTERFACE IShellFolder
+DECLARE_INTERFACE_(IShellFolder, IUnknown)
+{
+	STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+	STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+	STDMETHOD_(ULONG,Release)(THIS) PURE;
+	STDMETHOD(ParseDisplayName)(THIS_ HWND,LPBC,LPOLESTR,PULONG,LPITEMIDLIST*,PULONG) PURE;
+	STDMETHOD(EnumObjects)(THIS_ HWND,DWORD,LPENUMIDLIST*) PURE;
+	STDMETHOD(BindToObject)(THIS_ LPCITEMIDLIST,LPBC,REFIID,PVOID*) PURE;
+	STDMETHOD(BindToStorage)(THIS_ LPCITEMIDLIST,LPBC,REFIID,PVOID*) PURE;
+	STDMETHOD(CompareIDs)(THIS_ LPARAM,LPCITEMIDLIST,LPCITEMIDLIST) PURE;
+	STDMETHOD(CreateViewObject)(THIS_ HWND,REFIID,PVOID*) PURE;
+	STDMETHOD(GetAttributesOf)(THIS_ UINT,LPCITEMIDLIST*,PULONG) PURE;
+	STDMETHOD(GetUIObjectOf)(THIS_ HWND,UINT,LPCITEMIDLIST*,REFIID,PUINT,PVOID*) PURE;
+	STDMETHOD(GetDisplayNameOf)(THIS_ LPCITEMIDLIST,DWORD,LPSTRRET) PURE;
+	STDMETHOD(SetNameOf)(THIS_ HWND,LPCITEMIDLIST,LPCOLESTR,DWORD,LPITEMIDLIST*) PURE;
+};
+#undef INTERFACE
+typedef IShellFolder *LPSHELLFOLDER;
+
+#ifdef COBJMACROS
+#define IShellFolder_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
+#define IShellFolder_AddRef(T) (T)->lpVtbl->AddRef(T)
+#define IShellFolder_Release(T) (T)->lpVtbl->Release(T)
+#define IShellFolder_ParseDisplayName(T,a,b,c,d,e,f) (T)->lpVtbl->ParseDisplayName(T,a,b,c,d,e,f)
+#define IShellFolder_EnumObjects(T,a,b,c) (T)->lpVtbl->EnumObjects(T,a,b,c)
+#define IShellFolder_BindToObject(T,a,b,c,d) (T)->lpVtbl->BindToObject(T,a,b,c,d)
+#define IShellFolder_BindToStorage(T,a,b,c,d) (T)->lpVtbl->BindToStorage(T,a,b,c,d)
+#define IShellFolder_CompareIDs(T,a,b,c) (T)->lpVtbl->CompareIDs(T,a,b,c)
+#define IShellFolder_CreateViewObject(T,a,b) (T)->lpVtbl->CreateViewObject(T,a,b)
+#define IShellFolder_GetAttributesOf(T,a,b,c) (T)->lpVtbl->GetAttributesOf(T,a,b,c)
+#define IShellFolder_GetUIObjectOf(T,a,b,c,d,e,f) (T)->lpVtbl->GetUIObjectOf(T,a,b,c,d,e,f)
+#define IShellFolder_GetDisplayNameOf(T,a,b,c) (T)->lpVtbl->GetDisplayNameOf(T,a,b,c)
+#define IShellFolder_SetNameOf(T,a,b,c,d,e) (T)->lpVtbl->SetNameOf(T,a,b,c,d,e)
+#endif
+
+#if (_WIN32_IE >= 0x0500)
+
+DECLARE_ENUMERATOR_(IEnumExtraSearch,LPEXTRASEARCH);
+typedef IEnumExtraSearch *LPENUMEXTRASEARCH;
+
+#define INTERFACE IShellFolder2
+DECLARE_INTERFACE_(IShellFolder2, IShellFolder)
+{
+	STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+	STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+	STDMETHOD_(ULONG,Release)(THIS) PURE;
+	STDMETHOD(ParseDisplayName)(THIS_ HWND,LPBC,LPOLESTR,PULONG,LPITEMIDLIST*,PULONG) PURE;
+	STDMETHOD(EnumObjects)(THIS_ HWND,DWORD,LPENUMIDLIST*) PURE;
+	STDMETHOD(BindToObject)(THIS_ LPCITEMIDLIST,LPBC,REFIID,PVOID*) PURE;
+	STDMETHOD(BindToStorage)(THIS_ LPCITEMIDLIST,LPBC,REFIID,PVOID*) PURE;
+	STDMETHOD(CompareIDs)(THIS_ LPARAM,LPCITEMIDLIST,LPCITEMIDLIST) PURE;
+	STDMETHOD(CreateViewObject)(THIS_ HWND,REFIID,PVOID*) PURE;
+	STDMETHOD(GetAttributesOf)(THIS_ UINT,LPCITEMIDLIST*,PULONG) PURE;
+	STDMETHOD(GetUIObjectOf)(THIS_ HWND,UINT,LPCITEMIDLIST*,REFIID,PUINT,PVOID*) PURE;
+	STDMETHOD(GetDisplayNameOf)(THIS_ LPCITEMIDLIST,DWORD,LPSTRRET) PURE;
+	STDMETHOD(SetNameOf)(THIS_ HWND,LPCITEMIDLIST,LPCOLESTR,DWORD,LPITEMIDLIST*) PURE;
+	STDMETHOD(GetDefaultSearchGUID)(THIS_ GUID*) PURE;
+	STDMETHOD(EnumSearches)(THIS_ IEnumExtraSearch**) PURE;
+	STDMETHOD(GetDefaultColumn)(THIS_ DWORD,ULONG*,ULONG*) PURE;
+	STDMETHOD(GetDefaultColumnState)(THIS_ UINT,SHCOLSTATEF*) PURE;
+	STDMETHOD(GetDetailsEx)(THIS_ LPCITEMIDLIST,const SHCOLUMNID*,VARIANT*) PURE;
+	STDMETHOD(GetDetailsOf)(THIS_ LPCITEMIDLIST,UINT,SHELLDETAILS*) PURE;
+	STDMETHOD(MapColumnToSCID)(THIS_ UINT,SHCOLUMNID*) PURE;
+};
+#undef INTERFACE
+typedef IShellFolder2 *LPSHELLFOLDER2;
+
+#ifdef COBJMACROS
+#define IShellFolder2_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
+#define IShellFolder2_AddRef(T) (T)->lpVtbl->AddRef(T)
+#define IShellFolder2_Release(T) (T)->lpVtbl->Release(T)
+#define IShellFolder2_ParseDisplayName(T,a,b,c,d,e,f) (T)->lpVtbl->ParseDisplayName(T,a,b,c,d,e,f)
+#define IShellFolder2_EnumObjects(T,a,b,c) (T)->lpVtbl->EnumObjects(T,a,b,c)
+#define IShellFolder2_BindToObject(T,a,b,c,d) (T)->lpVtbl->BindToObject(T,a,b,c,d)
+#define IShellFolder2_BindToStorage(T,a,b,c,d) (T)->lpVtbl->BindToStorage(T,a,b,c,d)
+#define IShellFolder2_CompareIDs(T,a,b,c) (T)->lpVtbl->CompareIDs(T,a,b,c)
+#define IShellFolder2_CreateViewObject(T,a,b) (T)->lpVtbl->CreateViewObject(T,a,b)
+#define IShellFolder2_GetAttributesOf(T,a,b,c) (T)->lpVtbl->GetAttributesOf(T,a,b,c)
+#define IShellFolder2_GetUIObjectOf(T,a,b,c,d,e,f) (T)->lpVtbl->GetUIObjectOf(T,a,b,c,d,e,f)
+#define IShellFolder2_GetDisplayNameOf(T,a,b,c) (T)->lpVtbl->GetDisplayNameOf(T,a,b,c)
+#define IShellFolder2_SetNameOf(T,a,b,c,d,e) (T)->lpVtbl->SetNameOf(T,a,b,c,d,e)
+#define IShellFolder2_GetDefaultSearchGUID(T,a) (T)->lpVtbl->GetDefaultSearchGUID(T,a)
+#define IShellFolder2_EnumSearches(T,a) (T)->lpVtbl->EnumSearches(T,a)
+#define IShellFolder2_GetDefaultColumn(T,a,b,c) (T)->lpVtbl->GetDefaultColumn(T,a,b,c)
+#define IShellFolder2_GetDefaultColumnState(T,a,b) (T)->lpVtbl->GetDefaultColumnState(T,a,b)
+#define IShellFolder2_GetDetailsEx(T,a,b,c) (T)->lpVtbl->GetDetailsEx(T,a,b,c)
+#define IShellFolder2_GetDetailsOf(T,a,b,c) (T)->lpVtbl->GetDetailsOf(T,a,b,c)
+#define IShellFolder2_MapColumnToSCID(T,a,b) (T)->lpVtbl->MapColumnToSCID(T,a,b)
+#endif
+
+#endif /* _WIN32_IE >= 0x0500 */
+#define INTERFACE ICopyHook
+DECLARE_INTERFACE_(ICopyHook, IUnknown)
+{
+	STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+	STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+	STDMETHOD_(ULONG,Release)(THIS) PURE;
+	STDMETHOD_(UINT,CopyCallback)(THIS_ HWND,UINT,UINT,LPCSTR,DWORD,LPCSTR,DWORD) PURE;
+};
+#undef INTERFACE
+typedef ICopyHook *LPCOPYHOOK;
+
+#define INTERFACE IFileViewerSite
+DECLARE_INTERFACE(IFileViewerSite)
+{
+	STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+	STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+	STDMETHOD_(ULONG,Release)(THIS) PURE;
+	STDMETHOD(SetPinnedWindow)(THIS_ HWND) PURE;
+	STDMETHOD(GetPinnedWindow)(THIS_ HWND*) PURE;
+};
+#undef INTERFACE
+typedef IFileViewerSite *LPFILEVIEWERSITE;
+
+#define INTERFACE IFileViewer
+DECLARE_INTERFACE(IFileViewer)
+{
+	STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+	STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+	STDMETHOD_(ULONG,Release)(THIS) PURE;
+	STDMETHOD(ShowInitialize)(THIS_ LPFILEVIEWERSITE) PURE;
+	STDMETHOD(Show)(THIS_ LPFVSHOWINFO) PURE;
+	STDMETHOD(PrintTo)(THIS_ LPSTR,BOOL) PURE;
+};
+#undef INTERFACE
+typedef IFileViewer *LPFILEVIEWER;
+
+#define INTERFACE IFileSystemBindData
+DECLARE_INTERFACE_(IFileSystemBindData, IUnknown)
+{
+	STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+	STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+	STDMETHOD_(ULONG,Release)(THIS) PURE;
+	STDMETHOD(SetFindData)(THIS_ const WIN32_FIND_DATAW*) PURE;
+	STDMETHOD(GetFindData)(THIS_ WIN32_FIND_DATAW*) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE IPersistFolder
+DECLARE_INTERFACE_(IPersistFolder,IPersist)
+{
+	STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+	STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+	STDMETHOD_(ULONG,Release)(THIS) PURE;
+	STDMETHOD(GetClassID)(THIS_ CLSID*) PURE;
+	STDMETHOD(Initialize)(THIS_ LPCITEMIDLIST) PURE;
+};
+#undef INTERFACE
+typedef IPersistFolder *LPPERSISTFOLDER;
+
+#ifdef COBJMACROS
+#define IPersistFolder_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
+#define IPersistFolder_AddRef(T) (T)->lpVtbl->AddRef(T)
+#define IPersistFolder_Release(T) (T)->lpVtbl->Release(T)
+#define IPersistFolder_GetClassID(T,a) (T)->lpVtbl->GetClassID(T,a)
+#define IPersistFolder_Initialize(T,a) (T)->lpVtbl->Initialize(T,a)
+#endif
+
+#if (_WIN32_IE >= 0x0400 || _WIN32_WINNT >= 0x0500)
+
+#define INTERFACE IPersistFolder2
+DECLARE_INTERFACE_(IPersistFolder2,IPersistFolder)
+{
+	STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+	STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+	STDMETHOD_(ULONG,Release)(THIS) PURE;
+	STDMETHOD(GetClassID)(THIS_ CLSID*) PURE;
+	STDMETHOD(Initialize)(THIS_ LPCITEMIDLIST) PURE;
+	STDMETHOD(GetCurFolder)(THIS_ LPITEMIDLIST*) PURE;
+};
+#undef INTERFACE
+typedef IPersistFolder2 *LPPERSISTFOLDER2;
+
+#ifdef COBJMACROS
+#define IPersistFolder2_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
+#define IPersistFolder2_AddRef(T) (T)->lpVtbl->AddRef(T)
+#define IPersistFolder2_Release(T) (T)->lpVtbl->Release(T)
+#define IPersistFolder2_GetClassID(T,a) (T)->lpVtbl->GetClassID(T,a)
+#define IPersistFolder2_Initialize(T,a) (T)->lpVtbl->Initialize(T,a)
+#define IPersistFolder2_GetCurFolder(T,a) (T)->lpVtbl->GetCurFolder(T,a)
+#endif
+
+#endif /* _WIN32_IE >= 0x0400 || _WIN32_WINNT >= 0x0500 */
+
+#if (_WIN32_IE >= 0x0500)
+
+#define INTERFACE IPersistFolder3
+DECLARE_INTERFACE_(IPersistFolder3,IPersistFolder2)
+{
+	STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+	STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+	STDMETHOD_(ULONG,Release)(THIS) PURE;
+	STDMETHOD(GetClassID)(THIS_ CLSID*) PURE;
+	STDMETHOD(Initialize)(THIS_ LPCITEMIDLIST) PURE;
+	STDMETHOD(GetCurFolder)(THIS_ LPITEMIDLIST*) PURE;
+	STDMETHOD(InitializeEx)(THIS_ IBindCtx*,LPCITEMIDLIST,const PERSIST_FOLDER_TARGET_INFO*) PURE;
+	STDMETHOD(GetFolderTargetInfo)(THIS_ PERSIST_FOLDER_TARGET_INFO*) PURE;
+};
+#undef INTERFACE
+typedef IPersistFolder3 *LPPERSISTFOLDER3;
+
+#ifdef COBJMACROS
+#define IPersistFolder3_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
+#define IPersistFolder3_AddRef(T) (T)->lpVtbl->AddRef(T)
+#define IPersistFolder3_Release(T) (T)->lpVtbl->Release(T)
+#define IPersistFolder3_GetClassID(T,a) (T)->lpVtbl->GetClassID(T,a)
+#define IPersistFolder3_Initialize(T,a) (T)->lpVtbl->Initialize(T,a)
+#define IPersistFolder3_GetCurFolder(T,a) (T)->lpVtbl->GetCurFolder(T,a)
+#define IPersistFolder3_InitializeEx(T,a,b,c) (T)->lpVtbl->InitializeEx(T,a,b,c)
+#define IPersistFolder3_GetFolderTargetInfo(T,a) (T)->lpVtbl->GetFolderTargetInfo(T,a)
+#endif
+
+#endif /* _WIN32_IE >= 0x0500 */
+
+typedef _COM_interface IShellBrowser *LPSHELLBROWSER;
+typedef _COM_interface IShellView *LPSHELLVIEW;
+
+#define INTERFACE IShellBrowser
+DECLARE_INTERFACE_(IShellBrowser,IOleWindow)
+{
+	STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+	STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+	STDMETHOD_(ULONG,Release)(THIS) PURE;
+	STDMETHOD(GetWindow)(THIS_ HWND*) PURE;
+	STDMETHOD(ContextSensitiveHelp)(THIS_ BOOL) PURE;
+	STDMETHOD(InsertMenusSB)(THIS_ HMENU,LPOLEMENUGROUPWIDTHS) PURE;
+	STDMETHOD(SetMenuSB)(THIS_ HMENU,HOLEMENU,HWND) PURE;
+	STDMETHOD(RemoveMenusSB)(THIS_ HMENU) PURE;
+	STDMETHOD(SetStatusTextSB)(THIS_ LPCOLESTR) PURE;
+	STDMETHOD(EnableModelessSB)(THIS_ BOOL) PURE;
+	STDMETHOD(TranslateAcceleratorSB) (THIS_ LPMSG,WORD) PURE;
+	STDMETHOD(BrowseObject)(THIS_ LPCITEMIDLIST,UINT) PURE;
+	STDMETHOD(GetViewStateStream)(THIS_ DWORD,LPSTREAM*) PURE;
+	STDMETHOD(GetControlWindow)(THIS_ UINT,HWND*) PURE;
+	STDMETHOD(SendControlMsg)(THIS_ UINT,UINT,WPARAM,LPARAM,LRESULT*) PURE;
+	STDMETHOD(QueryActiveShellView)(THIS_ LPSHELLVIEW*) PURE;
+	STDMETHOD(OnViewWindowActive)(THIS_ LPSHELLVIEW) PURE;
+	STDMETHOD(SetToolbarItems)(THIS_ LPTBBUTTON,UINT,UINT) PURE;
+};
+#undef INTERFACE
+
+#ifdef COBJMACROS
+#define IShellBrowser_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
+#define IShellBrowser_AddRef(T) (T)->lpVtbl->AddRef(T)
+#define IShellBrowser_Release(T) (T)->lpVtbl->Release(T)
+#define IShellBrowser_GetWindow(T,a) (T)->lpVtbl->GetWindow(T,a)
+#define IShellBrowser_ContextSensitiveHelp(T,a) (T)->lpVtbl->ContextSensitiveHelp(T,a)
+#define IShellBrowser_InsertMenusSB(T,a,b) (T)->lpVtbl->InsertMenusSB(T,a,b)
+#define IShellBrowser_SetMenuSB(T,a,b,c) (T)->lpVtbl->SetMenuSB(T,a,b,c)
+#define IShellBrowser_RemoveMenusSB(T,a) (T)->lpVtbl->RemoveMenusSB(T,a)
+#define IShellBrowser_SetStatusTextSB(T,a) (T)->lpVtbl->SetStatusTextSB(T,a)
+#define IShellBrowser_EnableModelessSB(T,a) (T)->lpVtbl->EnableModelessSB(T,a)
+#define IShellBrowser_TranslateAcceleratorSB(T,a,b) (T)->lpVtbl->TranslateAcceleratorSB(T,a,b)
+#define IShellBrowser_BrowseObject(T,a,b) (T)->lpVtbl->BrowseObject(T,a,b)
+#define IShellBrowser_GetViewStateStream(T,a,b) (T)->lpVtbl->GetViewStateStream(T,a,b)
+#define IShellBrowser_GetControlWindow(T,a,b) (T)->lpVtbl->GetControlWindow(T,a,b)
+#define IShellBrowser_SendControlMsg(T,a,b,c,d,e) (T)->lpVtbl->SendControlMsg(T,a,b,c,d,e)
+#define IShellBrowser_QueryActiveShellView(T,a) (T)->lpVtbl->QueryActiveShellView(T,a)
+#define IShellBrowser_OnViewWindowActive(T,a) (T)->lpVtbl->OnViewWindowActive(T,a)
+#define IShellBrowser_SetToolbarItems(T,a,b,c) (T)->lpVtbl->SetToolbarItems(T,a,b,c)
+#endif
+
+#define INTERFACE IShellView
+DECLARE_INTERFACE_(IShellView,IOleWindow)
+{
+	STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+	STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+	STDMETHOD_(ULONG,Release)(THIS) PURE;
+	STDMETHOD(GetWindow)(THIS_ HWND*) PURE;
+	STDMETHOD(ContextSensitiveHelp)(THIS_ BOOL) PURE;
+	STDMETHOD(TranslateAccelerator) (THIS_ LPMSG) PURE;
+#ifdef _FIX_ENABLEMODELESS_CONFLICT
+	STDMETHOD(EnableModelessSV)(THIS_ BOOL) PURE;
+#else
+	STDMETHOD(EnableModeless)(THIS_ BOOL) PURE;
+#endif
+	STDMETHOD(UIActivate)(THIS_ UINT) PURE;
+	STDMETHOD(Refresh) (THIS) PURE;
+	STDMETHOD(CreateViewWindow)(THIS_ IShellView*,LPCFOLDERSETTINGS,LPSHELLBROWSER,RECT*,HWND*) PURE;
+	STDMETHOD(DestroyViewWindow)(THIS) PURE;
+	STDMETHOD(GetCurrentInfo)(THIS_ LPFOLDERSETTINGS) PURE;
+	STDMETHOD(AddPropertySheetPages)(THIS_ DWORD,LPFNADDPROPSHEETPAGE,LPARAM) PURE;
+	STDMETHOD(SaveViewState)(THIS) PURE;
+	STDMETHOD(SelectItem)(THIS_ LPCITEMIDLIST,UINT) PURE;
+	STDMETHOD(GetItemObject)(THIS_ UINT,REFIID,PVOID*) PURE;
+};
+#undef INTERFACE
+
+#ifdef COBJMACROS
+#define IShellView_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
+#define IShellView_AddRef(T) (T)->lpVtbl->AddRef(T)
+#define IShellView_Release(T) (T)->lpVtbl->Release(T)
+#define IShellView_GetWindow(T,a) (T)->lpVtbl->GetWindow(T,a)
+#define IShellView_ContextSensitiveHelp(T,a) (T)->lpVtbl->ContextSensitiveHelp(T,a)
+#define IShellView_TranslateAccelerator(T,a) (T)->lpVtbl->TranslateAccelerator(T,a)
+#ifdef _FIX_ENABLEMODELESS_CONFLICT
+#define IShellView_EnableModeless(T,a) (T)->lpVtbl->EnableModelessSV(T,a)
+#else
+#define IShellView_EnableModeless(T,a) (T)->lpVtbl->EnableModeless(T,a)
+#endif
+#define IShellView_UIActivate(T,a) (T)->lpVtbl->UIActivate(T,a)
+#define IShellView_Refresh(T) (T)->lpVtbl->Refresh(T)
+#define IShellView_CreateViewWindow(T,a,b,c,d,e) (T)->lpVtbl->CreateViewWindow(T,a,b,c,d,e)
+#define IShellView_DestroyViewWindow(T) (T)->lpVtbl->DestroyViewWindow(T)
+#define IShellView_GetCurrentInfo(T,a) (T)->lpVtbl->GetCurrentInfo(T,a)
+#define IShellView_AddPropertySheetPages(T,a,b,c) (T)->lpVtbl->AddPropertySheetPages(T,a,b,c)
+#define IShellView_SaveViewState(T) (T)->lpVtbl->SaveViewState(T)
+#define IShellView_SelectItem(T,a,b) (T)->lpVtbl->SelectItem(T,a,b)
+#define IShellView_GetItemObject(T,a,b,c) (T)->lpVtbl->GetItemObject(T,a,b,c)
+#endif
+
+#define INTERFACE ICommDlgBrowser
+DECLARE_INTERFACE_(ICommDlgBrowser,IUnknown)
+{
+	STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+	STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+	STDMETHOD_(ULONG,Release)(THIS) PURE;
+	STDMETHOD(OnDefaultCommand)(THIS_ IShellView*) PURE;
+	STDMETHOD(OnStateChange)(THIS_ IShellView*,ULONG) PURE;
+	STDMETHOD(IncludeObject)(THIS_ IShellView*,LPCITEMIDLIST) PURE;
+};
+#undef INTERFACE
+typedef ICommDlgBrowser *LPCOMMDLGBROWSER;
+
+#ifdef COBJMACROS
+#define ICommDlgBrowser_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b)
+#define ICommDlgBrowser_AddRef(T) (T)->lpVtbl->AddRef(T)
+#define ICommDlgBrowser_Release(T) (T)->lpVtbl->Release(T)
+#define ICommDlgBrowser_OnDefaultCommand(T,a) (T)->lpVtbl->OnDefaultCommand(T,a)
+#define ICommDlgBrowser_OnStateChange(T,a,b) (T)->lpVtbl->OnStateChange(T,a,b)
+#define ICommDlgBrowser_IncludeObject(T,a,b) (T)->lpVtbl->IncludeObject(T,a,b)
+#endif
+
+typedef GUID SHELLVIEWID;
+typedef struct _SV2CVW2_PARAMS {
+	DWORD cbSize;
+	IShellView *psvPrev;
+	FOLDERSETTINGS const *pfs;
+	IShellBrowser *psbOwner;
+	RECT *prcView;
+	SHELLVIEWID const *pvid;
+	HWND hwndView;
+} SV2CVW2_PARAMS,*LPSV2CVW2_PARAMS;
+#define INTERFACE IShellView2
+DECLARE_INTERFACE_(IShellView2,IShellView)
+{
+
+	STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+	STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+	STDMETHOD_(ULONG,Release)(THIS) PURE;
+	STDMETHOD(GetWindow)(THIS_ HWND*) PURE;
+	STDMETHOD(ContextSensitiveHelp)(THIS_ BOOL) PURE;
+	STDMETHOD(TranslateAccelerator) (THIS_ LPMSG) PURE;
+#ifdef _FIX_ENABLEMODELESS_CONFLICT
+	STDMETHOD(EnableModelessSV)(THIS_ BOOL) PURE;
+#else
+	STDMETHOD(EnableModeless)(THIS_ BOOL) PURE;
+#endif
+	STDMETHOD(UIActivate)(THIS_ UINT) PURE;
+	STDMETHOD(Refresh) (THIS) PURE;
+	STDMETHOD(CreateViewWindow)(THIS_ IShellView*,LPCFOLDERSETTINGS,LPSHELLBROWSER,RECT*,HWND*) PURE;
+	STDMETHOD(DestroyViewWindow)(THIS) PURE;
+	STDMETHOD(GetCurrentInfo)(THIS_ LPFOLDERSETTINGS) PURE;
+	STDMETHOD(AddPropertySheetPages)(THIS_ DWORD,LPFNADDPROPSHEETPAGE,LPARAM) PURE;
+	STDMETHOD(SaveViewState)(THIS) PURE;
+	STDMETHOD(SelectItem)(THIS_ LPCITEMIDLIST,UINT) PURE;
+	STDMETHOD(GetItemObject)(THIS_ UINT,REFIID,PVOID*) PURE;
+	STDMETHOD(GetView)(THIS_ SHELLVIEWID*,ULONG) PURE;
+	STDMETHOD(CreateViewWindow2)(THIS_ LPSV2CVW2_PARAMS) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE IShellExecuteHookA
+DECLARE_INTERFACE_(IShellExecuteHookA,IUnknown)
+{
+	STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+	STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+	STDMETHOD_(ULONG,Release)(THIS) PURE;
+	STDMETHOD(Execute)(THIS_ LPSHELLEXECUTEINFOA) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE IShellExecuteHookW
+DECLARE_INTERFACE_(IShellExecuteHookW,IUnknown)
+{
+	STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+	STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+	STDMETHOD_(ULONG,Release)(THIS) PURE;
+	STDMETHOD(Execute)(THIS_ LPSHELLEXECUTEINFOW) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE IShellIcon
+DECLARE_INTERFACE_(IShellIcon,IUnknown)
+{
+	STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+	STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+	STDMETHOD_(ULONG,Release)(THIS) PURE;
+	STDMETHOD(GetIconOf)(THIS_ LPCITEMIDLIST,UINT,PINT) PURE;
+};
+#undef INTERFACE
+typedef IShellIcon *LPSHELLICON;
+
+typedef struct {
+	BOOL fShowAllObjects : 1;
+	BOOL fShowExtensions : 1;
+	BOOL fNoConfirmRecycle : 1;
+	BOOL fShowSysFiles : 1;
+	BOOL fShowCompColor : 1;
+	BOOL fDoubleClickInWebView : 1;
+	BOOL fDesktopHTML : 1;
+	BOOL fWin95Classic : 1;
+	BOOL fDontPrettyPath : 1;
+	BOOL fShowAttribCol : 1;
+	BOOL fMapNetDrvBtn : 1;
+	BOOL fShowInfoTip : 1;
+	BOOL fHideIcons : 1;
+	UINT fRestFlags : 3;
+} SHELLFLAGSTATE, * LPSHELLFLAGSTATE;
+
+#define SSF_SHOWALLOBJECTS 0x1
+#define SSF_SHOWEXTENSIONS 0x2
+#define SSF_SHOWCOMPCOLOR 0x8
+#define SSF_SHOWSYSFILES 0x20
+#define SSF_DOUBLECLICKINWEBVIEW 0x80
+#define SSF_SHOWATTRIBCOL 0x100
+#define SSF_DESKTOPHTML 0x200
+#define SSF_WIN95CLASSIC 0x400
+#define SSF_DONTPRETTYPATH 0x800
+#define SSF_MAPNETDRVBUTTON 0x1000
+#define SSF_SHOWINFOTIP 0x2000
+#define SSF_HIDEICONS 0x4000
+#define SSF_NOCONFIRMRECYCLE 0x8000
+
+#define INTERFACE IShellIconOverlayIdentifier
+DECLARE_INTERFACE_(IShellIconOverlayIdentifier,IUnknown)
+{
+	STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+	STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+	STDMETHOD_(ULONG,Release)(THIS) PURE;
+	STDMETHOD(IsMemberOf)(THIS_ LPCWSTR,DWORD) PURE;
+	STDMETHOD(GetOverlayInfo)(THIS_ LPWSTR,int,int*,DWORD*) PURE;
+	STDMETHOD(GetPriority)(THIS_ int*) PURE;
+};
+#undef INTERFACE
+
+#define ISIOI_ICONFILE 0x00000001
+#define ISIOI_ICONINDEX 0x00000002
+
+#if (_WIN32_WINNT >= 0x0500) /* W2K */
+typedef struct {
+	BOOL fShowAllObjects : 1;
+	BOOL fShowExtensions : 1;
+	BOOL fNoConfirmRecycle : 1;
+	BOOL fShowSysFiles : 1;
+	BOOL fShowCompColor : 1;
+	BOOL fDoubleClickInWebView : 1;
+	BOOL fDesktopHTML : 1;
+	BOOL fWin95Classic : 1;
+	BOOL fDontPrettyPath : 1;
+	BOOL fShowAttribCol : 1;
+	BOOL fMapNetDrvBtn : 1;
+	BOOL fShowInfoTip : 1;
+	BOOL fHideIcons : 1;
+	BOOL fWebView : 1;
+	BOOL fFilter : 1;
+	BOOL fShowSuperHidden : 1;
+	BOOL fNoNetCrawling : 1;
+	DWORD dwWin95Unused;
+	UINT uWin95Unused;
+	LONG lParamSort;
+	int iSortDirection;
+	UINT version;
+	UINT uNotUsed;
+	BOOL fSepProcess : 1;
+	BOOL fStartPanelOn : 1;
+	BOOL fShowStartPage : 1;
+	UINT fSpareFlags : 13;
+} SHELLSTATE, *LPSHELLSTATE;
+#endif /* _WIN32_WINNT >= 0x0500 */
+
+#if (_WIN32_IE >= 0x0500)
+#pragma pack(push,8)
+typedef struct
+{
+	SIZE sizeDragImage;
+	POINT ptOffset;
+	HBITMAP hbmpDragImage;
+	COLORREF crColorKey;
+} SHDRAGIMAGE, *LPSHDRAGIMAGE;
+#pragma pack(pop)
+
+#define INTERFACE IDragSourceHelper
+DECLARE_INTERFACE_(IDragSourceHelper, IUnknown)
+{
+	STDMETHOD (QueryInterface)(THIS_ REFIID riid, void **ppv) PURE;
+	STDMETHOD_(ULONG, AddRef) (THIS) PURE;
+	STDMETHOD_(ULONG, Release) (THIS) PURE;
+	STDMETHOD (InitializeFromBitmap)(THIS_ LPSHDRAGIMAGE pshdi, IDataObject* pDataObject) PURE;
+	STDMETHOD (InitializeFromWindow)(THIS_ HWND hwnd, POINT* ppt, IDataObject* pDataObject) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE IDropTargetHelper
+DECLARE_INTERFACE_(IDropTargetHelper, IUnknown)
+{
+	STDMETHOD (QueryInterface)(THIS_ REFIID riid, void** ppv) PURE;
+	STDMETHOD_(ULONG, AddRef) (THIS) PURE;
+	STDMETHOD_(ULONG, Release) (THIS) PURE;
+	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;
+};
+#undef INTERFACE
+#endif /* _WIN32_IE >= 0x0500 */
+
+#if (_WIN32_WINNT >= 0x0500)
+BOOL WINAPI PathResolve(LPWSTR, LPCWSTR*, UINT);
+#define PRF_VERIFYEXISTS            0x0001
+#define PRF_TRYPROGRAMEXTENSIONS    (0x0002 | PRF_VERIFYEXISTS)
+#define PRF_FIRSTDIRDEF             0x0004
+#define PRF_DONTFINDLNK             0x0008
+#endif
+
+void WINAPI SHAddToRecentDocs(UINT,PCVOID);
+LPITEMIDLIST WINAPI SHBrowseForFolderA(PBROWSEINFOA);
+LPITEMIDLIST WINAPI SHBrowseForFolderW(PBROWSEINFOW);
+void WINAPI SHChangeNotify(LONG,UINT,PCVOID,PCVOID);
+HRESULT WINAPI SHGetDataFromIDListA(LPSHELLFOLDER,LPCITEMIDLIST,int,PVOID,int);
+HRESULT WINAPI SHGetDataFromIDListW(LPSHELLFOLDER,LPCITEMIDLIST,int,PVOID,int);
+HRESULT WINAPI SHGetDesktopFolder(LPSHELLFOLDER*);
+HRESULT WINAPI SHGetInstanceExplorer(IUnknown **);
+HRESULT WINAPI SHGetMalloc(LPMALLOC*);
+BOOL WINAPI SHGetPathFromIDListA(LPCITEMIDLIST,LPSTR);
+BOOL WINAPI SHGetPathFromIDListW(LPCITEMIDLIST,LPWSTR);
+HRESULT WINAPI SHGetSpecialFolderLocation(HWND,int,LPITEMIDLIST*);
+HRESULT WINAPI SHLoadInProc(REFCLSID);
+#if (_WIN32_IE >= 0x0400)
+BOOL WINAPI SHGetSpecialFolderPathA(HWND,LPSTR,int,BOOL);
+BOOL WINAPI SHGetSpecialFolderPathW(HWND,LPWSTR,int,BOOL);
+#endif 
+/* SHGetFolderPath in shfolder.dll on W9x, NT4, also in shell32.dll on W2K */
+HRESULT WINAPI SHGetFolderPathA(HWND,int,HANDLE,DWORD,LPSTR);
+HRESULT WINAPI SHGetFolderPathW(HWND,int,HANDLE,DWORD,LPWSTR);
+#if (_WIN32_WINDOWS >= 0x0490) || (_WIN32_WINNT >= 0x0500) /* ME or W2K */
+HRESULT WINAPI SHGetFolderLocation(HWND,int,HANDLE,DWORD,LPITEMIDLIST*);
+#endif
+#if (_WIN32_WINNT >= 0x0500)
+INT WINAPI SHCreateDirectoryExA(HWND,LPCSTR,LPSECURITY_ATTRIBUTES);
+INT WINAPI SHCreateDirectoryExW(HWND,LPCWSTR,LPSECURITY_ATTRIBUTES);
+HRESULT WINAPI SHBindToParent(LPCITEMIDLIST,REFIID,VOID**,LPCITEMIDLIST*);
+#endif
+#if (_WIN32_WINNT >= 0x0501) /* XP */
+HRESULT WINAPI SHGetFolderPathAndSubDirA(HWND,int,HANDLE,DWORD,LPCSTR,LPSTR);
+HRESULT WINAPI SHGetFolderPathAndSubDirW(HWND,int,HANDLE,DWORD,LPCWSTR,LPWSTR);
+#endif
+void WINAPI SHGetSettings(LPSHELLFLAGSTATE,DWORD);
+#if (_WIN32_WINNT >= 0x0500) /* W2K */
+void WINAPI SHGetSetSettings(LPSHELLSTATE,DWORD,BOOL);
+#endif
+
+#if (_WIN32_WINNT >= 0x0500) /* W2K */
+BOOL WINAPI ILIsEqual(LPCITEMIDLIST, LPCITEMIDLIST);
+BOOL WINAPI ILIsParent(LPCITEMIDLIST, LPCITEMIDLIST, BOOL);
+BOOL WINAPI ILRemoveLastID(LPITEMIDLIST);
+HRESULT WINAPI ILLoadFromStream(IStream*, LPITEMIDLIST*);
+HRESULT WINAPI ILSaveToStream(IStream*, LPCITEMIDLIST);
+LPITEMIDLIST WINAPI ILAppendID(LPITEMIDLIST, LPCSHITEMID, BOOL);
+LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST);
+LPITEMIDLIST WINAPI ILCloneFirst(LPCITEMIDLIST);
+LPITEMIDLIST WINAPI ILCombine(LPCITEMIDLIST, LPCITEMIDLIST);
+LPITEMIDLIST WINAPI ILFindChild(LPCITEMIDLIST, LPCITEMIDLIST);
+LPITEMIDLIST WINAPI ILFindLastID(LPCITEMIDLIST);
+LPITEMIDLIST WINAPI ILGetNext(LPCITEMIDLIST);
+UINT WINAPI ILGetSize(LPCITEMIDLIST);
+void WINAPI ILFree(LPITEMIDLIST);
+
+HRESULT WINAPI SHCoCreateInstance(LPCWSTR,REFCLSID,IUnknown*,REFIID,void**);
+#endif
+
+#ifdef UNICODE
+typedef IShellExecuteHookW IShellExecuteHook;
+typedef IShellLinkW IShellLink;
+typedef BROWSEINFOW BROWSEINFO,*PBROWSEINFO,*LPBROWSEINFO;
+#define SHBrowseForFolder SHBrowseForFolderW
+#define SHGetDataFromIDList SHGetDataFromIDListW
+#define SHGetPathFromIDList SHGetPathFromIDListW
+#if (_WIN32_IE >= 0x0400)
+#define SHGetSpecialFolderPath SHGetSpecialFolderPathW
+#endif
+#define SHGetFolderPath SHGetFolderPathW 
+#if (_WIN32_WINNT >= 0x0500)
+#define SHCreateDirectoryEx SHCreateDirectoryExW
+#endif
+#if (_WIN32_WINNT >= 0x0501)
+#define SHGetFolderPathAndSubDir SHGetFolderPathAndSubDirW
+#endif
+#define FILEDESCRIPTOR FILEDESCRIPTORW
+#define LPFILEDESCRIPTOR LPFILEDESCRIPTORW
+#define FILEGROUPDESCRIPTOR FILEGROUPDESCRIPTORW
+#define LPFILEGROUPDESCRIPTOR LPFILEGROUPDESCRIPTORW
+
+#else
+typedef IShellExecuteHookA IShellExecuteHook;
+typedef IShellLinkA IShellLink;
+typedef BROWSEINFOA BROWSEINFO,*PBROWSEINFO,*LPBROWSEINFO;
+#define SHBrowseForFolder SHBrowseForFolderA
+#define SHGetDataFromIDList SHGetDataFromIDListA
+#define SHGetPathFromIDList SHGetPathFromIDListA
+#if (_WIN32_IE >= 0x0400)
+#define SHGetSpecialFolderPath SHGetSpecialFolderPathA
+#endif
+#define SHGetFolderPath SHGetFolderPathA
+#if (_WIN32_WINNT >= 0x0500)
+#define SHCreateDirectoryEx SHCreateDirectoryExA
+#endif
+#if (_WIN32_WINNT >= 0x0501)
+#define SHGetFolderPathAndSubDir SHGetFolderPathAndSubDirA
+#endif
+#define FILEDESCRIPTOR FILEDESCRIPTORA
+#define LPFILEDESCRIPTOR LPFILEDESCRIPTORA
+#define FILEGROUPDESCRIPTOR FILEGROUPDESCRIPTORA
+#define LPFILEGROUPDESCRIPTOR LPFILEGROUPDESCRIPTORA
+#endif /* UNICODE */
+
+DWORD WINAPI SHFormatDrive(HWND,UINT,UINT,UINT);
+
+#define SHFMT_ID_DEFAULT 0xFFFF
+#define SHFMT_OPT_FULL 1
+#define SHFMT_OPT_SYSONLY 2
+#define SHFMT_ERROR 0xFFFFFFFF
+#define SHFMT_CANCEL 0xFFFFFFFE
+#define SHFMT_NOFORMAT 0xFFFFFFFD
+
+#pragma pack(pop)
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* _SHLOBJ_H */