[PSDK]
[reactos.git] / reactos / include / psdk / shlobj.h
index 3f12542..3db2837 100644 (file)
@@ -78,9 +78,11 @@ DECLARE_HANDLE(HPSXA);
 #endif
 
 UINT         WINAPI SHAddFromPropSheetExtArray(HPSXA,LPFNADDPROPSHEETPAGE,LPARAM);
-LPVOID       WINAPI SHAlloc(ULONG);
+LPVOID       WINAPI SHAlloc(ULONG) __WINE_ALLOC_SIZE(1);
 HRESULT      WINAPI SHCoCreateInstance(LPCWSTR,const CLSID*,IUnknown*,REFIID,LPVOID*);
 HPSXA        WINAPI SHCreatePropSheetExtArray(HKEY,LPCWSTR,UINT);
+HPSXA        WINAPI SHCreatePropSheetExtArrayEx(HKEY,LPCWSTR,UINT,IDataObject*);
+HRESULT      WINAPI SHCreateShellItem(LPCITEMIDLIST,IShellFolder*,LPCITEMIDLIST,IShellItem**);
 DWORD        WINAPI SHCLSIDFromStringA(LPCSTR,CLSID*);
 DWORD        WINAPI SHCLSIDFromStringW(LPCWSTR,CLSID*);
 #define             SHCLSIDFromString WINELIB_NAME_AW(SHCLSIDFromString)
@@ -100,6 +102,10 @@ BOOL         WINAPI SHGetPathFromIDListW(LPCITEMIDLIST,LPWSTR);
 INT          WINAPI SHHandleUpdateImage(LPCITEMIDLIST);
 HRESULT      WINAPI SHILCreateFromPath(LPCWSTR,LPITEMIDLIST*,DWORD*);
 HRESULT      WINAPI SHLoadOLE(LPARAM);
+HRESULT      WINAPI SHParseDisplayName(LPCWSTR,IBindCtx*,LPITEMIDLIST*,SFGAOF,SFGAOF*);
+HRESULT      WINAPI SHPathPrepareForWriteA(HWND,IUnknown*,LPCSTR,DWORD);
+HRESULT      WINAPI SHPathPrepareForWriteW(HWND,IUnknown*,LPCWSTR,DWORD);
+#define             SHPathPrepareForWrite WINELIB_NAME_AW(SHPathPrepareForWrite);
 UINT         WINAPI SHReplaceFromPropSheetExtArray(HPSXA,UINT,LPFNADDPROPSHEETPAGE,LPARAM);
 LPITEMIDLIST WINAPI SHSimpleIDListFromPath(LPCWSTR);
 int          WINAPI SHMapPIDLToSystemImageListIndex(IShellFolder*,LPCITEMIDLIST,int*);
@@ -110,16 +116,26 @@ INT          WINAPI PickIconDlg(HWND,LPWSTR,UINT,int *);
 #define             SHUpdateImage WINELIB_NAME_AW(SHUpdateImage)
 int          WINAPI RestartDialog(HWND,LPCWSTR,DWORD);
 int          WINAPI RestartDialogEx(HWND,LPCWSTR,DWORD,DWORD);
+BOOL         WINAPI IsUserAnAdmin(void);
 
-#define SHFMT_ERROR     0xFFFFFFFFL  /* Error on last format, drive may be formatable */
-#define SHFMT_CANCEL    0xFFFFFFFEL  /* Last format was canceled */
-#define SHFMT_NOFORMAT  0xFFFFFFFDL  /* Drive is not formatable */
+#define SHFMT_ERROR     0xFFFFFFFFL  /* Error on last format, drive may be formattable */
+#define SHFMT_CANCEL    0xFFFFFFFEL  /* Last format was cancelled */
+#define SHFMT_NOFORMAT  0xFFFFFFFDL  /* Drive is not formattable */
 
 /* SHFormatDrive flags */
 #define SHFMT_ID_DEFAULT       0xFFFF
 #define SHFMT_OPT_FULL         1
 #define SHFMT_OPT_SYSONLY      2
 
+/* SHPathPrepareForWrite flags */
+#define SHPPFW_NONE             0x00000000
+#define SHPPFW_DIRCREATE        0x00000001
+#define SHPPFW_DEFAULT          SHPPFW_DIRCREATE
+#define SHPPFW_ASKDIRCREATE     0x00000002
+#define SHPPFW_IGNOREFILENAME   0x00000004
+#define SHPPFW_NOWRITECHECK     0x00000008
+#define SHPPFW_MEDIACHECKONLY   0x00000010
+
 /* SHObjectProperties flags */
 #define SHOP_PRINTERNAME 0x01
 #define SHOP_FILEPATH    0x02
