Define structs FILEDESCRIPTOR and FILEGROUPDESCRIPTOR used with the
[wine] / include / shlobj.h
1 /*
2  * Copyright (C) the Wine project
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17  */
18
19 #ifndef __WINE_SHLOBJ_H
20 #define __WINE_SHLOBJ_H
21
22 #include <ole2.h>
23 #include <commctrl.h>
24 #include <prsht.h>
25 #include <shlguid.h>
26
27 #ifdef __cplusplus
28 extern "C" {
29 #endif /* defined(__cplusplus) */
30
31 #include <pshpack1.h>
32
33 #include <shtypes.h>
34 #include <shobjidl.h>
35
36 HRESULT WINAPI SHCoCreateInstance(LPCWSTR,const CLSID*,LPUNKNOWN,REFIID,LPVOID*);
37
38 BOOL WINAPI SHGetPathFromIDListA (LPCITEMIDLIST pidl,LPSTR pszPath);
39 BOOL WINAPI SHGetPathFromIDListW (LPCITEMIDLIST pidl,LPWSTR pszPath);
40 #define     SHGetPathFromIDList WINELIB_NAME_AW(SHGetPathFromIDList)
41
42 /*****************************************************************************
43  * Predeclare interfaces
44  */
45 typedef struct IShellIcon IShellIcon, *LPSHELLICON;
46
47
48 /*****************************************************************************
49  * IContextMenu interface
50  */
51
52
53 /* DATAOBJECT_InitShellIDList*/
54 #define CFSTR_SHELLIDLIST       "Shell IDList Array"      /* CF_IDLIST */
55
56 extern UINT cfShellIDList;
57
58 typedef struct
59 {       UINT cidl;
60         UINT aoffset[1];
61 } CIDA, *LPIDA;
62
63 #define CFSTR_SHELLIDLISTOFFSET "Shell Object Offsets"    /* CF_OBJECTPOSITIONS */
64 #define CFSTR_NETRESOURCES      "Net Resource"            /* CF_NETRESOURCE */
65
66 /* DATAOBJECT_InitFileGroupDesc */
67 #define CFSTR_FILEDESCRIPTORA   "FileGroupDescriptor"     /* CF_FILEGROUPDESCRIPTORA */
68 extern UINT cfFileGroupDesc;
69
70 #define CFSTR_FILEDESCRIPTORW   "FileGroupDescriptorW"    /* CF_FILEGROUPDESCRIPTORW */
71
72 /* DATAOBJECT_InitFileContents*/
73 #define CFSTR_FILECONTENTS      "FileContents"            /* CF_FILECONTENTS */
74 extern UINT cfFileContents;
75
76 #define CFSTR_FILENAMEA         "FileName"                /* CF_FILENAMEA */
77 #define CFSTR_FILENAMEW         "FileNameW"               /* CF_FILENAMEW */
78 #define CFSTR_PRINTERGROUP      "PrinterFriendlyName"     /* CF_PRINTERS */
79 #define CFSTR_FILENAMEMAPA      "FileNameMap"             /* CF_FILENAMEMAPA */
80 #define CFSTR_FILENAMEMAPW      "FileNameMapW"            /* CF_FILENAMEMAPW */
81 #define CFSTR_SHELLURL          "UniformResourceLocator"
82 #define CFSTR_PREFERREDDROPEFFECT "Preferred DropEffect"
83 #define CFSTR_PERFORMEDDROPEFFECT "Performed DropEffect"
84 #define CFSTR_PASTESUCCEEDED    "Paste Succeeded"
85 #define CFSTR_INDRAGLOOP        "InShellDragLoop"
86
87 #define CFSTR_FILENAME WINELIB_NAME_AW(CFSTR_FILENAME)
88
89
90 /************************************************************************
91 * IShellView interface
92 */
93
94 typedef GUID SHELLVIEWID;
95 #define SV_CLASS_NAME   ("SHELLDLL_DefView")
96
97 #define FCIDM_SHVIEWFIRST       0x0000
98 /* undocumented */
99 #define FCIDM_SHVIEW_ARRANGE    0x7001
100 #define FCIDM_SHVIEW_DELETE     0x7011
101 #define FCIDM_SHVIEW_PROPERTIES 0x7013
102 #define FCIDM_SHVIEW_CUT        0x7018
103 #define FCIDM_SHVIEW_COPY       0x7019
104 #define FCIDM_SHVIEW_INSERT     0x701A
105 #define FCIDM_SHVIEW_UNDO       0x701B
106 #define FCIDM_SHVIEW_INSERTLINK 0x701C
107 #define FCIDM_SHVIEW_SELECTALL  0x7021
108 #define FCIDM_SHVIEW_INVERTSELECTION 0x7022
109
110 #define FCIDM_SHVIEW_BIGICON    0x7029
111 #define FCIDM_SHVIEW_SMALLICON  0x702A
112 #define FCIDM_SHVIEW_LISTVIEW   0x702B
113 #define FCIDM_SHVIEW_REPORTVIEW 0x702C
114 /* 0x7030-0x703f are used by the shellbrowser */
115 #define FCIDM_SHVIEW_AUTOARRANGE 0x7031
116 #define FCIDM_SHVIEW_SNAPTOGRID 0x7032
117
118 #define FCIDM_SHVIEW_HELP       0x7041
119 #define FCIDM_SHVIEW_RENAME     0x7050
120 #define FCIDM_SHVIEW_CREATELINK 0x7051
121 #define FCIDM_SHVIEW_NEWLINK    0x7052
122 #define FCIDM_SHVIEW_NEWFOLDER  0x7053
123
124 #define FCIDM_SHVIEW_REFRESH    0x7100 /* FIXME */
125 #define FCIDM_SHVIEW_EXPLORE    0x7101 /* FIXME */
126 #define FCIDM_SHVIEW_OPEN       0x7102 /* FIXME */
127
128 #define FCIDM_SHVIEWLAST        0x7fff
129 #define FCIDM_BROWSERFIRST      0xA000
130 /* undocumented toolbar items from stddlg's*/
131 #define FCIDM_TB_UPFOLDER       0xA001
132 #define FCIDM_TB_NEWFOLDER      0xA002
133 #define FCIDM_TB_SMALLICON      0xA003
134 #define FCIDM_TB_REPORTVIEW     0xA004
135 #define FCIDM_TB_DESKTOP        0xA005  /* FIXME */
136
137 #define FCIDM_BROWSERLAST       0xbf00
138 #define FCIDM_GLOBALFIRST       0x8000
139 #define FCIDM_GLOBALLAST        0x9fff
140
141 /*
142 * Global submenu IDs and separator IDs
143 */
144 #define FCIDM_MENU_FILE             (FCIDM_GLOBALFIRST+0x0000)
145 #define FCIDM_MENU_EDIT             (FCIDM_GLOBALFIRST+0x0040)
146 #define FCIDM_MENU_VIEW             (FCIDM_GLOBALFIRST+0x0080)
147 #define FCIDM_MENU_VIEW_SEP_OPTIONS (FCIDM_GLOBALFIRST+0x0081)
148 #define FCIDM_MENU_TOOLS            (FCIDM_GLOBALFIRST+0x00c0)
149 #define FCIDM_MENU_TOOLS_SEP_GOTO   (FCIDM_GLOBALFIRST+0x00c1)
150 #define FCIDM_MENU_HELP             (FCIDM_GLOBALFIRST+0x0100)
151 #define FCIDM_MENU_FIND             (FCIDM_GLOBALFIRST+0x0140)
152 #define FCIDM_MENU_EXPLORE          (FCIDM_GLOBALFIRST+0x0150)
153 #define FCIDM_MENU_FAVORITES        (FCIDM_GLOBALFIRST+0x0170)
154
155 /* control IDs known to the view */
156 #define FCIDM_TOOLBAR      (FCIDM_BROWSERFIRST + 0)
157 #define FCIDM_STATUS       (FCIDM_BROWSERFIRST + 1)
158
159
160 /****************************************************************************
161  * IShellIcon interface
162  */
163
164 #define INTERFACE IShellIcon
165 #define IShellIcon_METHODS \
166     IUnknown_METHODS \
167     STDMETHOD(GetIconOf)(THIS_ LPCITEMIDLIST pidl, UINT flags, LPINT lpIconIndex) PURE;
168 ICOM_DEFINE(IShellIcon, IUnknown)
169 #undef INTERFACE
170
171 #ifdef COBJMACROS
172 /*** IUnknown methods ***/
173 #define IShellIcon_QueryInterface(p,a,b)      (p)->lpVtbl->QueryInterface(p,a,b)
174 #define IShellIcon_AddRef(p)                  (p)->lpVtbl->AddRef(p)
175 #define IShellIcon_Release(p)                 (p)->lpVtbl->Release(p)
176 /*** IShellIcon methods ***/
177 #define IShellIcon_GetIconOf(p,a,b,c)         (p)->lpVtbl->GetIconOf(p,a,b,c)
178 #endif
179
180 /****************************************************************************
181 * SHAddToRecentDocs API
182 */
183 #define SHARD_PIDL      0x00000001L
184 #define SHARD_PATHA     0x00000002L
185 #define SHARD_PATHW     0x00000003L
186 #define SHARD_PATH WINELIB_NAME_AW(SHARD_PATH)
187
188 DWORD WINAPI SHAddToRecentDocs(UINT uFlags, LPCVOID pv);
189
190 /****************************************************************************
191  * SHBrowseForFolder API
192  */
193 typedef INT (CALLBACK *BFFCALLBACK)(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData);
194
195 typedef struct tagBROWSEINFOA {
196     HWND        hwndOwner;
197     LPCITEMIDLIST pidlRoot;
198     LPSTR         pszDisplayName;
199     LPCSTR        lpszTitle;
200     UINT        ulFlags;
201     BFFCALLBACK   lpfn;
202     LPARAM        lParam;
203     INT         iImage;
204 } BROWSEINFOA, *PBROWSEINFOA, *LPBROWSEINFOA;
205
206 typedef struct tagBROWSEINFOW {
207     HWND        hwndOwner;
208     LPCITEMIDLIST pidlRoot;
209     LPWSTR        pszDisplayName;
210     LPCWSTR       lpszTitle;
211     UINT        ulFlags;
212     BFFCALLBACK   lpfn;
213     LPARAM        lParam;
214     INT         iImage;
215 } BROWSEINFOW, *PBROWSEINFOW, *LPBROWSEINFOW;
216
217 #define BROWSEINFO   WINELIB_NAME_AW(BROWSEINFO)
218 #define PBROWSEINFO  WINELIB_NAME_AW(PBROWSEINFO)
219 #define LPBROWSEINFO WINELIB_NAME_AW(LPBROWSEINFO)
220
221 /* Browsing for directory. */
222 #define BIF_RETURNONLYFSDIRS   0x0001
223 #define BIF_DONTGOBELOWDOMAIN  0x0002
224 #define BIF_STATUSTEXT         0x0004
225 #define BIF_RETURNFSANCESTORS  0x0008
226 #define BIF_EDITBOX            0x0010
227 #define BIF_VALIDATE           0x0020
228 #define BIF_NEWDIALOGSTYLE     0x0040   
229
230 #define BIF_BROWSEFORCOMPUTER  0x1000
231 #define BIF_BROWSEFORPRINTER   0x2000
232 #define BIF_BROWSEINCLUDEFILES 0x4000
233
234 /* message from browser */
235 #define BFFM_INITIALIZED        1
236 #define BFFM_SELCHANGED         2
237 #define BFFM_VALIDATEFAILEDA    3   /* lParam:szPath ret:1(cont),0(EndDialog) */
238 #define BFFM_VALIDATEFAILEDW    4   /* lParam:wzPath ret:1(cont),0(EndDialog) */
239
240 /* messages to browser */
241 #define BFFM_SETSTATUSTEXTA     (WM_USER+100)
242 #define BFFM_ENABLEOK           (WM_USER+101)
243 #define BFFM_SETSELECTIONA      (WM_USER+102)
244 #define BFFM_SETSELECTIONW      (WM_USER+103)
245 #define BFFM_SETSTATUSTEXTW     (WM_USER+104)
246 #define BFFM_SETOKTEXT          (WM_USER+105)
247 #define BFFM_SETEXPANDED        (WM_USER+106)
248
249 LPITEMIDLIST WINAPI SHBrowseForFolderA(LPBROWSEINFOA lpbi);
250 LPITEMIDLIST WINAPI SHBrowseForFolderW(LPBROWSEINFOW lpbi);
251 #define SHBrowseForFolder        WINELIB_NAME_AW(SHBrowseForFolder)
252 #define BFFM_SETSTATUSTEXT  WINELIB_NAME_AW(BFFM_SETSTATUSTEXT)
253 #define BFFM_SETSELECTION   WINELIB_NAME_AW(BFFM_SETSELECTION)
254 #define BFFM_VALIDATEFAILED WINELIB_NAME_AW(BFFM_VALIDATEFAILED)
255
256 /****************************************************************************
257 *       SHGetDataFromIDList API
258 */
259 #define SHGDFIL_FINDDATA        1
260 #define SHGDFIL_NETRESOURCE     2
261 #define SHGDFIL_DESCRIPTIONID   3
262
263 #define SHDID_ROOT_REGITEM          1
264 #define SHDID_FS_FILE               2
265 #define SHDID_FS_DIRECTORY          3
266 #define SHDID_FS_OTHER              4
267 #define SHDID_COMPUTER_DRIVE35      5
268 #define SHDID_COMPUTER_DRIVE525     6
269 #define SHDID_COMPUTER_REMOVABLE    7
270 #define SHDID_COMPUTER_FIXED        8
271 #define SHDID_COMPUTER_NETDRIVE     9
272 #define SHDID_COMPUTER_CDROM        10
273 #define SHDID_COMPUTER_RAMDISK      11
274 #define SHDID_COMPUTER_OTHER        12
275 #define SHDID_NET_DOMAIN            13
276 #define SHDID_NET_SERVER            14
277 #define SHDID_NET_SHARE             15
278 #define SHDID_NET_RESTOFNET         16
279 #define SHDID_NET_OTHER             17
280 #define SHDID_COMPUTER_IMAGING      18
281 #define SHDID_COMPUTER_AUDIO        19
282 #define SHDID_COMPUTER_SHAREDDOCS   20
283
284 typedef struct _SHDESCRIPTIONID
285 {   DWORD   dwDescriptionId;
286     CLSID   clsid;
287 } SHDESCRIPTIONID, *LPSHDESCRIPTIONID;
288
289 HRESULT WINAPI SHGetDataFromIDListA(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, int nFormat, LPVOID pv, int cb);
290 HRESULT WINAPI SHGetDataFromIDListW(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, int nFormat, LPVOID pv, int cb);
291 #define  SHGetDataFromIDList WINELIB_NAME_AW(SHGetDataFromIDList)
292
293 BOOL WINAPI SHGetSpecialFolderPathA (HWND hwndOwner, LPSTR szPath, int nFolder, BOOL bCreate);
294 BOOL WINAPI SHGetSpecialFolderPathW (HWND hwndOwner, LPWSTR szPath, int nFolder, BOOL bCreate);
295 #define  SHGetSpecialFolderPath WINELIB_NAME_AW(SHGetSpecialFolderPath)
296
297 /****************************************************************************
298 * shlview structures
299 */
300
301 /*
302 * IShellFolderViewCallback Callback
303 *  This "callback" is called by the shells default IShellView implementation (that
304 *  we got using SHCreateShellViewEx()), to notify us of the various things that
305 *  are happening to the shellview (and ask for things too).
306 *
307 *  You don't have to support anything here - anything you don't want to
308 *  handle, the shell will do itself if you just return E_NOTIMPL. This parameters
309 *  that the shell passes to this function are entirely undocumented.
310 *
311 *  HOWEVER, as the cabview sample as originally written used this callback, the
312 *  writers implemented the callback mechanism on top of their own IShellView.
313 *  Look there for some clues on what to do here.
314 */
315
316 typedef HRESULT (CALLBACK *SHELLVIEWPROC)(DWORD dwUserParam,LPSHELLFOLDER psf,
317                          HWND hwnd,UINT uMsg,UINT wParam,LPARAM lParam);
318
319 /* NF valid values for the "viewmode" item of the SHELLTEMPLATE*/
320 #define NF_INHERITVIEW    0x0000
321 #define NF_LOCALVIEW        0x0001
322
323 typedef struct _SHELLVIEWDATA   /* idl */
324 { DWORD           dwSize;
325   LPSHELLFOLDER   pShellFolder;
326   DWORD           dwUserParam;
327   LPCITEMIDLIST   pidl;
328   DWORD           v3;        /* always 0 */
329   SHELLVIEWPROC   pCallBack;
330   DWORD           viewmode;  /* NF_* enum */
331 } SHELLVIEWDATA, * LPSHELLVIEWDATA;
332
333 HRESULT WINAPI SHGetMalloc(LPMALLOC *lpmal) ;
334
335 /**********************************************************************
336  * SHGetSetSettings ()
337  */
338
339 typedef struct
340 {
341     BOOL fShowAllObjects : 1;
342     BOOL fShowExtensions : 1;
343     BOOL fNoConfirmRecycle : 1;
344
345     BOOL fShowSysFiles : 1;
346     BOOL fShowCompColor : 1;
347     BOOL fDoubleClickInWebView : 1;
348     BOOL fDesktopHTML : 1;
349     BOOL fWin95Classic : 1;
350     BOOL fDontPrettyPath : 1;
351     BOOL fShowAttribCol : 1;
352     BOOL fMapNetDrvBtn : 1;
353     BOOL fShowInfoTip : 1;
354     BOOL fHideIcons : 1;
355     BOOL fWebView : 1;
356     BOOL fFilter : 1;
357     BOOL fShowSuperHidden : 1;
358     BOOL fNoNetCrawling : 1;
359
360     DWORD dwWin95Unused;
361     UINT  uWin95Unused;
362     LONG   lParamSort;
363     int    iSortDirection;
364     UINT   version;
365     UINT uNotUsed;
366     BOOL fSepProcess: 1;
367     BOOL fStartPanelOn: 1;
368     BOOL fShowStartPage: 1;
369     UINT fSpareFlags : 13;
370 } SHELLSTATE, *LPSHELLSTATE;
371
372 /**********************************************************************
373  * SHGetSettings ()
374  */
375 typedef struct
376 {       BOOL fShowAllObjects : 1;
377         BOOL fShowExtensions : 1;
378         BOOL fNoConfirmRecycle : 1;
379         BOOL fShowSysFiles : 1;
380
381         BOOL fShowCompColor : 1;
382         BOOL fDoubleClickInWebView : 1;
383         BOOL fDesktopHTML : 1;
384         BOOL fWin95Classic : 1;
385
386         BOOL fDontPrettyPath : 1;
387         BOOL fShowAttribCol : 1;
388         BOOL fMapNetDrvBtn : 1;
389         BOOL fShowInfoTip : 1;
390
391         BOOL fHideIcons : 1;
392         UINT fRestFlags : 3;
393 } SHELLFLAGSTATE, * LPSHELLFLAGSTATE;
394
395 VOID WINAPI SHGetSettings(LPSHELLFLAGSTATE lpsfs, DWORD dwMask);
396
397 #define SSF_SHOWALLOBJECTS              0x0001
398 #define SSF_SHOWEXTENSIONS              0x0002
399 #define SSF_SHOWCOMPCOLOR               0x0008
400 #define SSF_SHOWSYSFILES                0x0020
401 #define SSF_DOUBLECLICKINWEBVIEW        0x0080
402 #define SSF_SHOWATTRIBCOL               0x0100
403 #define SSF_DESKTOPHTML                 0x0200
404 #define SSF_WIN95CLASSIC                0x0400
405 #define SSF_DONTPRETTYPATH              0x0800
406 #define SSF_SHOWINFOTIP                 0x2000
407 #define SSF_MAPNETDRVBUTTON             0x1000
408 #define SSF_NOCONFIRMRECYCLE            0x8000
409 #define SSF_HIDEICONS                   0x4000
410
411 /****************************************************************************
412 * SHRestricted API
413 */
414 typedef enum RESTRICTIONS
415 {
416         REST_NONE                       = 0x00000000,
417         REST_NORUN                      = 0x00000001,
418         REST_NOCLOSE                    = 0x00000002,
419         REST_NOSAVESET                  = 0x00000004,
420         REST_NOFILEMENU                 = 0x00000008,
421         REST_NOSETFOLDERS               = 0x00000010,
422         REST_NOSETTASKBAR               = 0x00000020,
423         REST_NODESKTOP                  = 0x00000040,
424         REST_NOFIND                     = 0x00000080,
425         REST_NODRIVES                   = 0x00000100,
426         REST_NODRIVEAUTORUN             = 0x00000200,
427         REST_NODRIVETYPEAUTORUN         = 0x00000400,
428         REST_NONETHOOD                  = 0x00000800,
429         REST_STARTBANNER                = 0x00001000,
430         REST_RESTRICTRUN                = 0x00002000,
431         REST_NOPRINTERTABS              = 0x00004000,
432         REST_NOPRINTERDELETE            = 0x00008000,
433         REST_NOPRINTERADD               = 0x00010000,
434         REST_NOSTARTMENUSUBFOLDERS      = 0x00020000,
435         REST_MYDOCSONNET                = 0x00040000,
436         REST_NOEXITTODOS                = 0x00080000,
437         REST_ENFORCESHELLEXTSECURITY    = 0x00100000,
438         REST_LINKRESOLVEIGNORELINKINFO  = 0x00200000,
439         REST_NOCOMMONGROUPS             = 0x00400000,
440         REST_SEPARATEDESKTOPPROCESS     = 0x00800000,
441         REST_NOWEB                      = 0x01000000,
442         REST_NOTRAYCONTEXTMENU          = 0x02000000,
443         REST_NOVIEWCONTEXTMENU          = 0x04000000,
444         REST_NONETCONNECTDISCONNECT     = 0x08000000,
445         REST_STARTMENULOGOFF            = 0x10000000,
446         REST_NOSETTINGSASSIST           = 0x20000000,
447         REST_NOINTERNETICON             = 0x40000001,
448         REST_NORECENTDOCSHISTORY,
449         REST_NORECENTDOCSMENU,
450         REST_NOACTIVEDESKTOP,
451         REST_NOACTIVEDESKTOPCHANGES,
452         REST_NOFAVORITESMENU,
453         REST_CLEARRECENTDOCSONEXIT,
454         REST_CLASSICSHELL,
455         REST_NOCUSTOMIZEWEBVIEW,
456
457         REST_NOHTMLWALLPAPER            = 0x40000010,
458         REST_NOCHANGINGWALLPAPER,
459         REST_NODESKCOMP,
460         REST_NOADDDESKCOMP,
461         REST_NODELDESKCOMP,
462         REST_NOCLOSEDESKCOMP,
463         REST_NOCLOSE_DRAGDROPBAND,
464         REST_NOMOVINGBAND,
465         REST_NOEDITDESKCOMP,
466         REST_NORESOLVESEARCH,
467         REST_NORESOLVETRACK,
468         REST_FORCECOPYACLWITHFILE,
469         REST_NOLOGO3CHANNELNOTIFY,
470         REST_NOFORGETSOFTWAREUPDATE,
471         REST_NOSETACTIVEDESKTOP,
472         REST_NOUPDATEWINDOWS,
473         REST_NOCHANGESTARMENU,          /* 0x40000020 */
474         REST_NOFOLDEROPTIONS,
475         REST_HASFINDCOMPUTERS,
476         REST_INTELLIMENUS,
477         REST_RUNDLGMEMCHECKBOX,
478         REST_ARP_ShowPostSetup,
479         REST_NOCSC,
480         REST_NOCONTROLPANEL,
481         REST_ENUMWORKGROUP,
482         REST_ARP_NOARP,
483         REST_ARP_NOREMOVEPAGE,
484         REST_ARP_NOADDPAGE,
485         REST_ARP_NOWINSETUPPAGE,
486         REST_GREYMSIADS,
487         REST_NOCHANGEMAPPEDDRIVELABEL,
488         REST_NOCHANGEMAPPEDDRIVECOMMENT,
489         REST_MaxRecentDocs,             /* 0x40000030 */
490         REST_NONETWORKCONNECTIONS,
491         REST_FORCESTARTMENULOGOFF,
492         REST_NOWEBVIEW,
493         REST_NOCUSTOMIZETHISFOLDER,
494         REST_NOENCRYPTION,
495
496         REST_ALLOWFRENCHENCRYPTION,     /* not documented */
497
498         REST_DONTSHOWSUPERHIDDEN,
499         REST_NOSHELLSEARCHBUTTON,
500         REST_NOHARDWARETAB,
501         REST_NORUNASINSTALLPROMPT,
502         REST_PROMPTRUNASINSTALLNETPATH,
503         REST_NOMANAGEMYCOMPUTERVERB,
504         REST_NORECENTDOCSNETHOOD,
505         REST_DISALLOWRUN,
506         REST_NOWELCOMESCREEN,
507         REST_RESTRICTCPL,               /* 0x40000040 */
508         REST_DISALLOWCPL,
509         REST_NOSMBALLOONTIP,
510         REST_NOSMHELP,
511         REST_NOWINKEYS,
512         REST_NOENCRYPTONMOVE,
513         REST_NOLOCALMACHINERUN,
514         REST_NOCURRENTUSERRUN,
515         REST_NOLOCALMACHINERUNONCE,
516         REST_NOCURRENTUSERRUNONCE,
517         REST_FORCEACTIVEDESKTOPON,
518         REST_NOCOMPUTERSNEARME,
519         REST_NOVIEWONDRIVE,
520         REST_NONETCRAWL,
521         REST_NOSHAREDDOCUMENTS,
522         REST_NOSMMYDOCS,
523         REST_NOSMMYPICS,                /* 0x40000050 */
524         REST_ALLOWBITBUCKDRIVES,
525         REST_NONLEGACYSHELLMODE,
526         REST_NOCONTROLPANELBARRICADE,
527         REST_NOSTARTPAGE,
528         REST_NOAUTOTRAYNOTIFY,
529         REST_NOTASKGROUPING,
530         REST_NOCDBURNING,
531         REST_MYCOMPNOPROP,
532         REST_MYDOCSNOPROP,
533         REST_NOSTARTPANEL,
534         REST_NODISPLAYAPPEARANCEPAGE,
535         REST_NOTHEMESTAB,
536         REST_NOVISUALSTYLECHOICE,
537         REST_NOSIZECHOICE,
538         REST_NOCOLORCHOICE,
539         REST_SETVISUALSTYLE,            /* 0x40000060 */
540         REST_STARTRUNNOHOMEPATH,
541         REST_NOUSERNAMEINSTARTPANEL,
542         REST_NOMYCOMPUTERICON,
543         REST_NOSMNETWORKPLACES,
544         REST_NOSMPINNEDLIST,
545         REST_NOSMMYMUSIC,
546         REST_NOSMEJECTPC,
547         REST_NOSMMOREPROGRAMS,
548         REST_NOSMMFUPROGRAMS,
549         REST_NOTRAYITEMSDISPLAY,
550         REST_NOTOOLBARSONTASKBAR,
551         /* 0x4000006C
552            0x4000006D
553            0x4000006E */
554         REST_NOSMCONFIGUREPROGRAMS      = 0x4000006F,
555         REST_HIDECLOCK,                 /* 0x40000070 */
556         REST_NOLOWDISKSPACECHECKS,
557         REST_NOENTIRENETWORK,
558         REST_NODESKTOPCLEANUP,
559         REST_BITBUCKNUKEONDELETE,
560         REST_BITBUCKCONFIRMDELETE,
561         REST_BITBUCKNOPROP,
562         REST_NODISPBACKGROUND,
563         REST_NODISPSCREENSAVEPG,
564         REST_NODISPSETTINGSPG,
565         REST_NODISPSCREENSAVEPREVIEW,
566         REST_NODISPLAYCPL,
567         REST_HIDERUNASVERB,
568         REST_NOTHUMBNAILCACHE,
569         REST_NOSTRCMPLOGICAL,
570         REST_NOPUBLISHWIZARD,
571         REST_NOONLINEPRINTSWIZARD,      /* 0x40000080 */
572         REST_NOWEBSERVICES,
573         REST_ALLOWUNHASHEDWEBVIEW,
574         REST_ALLOWLEGACYWEBVIEW,
575         REST_REVERTWEBVIEWSECURITY,
576         
577         REST_INHERITCONSOLEHANDLES      = 0x40000086,
578
579         REST_NODISCONNECT               = 0x41000001,
580         REST_NOSECURITY,
581         REST_NOFILEASSOCIATE,           /* 0x41000003 */
582 } RESTRICTIONS;
583
584 DWORD WINAPI SHRestricted(RESTRICTIONS rest);
585
586 /****************************************************************************
587 * SHChangeNotify API
588 */
589 typedef struct _SHChangeNotifyEntry
590 {
591     LPCITEMIDLIST pidl;
592     BOOL   fRecursive;
593 } SHChangeNotifyEntry;
594
595 #define SHCNE_RENAMEITEM        0x00000001
596 #define SHCNE_CREATE            0x00000002
597 #define SHCNE_DELETE            0x00000004
598 #define SHCNE_MKDIR             0x00000008
599 #define SHCNE_RMDIR             0x00000010
600 #define SHCNE_MEDIAINSERTED     0x00000020
601 #define SHCNE_MEDIAREMOVED      0x00000040
602 #define SHCNE_DRIVEREMOVED      0x00000080
603 #define SHCNE_DRIVEADD          0x00000100
604 #define SHCNE_NETSHARE          0x00000200
605 #define SHCNE_NETUNSHARE        0x00000400
606 #define SHCNE_ATTRIBUTES        0x00000800
607 #define SHCNE_UPDATEDIR         0x00001000
608 #define SHCNE_UPDATEITEM        0x00002000
609 #define SHCNE_SERVERDISCONNECT  0x00004000
610 #define SHCNE_UPDATEIMAGE       0x00008000
611 #define SHCNE_DRIVEADDGUI       0x00010000
612 #define SHCNE_RENAMEFOLDER      0x00020000
613 #define SHCNE_FREESPACE         0x00040000
614
615 #define SHCNE_EXTENDED_EVENT    0x04000000
616 #define SHCNE_ASSOCCHANGED      0x08000000
617 #define SHCNE_DISKEVENTS        0x0002381F
618 #define SHCNE_GLOBALEVENTS      0x0C0581E0
619 #define SHCNE_ALLEVENTS         0x7FFFFFFF
620 #define SHCNE_INTERRUPT         0x80000000
621
622 #define SHCNEE_ORDERCHANGED     0x0002L
623 #define SHCNEE_MSI_CHANGE       0x0004L
624 #define SHCNEE_MSI_UNINSTALL    0x0005L
625
626 #define SHCNF_IDLIST            0x0000
627 #define SHCNF_PATHA             0x0001
628 #define SHCNF_PRINTERA          0x0002
629 #define SHCNF_DWORD             0x0003
630 #define SHCNF_PATHW             0x0005
631 #define SHCNF_PRINTERW          0x0006
632 #define SHCNF_TYPE              0x00FF
633 #define SHCNF_FLUSH             0x1000
634 #define SHCNF_FLUSHNOWAIT       0x2000
635
636 #define SHCNF_PATH              WINELIB_NAME_AW(SHCNF_PATH)
637 #define SHCNF_PRINTER           WINELIB_NAME_AW(SHCNF_PRINTER)
638
639 void WINAPI SHChangeNotify(LONG wEventId, UINT uFlags, LPCVOID dwItem1, LPCVOID dwItem2);
640
641 /*
642  * IShellChangeNotify
643  */
644 typedef struct IShellChangeNotify IShellChangeNotify, *LPSHELLCHANGENOTIFY;
645
646 #define INTERFACE IShellChangeNotify
647 #define IShellChangeNotify_METHODS \
648     IUnknown_METHODS \
649     STDMETHOD(OnChange)(THIS_ LONG lEvent, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2) PURE;
650
651 ICOM_DEFINE(IShellChangeNotify, IUnknown)
652 #undef INTERFACE
653
654 #ifdef COBJMACROS
655 /*** IUnknown methods ***/
656 #define IShellChangeNotify_QueryInterface(p,a,b)      (p)->lpVtbl->QueryInterface(p,a,b)
657 #define IShellChangeNotify_AddRef(p)                  (p)->lpVtbl->AddRef(p)
658 #define IShellChangeNotify_Release(p)                 (p)->lpVtbl->Release(p)
659 /*** IShellChangeNotify methods ***/
660 #define IShellChangeNotify_OnChange(p,a,b,c)         (p)->lpVtbl->OnChange(p,a,b,c)
661 #endif
662
663 typedef struct _SHChangeDWORDAsIDList {
664     USHORT   cb;
665     DWORD    dwItem1;
666     DWORD    dwItem2;
667     USHORT   cbZero;
668 } SHChangeDWORDAsIDList, *LPSHChangeDWORDAsIDList;
669
670 typedef struct _SHChangeProductKeyAsIDList {
671     USHORT cb;
672     WCHAR wszProductKey[39];
673     USHORT cbZero;
674 } SHChangeProductKeyAsIDList, *LPSHChangeProductKeyAsIDList;
675
676 ULONG WINAPI SHChangeNotifyRegister(HWND hwnd, int fSources, LONG fEvents, UINT wMsg,
677                                     int cEntries, SHChangeNotifyEntry *pshcne);
678 BOOL WINAPI SHChangeNotifyDeregister(ULONG ulID);
679 HANDLE WINAPI SHChangeNotification_Lock(HANDLE hChangeNotification, DWORD dwProcessId,
680                                         LPITEMIDLIST **pppidl, LONG *plEvent);
681 BOOL WINAPI SHChangeNotification_Unlock(HANDLE hLock);
682
683 HRESULT WINAPI SHGetRealIDL(IShellFolder *psf, LPCITEMIDLIST pidlSimple, LPITEMIDLIST * ppidlReal);
684
685 /****************************************************************************
686 * SHCreateDirectory API
687 */
688 DWORD WINAPI SHCreateDirectory(HWND, LPCVOID);
689 DWORD WINAPI SHCreateDirectoryExA(HWND, LPCSTR, LPSECURITY_ATTRIBUTES);
690 DWORD WINAPI SHCreateDirectoryExW(HWND, LPCWSTR, LPSECURITY_ATTRIBUTES);
691
692 /****************************************************************************
693 * SHGetSpecialFolderLocation API
694 */
695 HRESULT WINAPI SHGetSpecialFolderLocation(HWND hwndOwner, int nFolder, LPITEMIDLIST * ppidl);
696 HRESULT WINAPI SHGetFolderLocation(HWND hwndOwner, int nFolder, HANDLE hToken, DWORD dwReserved, LPITEMIDLIST *ppidl);
697
698 #define CSIDL_DESKTOP           0x0000
699 #define CSIDL_INTERNET          0x0001
700 #define CSIDL_PROGRAMS          0x0002
701 #define CSIDL_CONTROLS          0x0003
702 #define CSIDL_PRINTERS          0x0004
703 #define CSIDL_PERSONAL          0x0005
704 #define CSIDL_FAVORITES         0x0006
705 #define CSIDL_STARTUP           0x0007
706 #define CSIDL_RECENT            0x0008
707 #define CSIDL_SENDTO            0x0009
708 #define CSIDL_BITBUCKET         0x000a
709 #define CSIDL_STARTMENU         0x000b
710 #define CSIDL_MYDOCUMENTS       0x000c
711 #define CSIDL_MYMUSIC           0x000d
712 #define CSIDL_MYVIDEO           0x000e
713 #define CSIDL_DESKTOPDIRECTORY  0x0010
714 #define CSIDL_DRIVES            0x0011
715 #define CSIDL_NETWORK           0x0012
716 #define CSIDL_NETHOOD           0x0013
717 #define CSIDL_FONTS             0x0014
718 #define CSIDL_TEMPLATES         0x0015
719 #define CSIDL_COMMON_STARTMENU  0x0016
720 #define CSIDL_COMMON_PROGRAMS   0X0017
721 #define CSIDL_COMMON_STARTUP    0x0018
722 #define CSIDL_COMMON_DESKTOPDIRECTORY   0x0019
723 #define CSIDL_APPDATA           0x001a
724 #define CSIDL_PRINTHOOD         0x001b
725 #define CSIDL_LOCAL_APPDATA     0x001c
726 #define CSIDL_ALTSTARTUP        0x001d
727 #define CSIDL_COMMON_ALTSTARTUP 0x001e
728 #define CSIDL_COMMON_FAVORITES  0x001f
729 #define CSIDL_INTERNET_CACHE    0x0020
730 #define CSIDL_COOKIES           0x0021
731 #define CSIDL_HISTORY           0x0022
732 #define CSIDL_COMMON_APPDATA    0x0023
733 #define CSIDL_WINDOWS           0x0024
734 #define CSIDL_SYSTEM            0x0025
735 #define CSIDL_PROGRAM_FILES     0x0026
736 #define CSIDL_MYPICTURES        0x0027
737 #define CSIDL_PROFILE           0x0028
738 #define CSIDL_SYSTEMX86         0x0029
739 #define CSIDL_PROGRAM_FILESX86  0x002a
740 #define CSIDL_PROGRAM_FILES_COMMON      0x002b
741 #define CSIDL_PROGRAM_FILES_COMMONX86   0x002c
742 #define CSIDL_COMMON_TEMPLATES  0x002d
743 #define CSIDL_COMMON_DOCUMENTS  0x002e
744 #define CSIDL_COMMON_ADMINTOOLS 0x002f
745 #define CSIDL_ADMINTOOLS        0x0030
746 #define CSIDL_CONNECTIONS       0x0031
747 #define CSIDL_COMMON_MUSIC      0x0035
748 #define CSIDL_COMMON_PICTURES   0x0036
749 #define CSIDL_COMMON_VIDEO      0x0037
750 #define CSIDL_RESOURCES         0x0038
751 #define CSIDL_RESOURCES_LOCALIZED 0x0039
752 #define CSIDL_COMMON_OEM_LINKS  0x003a
753 #define CSIDL_CDBURN_AREA       0x003b
754 #define CSIDL_COMPUTERSNEARME   0x003d
755 #define CSIDL_PROFILES          0x003e
756 #define CSIDL_FOLDER_MASK       0x00ff
757 #define CSIDL_FLAG_PER_USER_INIT 0x0800
758 #define CSIDL_FLAG_NO_ALIAS     0x1000
759 #define CSIDL_FLAG_DONT_VERIFY  0x4000
760 #define CSIDL_FLAG_CREATE       0x8000
761
762 #define CSIDL_FLAG_MASK         0xff00
763
764 /****************************************************************************
765  * SHGetDesktopFolder API
766  */
767 DWORD WINAPI SHGetDesktopFolder(IShellFolder * *);
768
769 /****************************************************************************
770  * SHBindToParent API
771  */
772 HRESULT WINAPI SHBindToParent(LPCITEMIDLIST pidl, REFIID riid, LPVOID *ppv, LPCITEMIDLIST *ppidlLast);
773
774 /****************************************************************************
775 * SHDefExtractIcon API
776 */
777 HRESULT WINAPI SHDefExtractIconA(LPCSTR pszIconFile, int iIndex, UINT uFlags,
778                                  HICON* phiconLarge, HICON* phiconSmall, UINT nIconSize);
779 HRESULT WINAPI SHDefExtractIconW(LPCWSTR pszIconFile, int iIndex, UINT uFlags,
780                                  HICON* phiconLarge, HICON* phiconSmall, UINT nIconSize);
781 #define        SHDefExtractIcon WINELIB_NAME_AW(SHDefExtractIcon)
782
783 /*
784  * DROPFILES for CF_HDROP and CF_PRINTERS
785  */
786 typedef struct _DROPFILES
787 {
788   DWORD pFiles;
789   POINT pt;
790   BOOL  fNC;
791   BOOL  fWide;
792 } DROPFILES, *LPDROPFILES;
793
794 /*
795  * Properties of a file in the clipboard
796  */
797 typedef struct _FILEDESCRIPTORA {
798     DWORD dwFlags;
799     CLSID clsid;
800     SIZEL sizel;
801     POINTL pointl;
802     DWORD dwFileAttributes;
803     FILETIME ftCreationTime;
804     FILETIME ftLastAccessTime;
805     FILETIME ftLastWriteTime;
806     DWORD nFileSizeHigh;
807     DWORD nFileSizeLow;
808     CHAR cFileName[MAX_PATH];
809 } FILEDESCRIPTORA, *LPFILEDESCRIPTORA;
810
811 typedef struct _FILEDESCRIPTORW {
812     DWORD dwFlags;
813     CLSID clsid;
814     SIZEL sizel;
815     POINTL pointl;
816     DWORD dwFileAttributes;
817     FILETIME ftCreationTime;
818     FILETIME ftLastAccessTime;
819     FILETIME ftLastWriteTime;
820     DWORD nFileSizeHigh;
821     DWORD nFileSizeLow;
822     WCHAR cFileName[MAX_PATH];
823 } FILEDESCRIPTORW, *LPFILEDESCRIPTORW;
824
825 DECL_WINELIB_TYPE_AW(FILEDESCRIPTOR)
826 DECL_WINELIB_TYPE_AW(LPFILEDESCRIPTOR)
827
828 /*
829  * CF_FILEGROUPDESCRIPTOR clipboard format
830  */
831 typedef struct _FILEGROUPDESCRIPTORA {
832     UINT cItems;
833     FILEDESCRIPTORA fgd[1];
834 } FILEGROUPDESCRIPTORA, *LPFILEGROUPDESCRIPTORA;
835
836 typedef struct _FILEGROUPDESCRIPTORW {
837     UINT cItems;
838     FILEDESCRIPTORW fgd[1];
839 } FILEGROUPDESCRIPTORW, *LPFILEGROUPDESCRIPTORW;
840
841 DECL_WINELIB_TYPE_AW(FILEGROUPDESCRIPTOR)
842 DECL_WINELIB_TYPE_AW(LPFILEGROUPDESCRIPTOR)
843
844 #include <poppack.h>
845
846 /*****************************************************************************
847  * IFileSystemBindData interface
848  */
849 #ifndef __IFileSystemBindData_FWD_DEFINED__
850 #define __IFileSystemBindData_FWD_DEFINED__
851 typedef struct IFileSystemBindData IFileSystemBindData;
852 #endif
853
854 typedef IFileSystemBindData *LPFILESYSTEMBINDDATA;
855
856 #ifndef __IFileSystemBindData_INTERFACE_DEFINED__
857 #define __IFileSystemBindData_INTERFACE_DEFINED__
858
859 DEFINE_GUID(IID_IFileSystemBindData, 0x01e18d10, 0x4d8b, 0x11d2, 0x85,0x5d, 0x00,0x60,0x08,0x05,0x93,0x67);
860 #if defined(__cplusplus) && !defined(CINTERFACE)
861 struct IFileSystemBindData : public IUnknown
862 {
863     virtual HRESULT STDMETHODCALLTYPE GetFindData(
864         WIN32_FIND_DATAW* pfd) = 0;
865
866     virtual HRESULT STDMETHODCALLTYPE SetFindData(
867         const WIN32_FIND_DATAW* pfd) = 0;
868
869 };
870 #else
871 typedef struct IFileSystemBindDataVtbl IFileSystemBindDataVtbl;
872 struct IFileSystemBindData {
873     const IFileSystemBindDataVtbl* lpVtbl;
874 };
875 struct IFileSystemBindDataVtbl {
876     ICOM_MSVTABLE_COMPAT_FIELDS
877
878     /*** IUnknown methods ***/
879     HRESULT (STDMETHODCALLTYPE *QueryInterface)(
880         IFileSystemBindData* This,
881         REFIID riid,
882         void** ppvObject);
883
884     ULONG (STDMETHODCALLTYPE *AddRef)(
885         IFileSystemBindData* This);
886
887     ULONG (STDMETHODCALLTYPE *Release)(
888         IFileSystemBindData* This);
889
890     /*** IFileSystemBindData methods ***/
891     HRESULT (STDMETHODCALLTYPE *GetFindData)(
892         IFileSystemBindData* This,
893         WIN32_FIND_DATAW* pfd);
894
895     HRESULT (STDMETHODCALLTYPE *SetFindData)(
896         IFileSystemBindData* This,
897         const WIN32_FIND_DATAW* pfd);
898
899 };
900
901 /*** IUnknown methods ***/
902 #define IFileSystemBindData_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
903 #define IFileSystemBindData_AddRef(p) (p)->lpVtbl->AddRef(p)
904 #define IFileSystemBindData_Release(p) (p)->lpVtbl->Release(p)
905 /*** IFileSystemBindData methods ***/
906 #define IFileSystemBindData_GetFindData(p,a) (p)->lpVtbl->GetFindData(p,a)
907 #define IFileSystemBindData_SetFindData(p,a) (p)->lpVtbl->SetFindData(p,a)
908
909 #endif
910
911 #define IFileSystemBindData_METHODS \
912     ICOM_MSVTABLE_COMPAT_FIELDS \
913     /*** IUnknown methods ***/ \
914     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; \
915     STDMETHOD_(ULONG,AddRef)(THIS) PURE; \
916     STDMETHOD_(ULONG,Release)(THIS) PURE; \
917     /*** IFileSystemBindData methods ***/ \
918     STDMETHOD_(HRESULT,GetFindData)(THIS_ WIN32_FIND_DATAW* pfd) PURE; \
919     STDMETHOD_(HRESULT,SetFindData)(THIS_ const WIN32_FIND_DATAW* pfd) PURE;
920
921 #endif  /* __IFileSystemBindData_INTERFACE_DEFINED__ */
922
923
924 #ifdef __cplusplus
925 } /* extern "C" */
926 #endif /* defined(__cplusplus) */
927
928 #endif /* __WINE_SHLOBJ_H */