|  | /* | 
|  | * Copyright 1999, 2000 Juergen Schmied | 
|  | * | 
|  | * This library is free software; you can redistribute it and/or | 
|  | * modify it under the terms of the GNU Lesser General Public | 
|  | * License as published by the Free Software Foundation; either | 
|  | * version 2.1 of the License, or (at your option) any later version. | 
|  | * | 
|  | * This library is distributed in the hope that it will be useful, | 
|  | * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
|  | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | 
|  | * Lesser General Public License for more details. | 
|  | * | 
|  | * You should have received a copy of the GNU Lesser General Public | 
|  | * License along with this library; if not, write to the Free Software | 
|  | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA | 
|  | */ | 
|  |  | 
|  | #ifndef __WINE_UNDOCSHELL_H | 
|  | #define __WINE_UNDOCSHELL_H | 
|  |  | 
|  | #include <stdarg.h> | 
|  |  | 
|  | #include "windef.h" | 
|  | #include "winbase.h" | 
|  | #include "winuser.h" | 
|  | #include "commctrl.h" | 
|  | #include "shlobj.h" | 
|  |  | 
|  | #ifdef __cplusplus | 
|  | extern "C" { | 
|  | #endif /* defined(__cplusplus) */ | 
|  |  | 
|  | /**************************************************************************** | 
|  | *	IDList Functions | 
|  | */ | 
|  | BOOL WINAPI ILGetDisplayName( | 
|  | LPCITEMIDLIST pidl, | 
|  | LPVOID path); | 
|  |  | 
|  | /* type parameter for ILGetDisplayNameEx() */ | 
|  | #define ILGDN_FORPARSING  0 | 
|  | #define ILGDN_NORMAL      1 | 
|  | #define ILGDN_INFOLDER    2 | 
|  |  | 
|  | BOOL WINAPI ILGetDisplayNameEx( | 
|  | LPSHELLFOLDER psf, | 
|  | LPCITEMIDLIST pidl, | 
|  | LPVOID path, | 
|  | DWORD type); | 
|  |  | 
|  | LPITEMIDLIST WINAPI ILGlobalClone(LPCITEMIDLIST pidl); | 
|  | void WINAPI ILGlobalFree(LPITEMIDLIST pidl); | 
|  |  | 
|  | LPITEMIDLIST WINAPI SHSimpleIDListFromPathA (LPCSTR lpszPath); | 
|  | LPITEMIDLIST WINAPI SHSimpleIDListFromPathW (LPCWSTR lpszPath); | 
|  |  | 
|  | HRESULT WINAPI SHILCreateFromPathA ( | 
|  | LPCSTR path, | 
|  | LPITEMIDLIST * ppidl, | 
|  | DWORD *attributes); | 
|  |  | 
|  | HRESULT WINAPI SHILCreateFromPathW ( | 
|  | LPCWSTR path, | 
|  | LPITEMIDLIST * ppidl, | 
|  | DWORD *attributes); | 
|  |  | 
|  | /* | 
|  | string functions | 
|  | */ | 
|  | BOOL WINAPI StrRetToStrNA(LPSTR,DWORD,LPSTRRET,const ITEMIDLIST*); | 
|  | BOOL WINAPI StrRetToStrNW(LPWSTR,DWORD,LPSTRRET,const ITEMIDLIST*); | 
|  |  | 
|  |  | 
|  | /**************************************************************************** | 
|  | * SHChangeNotifyRegister API | 
|  | */ | 
|  | #define SHCNRF_InterruptLevel		0x0001 | 
|  | #define SHCNRF_ShellLevel		0x0002 | 
|  | #define SHCNRF_RecursiveInterrupt	0x1000	/* Must be combined with SHCNRF_InterruptLevel */ | 
|  | #define SHCNRF_NewDelivery		0x8000	/* Messages use shared memory */ | 
|  |  | 
|  | /**************************************************************************** | 
|  | * 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); | 
|  |  | 
|  | BOOL WINAPI SHFindComputer( | 
|  | LPCITEMIDLIST pidlRoot, | 
|  | LPCITEMIDLIST pidlSavedSearch); | 
|  |  | 
|  | 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); | 
|  |  | 
|  | /**************************************************************************** | 
|  | * Memory Routines | 
|  | */ | 
|  |  | 
|  | /* The Platform SDK's shlobj.h header defines similar functions with a | 
|  | * leading underscore. However those are unusable because of the leading | 
|  | * underscore, because they have an incorrect calling convention, and | 
|  | * because these functions are not exported by name anyway. | 
|  | */ | 
|  | 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); | 
|  |  | 
|  | 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, | 
|  | LPCITEMIDLIST *ppidlFolder, | 
|  | LPCITEMIDLIST *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 SHRegisterDragDrop( | 
|  | HWND hWnd, | 
|  | LPDROPTARGET lpDropTarget); | 
|  |  | 
|  | HRESULT WINAPI SHRevokeDragDrop(HWND hWnd); | 
|  |  | 
|  | BOOL WINAPI DAD_DragEnter(HWND hWnd); | 
|  |  | 
|  | BOOL WINAPI DAD_SetDragImageFromListView( | 
|  | HWND hWnd, | 
|  | POINT pt); | 
|  |  | 
|  | BOOL WINAPI DAD_ShowDragImage(BOOL bShow); | 
|  |  | 
|  | HRESULT WINAPI CIDLData_CreateFromIDArray( | 
|  | LPCITEMIDLIST pidlFolder, | 
|  | DWORD cpidlFiles, | 
|  | LPCITEMIDLIST *lppidlFiles, | 
|  | LPDATAOBJECT *ppdataObject); | 
|  |  | 
|  | /**************************************************************************** | 
|  | * Path Manipulation Routines | 
|  | */ | 
|  |  | 
|  | BOOL WINAPI PathAppendAW(LPVOID lpszPath1, LPCVOID lpszPath2); | 
|  |  | 
|  | LPVOID WINAPI PathCombineAW(LPVOID szDest, LPCVOID lpszDir, LPCVOID lpszFile); | 
|  |  | 
|  | LPVOID  WINAPI PathAddBackslashAW(LPVOID path); | 
|  |  | 
|  | LPVOID WINAPI PathBuildRootAW(LPVOID lpszPath, int drive); | 
|  |  | 
|  | LPVOID WINAPI PathFindExtensionAW(LPCVOID path); | 
|  |  | 
|  | LPVOID WINAPI PathFindFileNameAW(LPCVOID path); | 
|  |  | 
|  | LPVOID WINAPI PathGetExtensionAW(LPCVOID lpszPath,  DWORD void1, DWORD void2); | 
|  |  | 
|  | LPVOID WINAPI PathGetArgsAW(LPVOID lpszPath); | 
|  |  | 
|  | BOOL WINAPI PathRemoveFileSpecAW(LPVOID lpszPath); | 
|  |  | 
|  | void WINAPI PathRemoveBlanksAW(LPVOID lpszPath); | 
|  |  | 
|  | VOID  WINAPI PathQuoteSpacesAW(LPVOID path); | 
|  |  | 
|  | void WINAPI PathUnquoteSpacesAW(LPVOID lpszPath); | 
|  |  | 
|  | BOOL WINAPI PathIsUNCAW(LPCVOID lpszPath); | 
|  |  | 
|  | BOOL WINAPI PathIsRelativeAW(LPCVOID lpszPath); | 
|  |  | 
|  | BOOL WINAPI PathIsRootAW(LPCVOID x); | 
|  |  | 
|  | BOOL WINAPI PathIsExeAW(LPCVOID lpszPath); | 
|  |  | 
|  | BOOL WINAPI PathIsDirectoryAW(LPCVOID lpszPath); | 
|  |  | 
|  | BOOL WINAPI PathFileExistsAW(LPCVOID lpszPath); | 
|  |  | 
|  | BOOL WINAPI PathMatchSpecAW(LPVOID lpszPath, LPVOID lpszSpec); | 
|  |  | 
|  | BOOL WINAPI PathMakeUniqueNameAW( | 
|  | LPVOID lpszBuffer, | 
|  | DWORD dwBuffSize, | 
|  | LPCVOID lpszShortName, | 
|  | LPCVOID lpszLongName, | 
|  | LPCVOID lpszPathName); | 
|  |  | 
|  | BOOL WINAPI PathYetAnotherMakeUniqueName( | 
|  | LPWSTR lpszBuffer, | 
|  | LPCWSTR lpszPathName, | 
|  | LPCWSTR lpszShortName, | 
|  | LPCWSTR lpszLongName); | 
|  |  | 
|  | 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 PathResolveAW(LPVOID lpszPath, LPCVOID *alpszPaths, DWORD dwFlags); | 
|  |  | 
|  | VOID WINAPI PathSetDlgItemPathAW(HWND hDlg, int nIDDlgItem, LPCVOID 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 | 
|  |  | 
|  | HRESULT WINAPI PathProcessCommandAW(LPCVOID lpszPath, LPVOID lpszBuff, | 
|  | DWORD dwBuffSize, DWORD dwFlags); | 
|  |  | 
|  | void WINAPI PathStripPathAW(LPVOID lpszPath); | 
|  |  | 
|  | BOOL WINAPI PathStripToRootAW(LPVOID lpszPath); | 
|  |  | 
|  | void WINAPI PathRemoveArgsAW(LPVOID lpszPath); | 
|  |  | 
|  | void WINAPI PathRemoveExtensionAW(LPVOID lpszPath); | 
|  |  | 
|  | int WINAPI PathParseIconLocationAW(LPVOID lpszPath); | 
|  |  | 
|  | BOOL WINAPI PathIsSameRootAW(LPCVOID lpszPath1, LPCVOID lpszPath2); | 
|  |  | 
|  | BOOL WINAPI PathFindOnPathAW(LPVOID sFile, LPCVOID *sOtherDirs); | 
|  |  | 
|  | /**************************************************************************** | 
|  | * Shell Namespace Routines | 
|  | */ | 
|  |  | 
|  | /* Generic structure used by several messages */ | 
|  | typedef struct | 
|  | { | 
|  | DWORD          dwReserved; | 
|  | DWORD          dwReserved2; | 
|  | LPCITEMIDLIST  pidl; | 
|  | LPDWORD        lpdwUser; | 
|  | } SFVCBINFO, * LPSFVCBINFO; | 
|  | typedef const SFVCBINFO * LPCSFVCBINFO; | 
|  |  | 
|  | /* 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; | 
|  |  | 
|  | /**************************************************************************** | 
|  | * 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); | 
|  |  | 
|  | void WINAPI SHFreeUnusedLibraries(void); | 
|  |  | 
|  | /* SHCreateLinks flags */ | 
|  | #define SHCLF_PREFIXNAME       0x01 | 
|  | #define SHCLF_CREATEONDESKTOP  0x02 | 
|  |  | 
|  | HRESULT WINAPI SHCreateLinks( | 
|  | HWND hWnd, | 
|  | LPCSTR lpszDir, | 
|  | LPDATAOBJECT lpDataObject, | 
|  | UINT uFlags, | 
|  | LPITEMIDLIST *lppidlLinks); | 
|  |  | 
|  | DWORD WINAPI CheckEscapesA(LPSTR string, DWORD len); | 
|  | DWORD WINAPI CheckEscapesW(LPWSTR string, DWORD len); | 
|  |  | 
|  | /* policy functions */ | 
|  | BOOL WINAPI SHInitRestricted(LPCVOID unused, LPCVOID inpRegKey); | 
|  |  | 
|  | #ifdef __cplusplus | 
|  | } /* extern "C" */ | 
|  | #endif /* defined(__cplusplus) */ | 
|  |  | 
|  | #endif /* __WINE_UNDOCSHELL_H */ |