@@ -141,54 +157,168 @@ int WINAPI PathCleanupSpec(LPCWSTR,LPWSTR);
 
 
 /* DATAOBJECT_InitShellIDList*/
-#define CFSTR_SHELLIDLIST       "Shell IDList Array"      /* CF_IDLIST */
-
-typedef struct
-{      UINT cidl;
-       UINT aoffset[1];
-} CIDA, *LPIDA;
-
-#define CFSTR_SHELLIDLISTA      "Shell IDList Array"      /* CF_IDLIST */
-#define CFSTR_SHELLIDLISTOFFSET "Shell Object Offsets"    /* CF_OBJECTPOSITIONS */
-#define CFSTR_NETRESOURCES      "Net Resource"            /* CF_NETRESOURCE */
-
+#define CFSTR_SHELLIDLISTA           "Shell IDList Array"   /* CF_IDLIST */
+#define CFSTR_SHELLIDLISTOFFSETA     "Shell Object Offsets" /* CF_OBJECTPOSITIONS */
+#define CFSTR_NETRESOURCESA          "Net Resource"         /* CF_NETRESOURCE */
 /* DATAOBJECT_InitFileGroupDesc */
-#define CFSTR_FILEDESCRIPTORA   "FileGroupDescriptor"     /* CF_FILEGROUPDESCRIPTORA */
-
-#define CFSTR_FILEDESCRIPTORW   "FileGroupDescriptorW"    /* CF_FILEGROUPDESCRIPTORW */
-
+#define CFSTR_FILEDESCRIPTORA        "FileGroupDescriptor"  /* CF_FILEGROUPDESCRIPTORA */
 /* DATAOBJECT_InitFileContents*/
