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" */