-#define CFSTR_FILECONTENTS      "FileContents"            /* CF_FILECONTENTS */
-
-#ifdef UNICODE
-#define CFSTR_FILENAME         L"FileNameW"
-#define CFSTR_FILENAMEMAP      L"FileNameMapW"
-#define CFSTR_FILEDESCRIPTOR   L"FileGroupDescriptorW"
-#define CFSTR_SHELLURL         L"UniformResourceLocatorW"
+#define CFSTR_FILECONTENTSA          "FileContents"         /* CF_FILECONTENTS */
+#define CFSTR_FILENAMEA              "FileName"             /* CF_FILENAMEA */
+#define CFSTR_FILENAMEMAPA           "FileNameMap"          /* CF_FILENAMEMAPA */
+#define CFSTR_PRINTERGROUPA          "PrinterFriendlyName"  /* CF_PRINTERS */
+#define CFSTR_SHELLURLA              "UniformResourceLocator"
+#define CFSTR_INETURLA               CFSTR_SHELLURLA
+#define CFSTR_PREFERREDDROPEFFECTA   "Preferred DropEffect"
+#define CFSTR_PERFORMEDDROPEFFECTA   "Performed DropEffect"
+#define CFSTR_PASTESUCCEEDEDA        "Paste Succeeded"
+#define CFSTR_INDRAGLOOPA            "InShellDragLoop"
+#define CFSTR_DRAGCONTEXTA           "DragContext"
+#define CFSTR_MOUNTEDVOLUMEA         "MountedVolume"
+#define CFSTR_PERSISTEDDATAOBJECTA   "PersistedDataObject"
+#define CFSTR_TARGETCLSIDA           "TargetCLSID"
+#define CFSTR_AUTOPLAY_SHELLIDLISTSA "Autoplay Enumerated IDList Array"
+#define CFSTR_LOGICALPERFORMEDDROPEFFECTA "Logical Performed DropEffect"
+
+#if defined(__GNUC__)
+# define CFSTR_SHELLIDLISTW \
+    (const WCHAR []){ 'S','h','e','l','l',' ','I','D','L','i','s','t',' ','A','r','r','a','y',0 }
+# define CFSTR_SHELLIDLISTOFFSETW \
+    (const WCHAR []){ 'S','h','e','l','l',' ','O','b','j','e','c','t',' ','O','f','f','s','e','t','s',0 }
+# define CFSTR_NETRESOURCESW \
+    (const WCHAR []){ 'N','e','t',' ','R','e','s','o','u','r','c','e',0 }
+# define CFSTR_FILEDESCRIPTORW \
+    (const WCHAR []){ 'F','i','l','e','G','r','o','u','p','D','e','s','c','r','i','p','t','o','r','W',0 }
+# define CFSTR_FILECONTENTSW \
+    (const WCHAR []){ 'F','i','l','e','C','o','n','t','e','n','t','s',0 }
+# define CFSTR_FILENAMEW \
+    (const WCHAR []){ 'F','i','l','e','N','a','m','e','W',0 }
+# define CFSTR_FILENAMEMAPW \
+    (const WCHAR []){ 'F','i','l','e','N','a','m','e','M','a','p','W',0 }
+# define CFSTR_PRINTERGROUPW \
+    (const WCHAR []){ 'P','r','i','n','t','e','r','F','r','i','e','n','d','l','y','N','a','m','e',0 }
+# define CFSTR_SHELLURLW \
+    (const WCHAR []){ 'U','n','i','f','o','r','m','R','e','s','o','u','r','c','e','L','o','c','a','t','o','r',0 }
+# define CFSTR_INETURLW \
+    (const WCHAR []){ 'U','n','i','f','o','r','m','R','e','s','o','u','r','c','e','L','o','c','a','t','o','r','W',0 }
+# define CFSTR_PREFERREDDROPEFFECTW \
+    (const WCHAR []){ 'P','r','e','f','e','r','r','e','d',' ','D','r','o','p','E','f','f','e','c','t',0 }
+# define CFSTR_PERFORMEDDROPEFFECTW \
+    (const WCHAR []){ 'P','e','r','f','o','r','m','e','d',' ','D','r','o','p','E','f','f','e','c','t',0 }
+# define CFSTR_PASTESUCCEEDEDW \
+    (const WCHAR []){ 'P','a','s','t','e',' ','S','u','c','c','e','e','d','e','d',0 }
+# define CFSTR_INDRAGLOOPW \
+    (const WCHAR []){ 'I','n','S','h','e','l','l','D','r','a','g','L','o','o','p',0 }
+# define CFSTR_DRAGCONTEXTW \
+    (const WCHAR []){ 'D','r','a','g','C','o','n','t','e','x','t',0 }
+# define CFSTR_MOUNTEDVOLUMEW \
+    (const WCHAR []){ 'M','o','u','n','t','e','d','V','o','l','u','m','e',0 }
+# define CFSTR_PERSISTEDDATAOBJECTW \
+    (const WCHAR []){ 'P','e','r','s','i','s','t','e','d','D','a','t','a','O','b','j','e','c','t',0 }
+# define CFSTR_TARGETCLSIDW \
+    (const WCHAR []){ 'T','a','r','g','e','t','C','L','S','I','D',0 }
+# define CFSTR_AUTOPLAY_SHELLIDLISTSW \
+    (const WCHAR []){ 'A','u','t','o','p','l','a','y',' ','E','n','u','m','e','r','a','t','e','d',\
+                      ' ','I','D','L','i','s','t',' ','A','r','r','a','y',0 }
+# define CFSTR_LOGICALPERFORMEDDROPEFFECTW \
+    (const WCHAR []){ 'L','o','g','i','c','a','l',' ','P','e','r','f','o','r','m','e','d',\
+                      ' ','D','r','o','p','E','f','f','e','c','t',0 }
+#elif defined(_MSC_VER)
+# define CFSTR_SHELLIDLISTW           L"Shell IDList Array"
+# define CFSTR_SHELLIDLISTOFFSETW     L"Shell Object Offsets"
+# define CFSTR_NETRESOURCESW          L"Net Resource"
+# define CFSTR_FILEDESCRIPTORW        L"FileGroupDescriptorW"
+# define CFSTR_FILECONTENTSW          L"FileContents"
+# define CFSTR_FILENAMEW              L"FileNameW"
+# define CFSTR_FILENAMEMAPW           L"FileNameMapW"
+# define CFSTR_PRINTERGROUPW          L"PrinterFriendlyName"
+# define CFSTR_SHELLURLW              L"UniformResourceLocator"
+# define CFSTR_INETURLW               L"UniformResourceLocatorW"
+# define CFSTR_PREFERREDDROPEFFECTW   L"Preferred DropEffect"
+# define CFSTR_PERFORMEDDROPEFFECTW   L"Performed DropEffect"
+# define CFSTR_PASTESUCCEEDEDW        L"Paste Succeeded"
+# define CFSTR_INDRAGLOOPW            L"InShellDragLoop"
+# define CFSTR_DRAGCONTEXTW           L"DragContext"
+# define CFSTR_MOUNTEDVOLUMEW         L"MountedVolume"
+# define CFSTR_PERSISTEDDATAOBJECTW   L"PersistedDataObject"
+# define CFSTR_TARGETCLSIDW           L"TargetCLSID"
+# define CFSTR_AUTOPLAY_SHELLIDLISTSW L"Autoplay Enumerated IDList Array"
+# define CFSTR_LOGICALPERFORMEDDROPEFFECTW L"Logical Performed DropEffect"
 #else
-#define CFSTR_FILENAME         "FileName"
-#define CFSTR_FILENAMEMAP      "FileNameMap"
-#define CFSTR_FILEDESCRIPTOR   "FileGroupDescriptor"
-#define CFSTR_SHELLURL         "UniformResourceLocator"
+static const WCHAR CFSTR_SHELLIDLISTW[] =
+    { 'S','h','e','l','l',' ','I','D','L','i','s','t',' ','A','r','r','a','y',0 };
+static const WCHAR CFSTR_SHELLIDLISTOFFSETW[] =
+    { 'S','h','e','l','l',' ','O','b','j','e','c','t',' ','O','f','f','s','e','t','s',0 };
+static const WCHAR CFSTR_NETRESOURCESW[] =
+    { 'N','e','t',' ','R','e','s','o','u','r','c','e',0 };
+static const WCHAR CFSTR_FILEDESCRIPTORW[] =
+    { 'F','i','l','e','G','r','o','u','p','D','e','s','c','r','i','p','t','o','r','W',0 };
+static const WCHAR CFSTR_FILECONTENTSW[] =
+    { 'F','i','l','e','C','o','n','t','e','n','t','s',0 };
+static const WCHAR CFSTR_FILENAMEW[] =
+    { 'F','i','l','e','N','a','m','e','W',0 };
+static const WCHAR CFSTR_FILENAMEMAPW[] =
+    { 'F','i','l','e','N','a','m','e','M','a','p','W',0 };
+static const WCHAR CFSTR_PRINTERGROUPW[] =
+    { 'P','r','i','n','t','e','r','F','r','i','e','n','d','l','y','N','a','m','e',0 };
+static const WCHAR CFSTR_SHELLURLW[] =
+    { 'U','n','i','f','o','r','m','R','e','s','o','u','r','c','e','L','o','c','a','t','o','r',0 };
+static const WCHAR CFSTR_INETURLW[] =
+    { 'U','n','i','f','o','r','m','R','e','s','o','u','r','c','e','L','o','c','a','t','o','r','W',0 };
+static const WCHAR CFSTR_PREFERREDDROPEFFECTW[] =
+    { 'P','r','e','f','e','r','r','e','d',' ','D','r','o','p','E','f','f','e','c','t',0 };
+static const WCHAR CFSTR_PERFORMEDDROPEFFECTW[] =
+    { 'P','e','r','f','o','r','m','e','d',' ','D','r','o','p','E','f','f','e','c','t',0 };
+static const WCHAR CFSTR_PASTESUCCEEDEDW[] =
+    { 'P','a','s','t','e',' ','S','u','c','c','e','e','d','e','d',0 };
+static const WCHAR CFSTR_INDRAGLOOPW[] =
+    { 'I','n','S','h','e','l','l','D','r','a','g','L','o','o','p',0 };
+static const WCHAR CFSTR_DRAGCONTEXTW[] =
+    { 'D','r','a','g','C','o','n','t','e','x','t',0 };
+static const WCHAR CFSTR_MOUNTEDVOLUMEW[] =
+    { 'M','o','u','n','t','e','d','V','o','l','u','m','e',0 };
+static const WCHAR CFSTR_PERSISTEDDATAOBJECTW[] =
+    { 'P','e','r','s','i','s','t','e','d','D','a','t','a','O','b','j','e','c','t',0 };
+static const WCHAR CFSTR_TARGETCLSIDW[] =
+    { 'T','a','r','g','e','t','C','L','S','I','D',0 };
+static const WCHAR CFSTR_AUTOPLAY_SHELLIDLISTSW[] =
+    { 'A','u','t','o','p','l','a','y',' ','E','n','u','m','e','r','a','t','e','d',
+      ' ','I','D','L','i','s','t',' ','A','r','r','a','y',0 };
+static const WCHAR CFSTR_LOGICALPERFORMEDDROPEFFECTW[] =
+    { 'L','o','g','i','c','a','l',' ','P','e','r','f','o','r','m','e','d',
+      ' ','D','r','o','p','E','f','f','e','c','t',0 };
 #endif
 
-#define CFSTR_FILENAMEW         "FileNameW"
-#define CFSTR_FILENAMEA         "FileName"
-#define CFSTR_FILENAMEMAPA      "FileNameMap"             /* CF_FILENAMEMAPA */
-#define CFSTR_FILENAMEMAPW      "FileNameMapW"            /* CF_FILENAMEMAPW */
+#define CFSTR_SHELLIDLIST           WINELIB_NAME_AW(CFSTR_SHELLIDLIST)
+#define CFSTR_SHELLIDLISTOFFSET     WINELIB_NAME_AW(CFSTR_SHELLIDLISTOFFSET)
+#define CFSTR_NETRESOURCES          WINELIB_NAME_AW(CFSTR_NETRESOURCES)
+#define CFSTR_FILEDESCRIPTOR        WINELIB_NAME_AW(CFSTR_FILEDESCRIPTOR)
+#define CFSTR_FILECONTENTS          WINELIB_NAME_AW(CFSTR_FILECONTENTS)
+#define CFSTR_FILENAME              WINELIB_NAME_AW(CFSTR_FILENAME)
+#define CFSTR_FILENAMEMAP           WINELIB_NAME_AW(CFSTR_FILENAMEMAP)
+#define CFSTR_PRINTERGROUP          WINELIB_NAME_AW(CFSTR_PRINTERGROUP)
+#define CFSTR_SHELLURL              WINELIB_NAME_AW(CFSTR_SHELLURL)
+#define CFSTR_INETURL               WINELIB_NAME_AW(CFSTR_INETURL)
+#define CFSTR_PREFERREDDROPEFFECT   WINELIB_NAME_AW(CFSTR_PREFERREDDROPEFFECT)
+#define CFSTR_PERFORMEDDROPEFFECT   WINELIB_NAME_AW(CFSTR_PERFORMEDDROPEFFECT)
+#define CFSTR_PASTESUCCEEDED        WINELIB_NAME_AW(CFSTR_PASTESUCCEEDED)
+#define CFSTR_INDRAGLOOP            WINELIB_NAME_AW(CFSTR_INDRAGLOOP)
+#define CFSTR_DRAGCONTEXT           WINELIB_NAME_AW(CFSTR_DRAGCONTEXT)
+#define CFSTR_MOUNTEDVOLUME         WINELIB_NAME_AW(CFSTR_MOUNTEDVOLUME)
+#define CFSTR_PERSISTEDDATAOBJECT   WINELIB_NAME_AW(CFSTR_PERSISTEDDATAOBJECT)
+#define CFSTR_TARGETCLSID           WINELIB_NAME_AW(CFSTR_TARGETCLSID)
+#define CFSTR_AUTOPLAY_SHELLIDLISTS WINELIB_NAME_AW(CFSTR_AUTOPLAY_SHELLIDLISTS)
+#define CFSTR_LOGICALPERFORMEDDROPEFFECT WINELIB_NAME_AW(CFSTR_LOGICALPERFORMEDDROPEFFECT)
 
-#define CFSTR_PRINTERGROUP      "PrinterFriendlyName"     /* CF_PRINTERS */
-#define CFSTR_PREFERREDDROPEFFECT "Preferred DropEffect"
-#define CFSTR_PERFORMEDDROPEFFECT "Performed DropEffect"
-#define CFSTR_PASTESUCCEEDED    "Paste Succeeded"
-#define CFSTR_INDRAGLOOP        "InShellDragLoop"
+typedef struct
+{      UINT cidl;
+       UINT aoffset[1];
+} CIDA, *LPIDA;
 
 /************************************************************************
 * IShellView interface
 */
 
-#define SV_CLASS_NAME   ("SHELLDLL_DefView")
-
 #define FCIDM_SHVIEWFIRST       0x0000
 /* undocumented */
 #define FCIDM_SHVIEW_ARRANGE    0x7001
@@ -252,24 +382,10 @@ typedef struct
 #define FCIDM_STATUS       (FCIDM_BROWSERFIRST + 1)
 
 
-VOID WINAPI SHSetInstanceExplorer(LPUNKNOWN);
-BOOL WINAPI IsUserAnAdmin(VOID);
-
 /****************************************************************************
  * IShellIcon interface
  */
 
-#undef  INTERFACE
-#define INTERFACE   IShellFolderViewCB
-DECLARE_INTERFACE_(IShellFolderViewCB, IUnknown)
-{
-    STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE;
-    STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
-    STDMETHOD_(ULONG,Release) (THIS) PURE;
-    STDMETHOD(MessageSFVCB)(THIS_ UINT uMsg, WPARAM wParam, LPARAM lParam) PURE;
-};
-#undef INTERFACE
-
 #define INTERFACE IShellIcon
 DECLARE_INTERFACE_(IShellIcon,IUnknown)
 {
@@ -411,6 +527,57 @@ DECLARE_INTERFACE_(IACList,IUnknown)
 #define IACList_Expand(p,a)             (p)->lpVtbl->Expand(p,a)
 #endif
 
+/* IACList2 interface */
+#define INTERFACE IACList2
+DECLARE_INTERFACE_(IACList2,IACList)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface) (THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+    STDMETHOD_(ULONG,Release) (THIS) PURE;
+    /*** IACList methods ***/
+    STDMETHOD(Expand)(THIS_ LPCOLESTR str) PURE;
+    /*** IACList2 methods ***/
+    STDMETHOD(SetOptions)(THIS_ DWORD dwFlag) PURE;
+    STDMETHOD(GetOptions)(THIS_ DWORD* pdwFlag) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IACList2_QueryInterface(p,a,b)  (p)->lpVtbl->QueryInterface(p,a,b)
+#define IACList2_AddRef(p)              (p)->lpVtbl->AddRef(p)
+#define IACList2_Release(p)             (p)->lpVtbl->Release(p)
+/*** IACList2 methods ***/
+#define IACList2_GetOptions(p,a)        (p)->lpVtbl->GetOptions(p,a)
+#define IACList2_SetOptions(p,a)        (p)->lpVtbl->SetOptions(p,a)
+#endif
+
+/****************************************************************************
+ * IShellFolderViewCB interface
+ */
+
+#define INTERFACE IShellFolderViewCB
+DECLARE_INTERFACE_(IShellFolderViewCB,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IShellFolderViewCB methods ***/
+    STDMETHOD(MessageSFVCB)(THIS_ UINT uMsg, WPARAM wParam, LPARAM lParam) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IShellFolderViewCB_QueryInterface(p,a,b)      (p)->lpVtbl->QueryInterface(p,a,b)
+#define IShellFolderViewCB_AddRef(p)                  (p)->lpVtbl->AddRef(p)
+#define IShellFolderViewCB_Release(p)                 (p)->lpVtbl->Release(p)
+/*** IShellFolderViewCB methods ***/
+#define IShellFolderViewCB_MessageSFVCB(p,a,b,c)      (p)->lpVtbl->MessageSFVCB(p,a,b,c)
+#endif
+
 /* IProgressDialog interface */
 #define PROGDLG_NORMAL           0x00000000
 #define PROGDLG_MODAL            0x00000001
@@ -502,15 +669,6 @@ DECLARE_INTERFACE_(IDeskBarClient,IOleWindow)
 
 void WINAPI SHAddToRecentDocs(UINT,LPCVOID);
 
-HANDLE WINAPI SHChangeNotification_Lock(
-       HANDLE hChange,
-       DWORD dwProcessId,
-       LPITEMIDLIST **lppidls,
-       LPLONG lpwEventId);
-BOOL WINAPI SHChangeNotification_Unlock ( HANDLE hLock);
-
-
-
 /****************************************************************************
  * SHBrowseForFolder API
  */
@@ -567,8 +725,9 @@ typedef struct tagBROWSEINFOW {
 /* message from browser */
 #define BFFM_INITIALIZED        1
 #define BFFM_SELCHANGED         2
-#define BFFM_VALIDATEFAILEDA    3   /* lParam:szPath ret:1(cont),0(EndDialog) */
-#define BFFM_VALIDATEFAILEDW    4   /* lParam:wzPath ret:1(cont),0(EndDialog) */
+#define BFFM_VALIDATEFAILEDA    3
+#define BFFM_VALIDATEFAILEDW    4
+#define BFFM_IUNKNOWN           5
 
 /* messages to browser */
 #define BFFM_SETSTATUSTEXTA     (WM_USER+100)
@@ -669,15 +828,6 @@ HRESULT WINAPI SHCreateShellFolderViewEx(LPCSFV pshfvi, IShellView **ppshv);
 #define SFVM_GET_WEBVIEW_THEME        86 /* undocumented */
 #define SFVM_GETDEFERREDVIEWSETTINGS  92 /* undocumented */
 
-#define SHPPFW_NONE 0
-#define SHPPFW_DIRCREATE 1
-#define SHPPFW_DEFAULT SHPPFW_DIRCREATE
-#define SHPPFW_ASKDIRCREATE 2
-#define SHPPFW_IGNOREFILENAME 4
-#define SHPPFW_NOWRITECHECK 8
-
-/* Types and definitions for the SFM_* parameters */
-#include <pshpack8.h>
 typedef struct _SFV_CREATE
 {
     UINT cbSize;
@@ -686,6 +836,10 @@ typedef struct _SFV_CREATE
     IShellFolderViewCB *psfvcb;
 } SFV_CREATE;
 
+HRESULT WINAPI SHCreateShellFolderView(const SFV_CREATE *pscfv, IShellView **ppsv);
+
+/* Types and definitions for the SFM_* parameters */
+#include <pshpack8.h>
 
 #define QCMINFO_PLACE_BEFORE          0
 #define QCMINFO_PLACE_AFTER           1
@@ -801,19 +955,13 @@ HRESULT WINAPI SHGetDataFromIDListA(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, int n
 HRESULT WINAPI SHGetDataFromIDListW(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, int nFormat, LPVOID pv, int cb);
 #define  SHGetDataFromIDList WINELIB_NAME_AW(SHGetDataFromIDList)
 
-PIDLIST_ABSOLUTE WINAPI SHCloneSpecialIDList(HWND hwnd, int csidl, BOOL fCreate);
+LPITEMIDLIST WINAPI SHCloneSpecialIDList(HWND hwnd, int csidl, BOOL fCreate);
 BOOL WINAPI SHGetSpecialFolderPathA (HWND hwndOwner, LPSTR szPath, int nFolder, BOOL bCreate);
 BOOL WINAPI SHGetSpecialFolderPathW (HWND hwndOwner, LPWSTR szPath, int nFolder, BOOL bCreate);
 #define  SHGetSpecialFolderPath WINELIB_NAME_AW(SHGetSpecialFolderPath)
 
 HRESULT WINAPI SHGetMalloc(LPMALLOC *lpmal) ;
 
-/**********************************************************************
- * SHCreateShellFolderView ()
- */
-
-HRESULT WINAPI SHCreateShellFolderView(const SFV_CREATE *pcsfv, IShellView **ppsv);
-
 /**********************************************************************
  * SHGetSetSettings ()
  */
@@ -1147,6 +1295,10 @@ typedef enum {
     SLDF_NO_PIDL_ALIAS = 0x00008000,
     SLDF_FORCE_UNCNAME = 0x00010000,
     SLDF_RUN_WITH_SHIMLAYER = 0x00020000,
+    SLDF_FORCE_NO_LINKTRACK = 0x00040000,
+    SLDF_ENABLE_TARGET_METADATA = 0x00080000,
+    SLDF_DISABLE_KNOWNFOLDER_RELATIVE_TRACKING = 0x00200000,
+    SLDF_VALID = 0x003ff7ff,
     SLDF_RESERVED = 0x80000000,
 } SHELL_LINK_DATA_FLAGS;
 
@@ -1158,41 +1310,6 @@ typedef struct tagDATABLOCKHEADER
 
 typedef struct {
     DATABLOCK_HEADER dbh;
-    WORD wFillAttribute;
-    WORD wPopupFillAttribute;
-    COORD dwScreenBufferSize;
-    COORD dwWindowSize;
-    COORD dwWindowOrigin;
-    DWORD nFont;
-    DWORD nInputBufferSize;
-    COORD dwFontSize;
-    UINT uFontFamily;
-    UINT uFontWeight;
-    WCHAR FaceName[LF_FACESIZE];
-    UINT uCursorSize;
-    BOOL bFullScreen;
-    BOOL bQuickEdit;
-    BOOL bInsertMode;
-    BOOL bAutoPosition;
-    UINT uHistoryBufferSize;
-    UINT uNumberOfHistoryBuffers;
-    BOOL bHistoryNoDup;
-    COLORREF ColorTable[16];
-} NT_CONSOLE_PROPS, *LPNT_CONSOLE_PROPS;
-
-typedef struct {
-    DATABLOCK_HEADER dbh;
-    UINT uCodePage;
-} NT_FE_CONSOLE_PROPS, *LPNT_FE_CONSOLE_PROPS;
-
-typedef struct {
-
-#ifdef __cplusplus
-    DATABLOCK_HEADER dbh;
-#else
-    DWORD cbSize;
-    DWORD dwSignature;
-#endif
     CHAR szDarwinID[MAX_PATH];
     WCHAR szwDarwinID[MAX_PATH];
 } EXP_DARWIN_LINK, *LPEXP_DARWIN_LINK;
@@ -1211,13 +1328,20 @@ typedef struct {
     DWORD cbOffset;
 } EXP_SPECIAL_FOLDER, *LPEXP_SPECIAL_FOLDER;
 
+typedef struct {
+    DWORD cbSize;
+    DWORD dwSignature;
+    BYTE abPropertyStorage[1];
+} EXP_PROPERTYSTORAGE;
+
 #define EXP_SZ_LINK_SIG         0xa0000001
 #define NT_CONSOLE_PROPS_SIG    0xa0000002
 #define NT_FE_CONSOLE_PROPS_SIG 0xa0000004
 #define EXP_SPECIAL_FOLDER_SIG  0xa0000005
 #define EXP_DARWIN_ID_SIG       0xa0000006
-#define EXP_LOGO3_ID_SIG        0xa0000007
 #define EXP_SZ_ICON_SIG         0xa0000007
+#define EXP_LOGO3_ID_SIG        EXP_SZ_ICON_SIG /* Old SDKs only */
+#define EXP_PROPERTYSTORAGE_SIG 0xa0000009
 
 typedef struct _SHChangeDWORDAsIDList {
     USHORT   cb;
@@ -1235,6 +1359,8 @@ typedef struct _SHChangeProductKeyAsIDList {
 ULONG WINAPI SHChangeNotifyRegister(HWND hwnd, int fSources, LONG fEvents, UINT wMsg,
                                     int cEntries, const SHChangeNotifyEntry *pshcne);
 BOOL WINAPI SHChangeNotifyDeregister(ULONG ulID);
+HANDLE WINAPI SHChangeNotification_Lock(HANDLE hChangeNotification, DWORD dwProcessId,
+                                        LPITEMIDLIST **pppidl, LONG *plEvent);
 BOOL WINAPI SHChangeNotification_Unlock(HANDLE hLock);
 
 HRESULT WINAPI SHGetRealIDL(IShellFolder *psf, LPCITEMIDLIST pidlSimple, LPITEMIDLIST * ppidlReal);
@@ -1245,6 +1371,7 @@ HRESULT WINAPI SHGetRealIDL(IShellFolder *psf, LPCITEMIDLIST pidlSimple, LPITEMI
 DWORD WINAPI SHCreateDirectory(HWND, LPCWSTR);
 int WINAPI SHCreateDirectoryExA(HWND, LPCSTR, LPSECURITY_ATTRIBUTES);
 int WINAPI SHCreateDirectoryExW(HWND, LPCWSTR, LPSECURITY_ATTRIBUTES);
+#define    SHCreateDirectoryEx WINELIB_NAME_AW(SHCreateDirectoryEx)
 
 /****************************************************************************
 * SHGetSpecialFolderLocation API
@@ -1276,7 +1403,7 @@ HRESULT WINAPI SHGetFolderPathW(HWND hwnd, int nFolder, HANDLE hToken, DWORD dwF
 #define CSIDL_SENDTO           0x0009
 #define CSIDL_BITBUCKET                0x000a
 #define CSIDL_STARTMENU                0x000b
-#define CSIDL_MYDOCUMENTS      0x000c
+#define CSIDL_MYDOCUMENTS      CSIDL_PERSONAL
 #define CSIDL_MYMUSIC          0x000d
 #define CSIDL_MYVIDEO          0x000e
 #define CSIDL_DESKTOPDIRECTORY 0x0010
@@ -1322,6 +1449,7 @@ HRESULT WINAPI SHGetFolderPathW(HWND hwnd, int nFolder, HANDLE hToken, DWORD dwF
 #define CSIDL_CDBURN_AREA      0x003b
 #define CSIDL_COMPUTERSNEARME  0x003d
 #define CSIDL_PROFILES         0x003e
+#define CSIDL_FOLDER_MASK      0x00ff
 #define CSIDL_FLAG_PER_USER_INIT 0x0800
 #define CSIDL_FLAG_NO_ALIAS    0x1000
 #define CSIDL_FLAG_DONT_VERIFY 0x4000
@@ -1438,8 +1566,26 @@ BOOL WINAPI WriteCabinetState(CABINETSTATE *);
 /****************************************************************************
  * Path Manipulation Routines
  */
+
+/* PathProcessCommand flags */
+#define PPCF_ADDQUOTES        0x01
+#define PPCF_INCLUDEARGS      0x02
+#define PPCF_ADDARGUMENTS     0x03
+#define PPCF_NODIRECTORIES    0x10
+#define PPCF_DONTRESOLVE      0x20
+#define PPCF_FORCEQUALIFY     0x40
+#define PPCF_LONGESTPOSSIBLE  0x80
+
+/* PathResolve flags */
+#define PRF_VERIFYEXISTS         0x01
+#define PRF_EXECUTABLE           0x02
+#define PRF_TRYPROGRAMEXTENSIONS 0x03
+#define PRF_FIRSTDIRDEF          0x04
+#define PRF_DONTFINDLINK         0x08
+
 VOID WINAPI PathGetShortPath(LPWSTR pszPath);
 LONG WINAPI PathProcessCommand(LPCWSTR, LPWSTR, int, DWORD);
+BOOL WINAPI PathYetAnotherMakeUniqueName(LPWSTR, LPCWSTR, LPCWSTR, LPCWSTR);
 
 /****************************************************************************
  * Drag And Drop Routines
@@ -1515,7 +1661,6 @@ HRESULT WINAPI SHCreateDefaultContextMenu(const DEFCONTEXTMENU *,REFIID,void **p
 
 typedef HRESULT (CALLBACK * LPFNDFMCALLBACK)(IShellFolder*,HWND,IDataObject*,UINT,WPARAM,LPARAM);
 HRESULT WINAPI CDefFolderMenu_Create2(LPCITEMIDLIST,HWND,UINT,LPCITEMIDLIST*,IShellFolder*,LPFNDFMCALLBACK,UINT,const HKEY *,IContextMenu **);
-
 /****************************************************************************
  * SHCreateDefaultContextMenu API
  */
@@ -1524,7 +1669,6 @@ HRESULT WINAPI
 SHCreateDefaultExtractIcon(
   REFIID riid,
   void **ppv);
-
 /****************************************************************************
  * SHCreateDataObject API
  */