xref: /reactos/sdk/include/psdk/shellapi.h (revision 8540ab04)
1 #ifndef _SHELLAPI_H
2 #define _SHELLAPI_H
3 
4 #ifdef __cplusplus
5 extern "C" {
6 #endif
7 #ifdef _MSC_VER
8 #pragma warning(push)
9 #pragma warning(disable:4201)
10 #endif
11 
12 #if !defined(_WIN64)
13 #include <pshpack1.h>
14 #endif
15 
16 #define WINSHELLAPI DECLSPEC_IMPORT
17 #define ABE_LEFT	0
18 #define ABE_TOP	1
19 #define ABE_RIGHT	2
20 #define ABE_BOTTOM	3
21 #define ABS_AUTOHIDE	1
22 #define ABS_ALWAYSONTOP	2
23 
24 #define SEE_MASK_DEFAULT	0x00000000
25 #define SEE_MASK_CLASSNAME	0x00000001
26 #define SEE_MASK_CLASSKEY	0x00000003
27 #define SEE_MASK_IDLIST	0x00000004
28 #define SEE_MASK_INVOKEIDLIST	0x0000000C
29 #define SEE_MASK_ICON	0x00000010
30 #define SEE_MASK_HOTKEY	0x00000020
31 #define SEE_MASK_NOCLOSEPROCESS	0x00000040
32 #define SEE_MASK_CONNECTNETDRV	0x00000080
33 #define SEE_MASK_NOASYNC	0x00000100
34 #define SEE_MASK_FLAG_DDEWAIT	SEE_MASK_NOASYNC
35 #define SEE_MASK_DOENVSUBST	0x00000200
36 #define SEE_MASK_FLAG_NO_UI	0x00000400
37 #define SEE_MASK_UNICODE	0x00004000
38 #define SEE_MASK_NO_CONSOLE	0x00008000
39 /*
40  * NOTE: The following three flags are undocumented and are not present in the
41  * official Windows SDK. However they are used in shobjidl.idl to define some
42  * CMIC_MASK_* flags, these ones being mentioned in the MSDN documentation of
43  * the CMINVOKECOMMANDINFOEX structure.
44  * I affect them this range of values which seems to be strangely empty. Of
45  * course their values may differ from the real ones, however I have no way
46  * of discovering them. If somebody else can verify them, it would be great.
47  */
48 #define SEE_MASK_HASLINKNAME	0x00010000
49 #define SEE_MASK_HASTITLE	0x00020000
50 #define SEE_MASK_FLAG_SEPVDM	0x00040000
51 /* END NOTE */
52 #define SEE_MASK_ASYNCOK	0x00100000
53 #define SEE_MASK_HMONITOR	0x00200000
54 #define SEE_MASK_NOZONECHECKS	0x00800000
55 #define SEE_MASK_NOQUERYCLASSSTORE	0x01000000
56 #define SEE_MASK_WAITFORINPUTIDLE	0x02000000
57 #define SEE_MASK_FLAG_LOG_USAGE	0x04000000
58 
59 #define ABM_NEW	0
60 #define ABM_REMOVE	1
61 #define ABM_QUERYPOS	2
62 #define ABM_SETPOS	3
63 #define ABM_GETSTATE	4
64 #define ABM_GETTASKBARPOS	5
65 #define ABM_ACTIVATE	6
66 #define ABM_GETAUTOHIDEBAR	7
67 #define ABM_SETAUTOHIDEBAR	8
68 #define ABM_WINDOWPOSCHANGED	9
69 #define ABN_STATECHANGE		0
70 #define ABN_POSCHANGED		1
71 #define ABN_FULLSCREENAPP	2
72 #define ABN_WINDOWARRANGE	3
73 
74 #if (_WIN32_IE >= 0x0500)
75 #define NIN_SELECT          (WM_USER + 0)
76 #define NINF_KEY            1
77 #define NIN_KEYSELECT       (NIN_SELECT | NINF_KEY)
78 #endif
79 
80 #if (_WIN32_IE >= 0x0501)
81 #define NIN_BALLOONSHOW         (WM_USER + 2)
82 #define NIN_BALLOONHIDE         (WM_USER + 3)
83 #define NIN_BALLOONTIMEOUT      (WM_USER + 4)
84 #define NIN_BALLOONUSERCLICK    (WM_USER + 5)
85 #endif
86 #if (NTDDI_VERSION >= NTDDI_VISTA)
87 #define NIN_POPUPOPEN           (WM_USER + 6)
88 #define NIN_POPUPCLOSE          (WM_USER + 7)
89 #endif
90 
91 #define NIM_ADD	0
92 #define NIM_MODIFY	1
93 #define NIM_DELETE	2
94 #if _WIN32_IE >= 0x0500
95 #define NIM_SETFOCUS	3
96 #define NIM_SETVERSION	4
97 #define NOTIFYICON_VERSION      3
98 #if (NTDDI_VERSION >= NTDDI_VISTA)
99 #define NOTIFYICON_VERSION_4    4
100 #endif
101 #endif
102 #define NIF_MESSAGE	1
103 #define NIF_ICON	2
104 #define NIF_TIP	4
105 #if _WIN32_IE >= 0x0500
106 #define NIF_STATE	8
107 #define NIF_INFO	16
108 #define NIS_HIDDEN	1
109 #define NIS_SHAREDICON	2
110 #define NIIF_NONE	0
111 #define NIIF_INFO	1
112 #define NIIF_WARNING	2
113 #define NIIF_ERROR	3
114 #define NIIF_USER	4
115 #if _WIN32_IE >= 0x0600
116 #define NIF_GUID	32
117 #define NIIF_ICON_MASK	0xf
118 #define NIIF_NOSOUND	0x10
119 #endif /* _WIN32_IE >= 0x0600 */
120 #endif /* _WIN32_IE >= 0x0500 */
121 
122 #define SE_ERR_FNF	2
123 #define SE_ERR_PNF	3
124 #define SE_ERR_ACCESSDENIED	5
125 #define SE_ERR_OOM	8
126 #define SE_ERR_DLLNOTFOUND	32
127 #define SE_ERR_SHARE	26
128 #define SE_ERR_ASSOCINCOMPLETE	27
129 #define SE_ERR_DDETIMEOUT	28
130 #define SE_ERR_DDEFAIL	29
131 #define SE_ERR_DDEBUSY	30
132 #define SE_ERR_NOASSOC	31
133 #define FO_MOVE	1
134 #define FO_COPY	2
135 #define FO_DELETE	3
136 #define FO_RENAME	4
137 
138 #define FOF_MULTIDESTFILES         0x0001
139 #define FOF_CONFIRMMOUSE           0x0002
140 #define FOF_SILENT                 0x0004
141 #define FOF_RENAMEONCOLLISION      0x0008
142 #define FOF_NOCONFIRMATION         0x0010
143 #define FOF_WANTMAPPINGHANDLE      0x0020
144 #define FOF_ALLOWUNDO              0x0040
145 #define FOF_FILESONLY              0x0080
146 #define FOF_SIMPLEPROGRESS         0x0100
147 #define FOF_NOCONFIRMMKDIR         0x0200
148 #define FOF_NOERRORUI              0x0400
149 #define FOF_NOCOPYSECURITYATTRIBS  0x0800
150 #define FOF_NORECURSION            0x1000  /* don't do recursion into directories */
151 #define FOF_NO_CONNECTED_ELEMENTS  0x2000  /* don't do connected files */
152 #define FOF_WANTNUKEWARNING        0x4000  /* during delete operation, warn if delete instead
153                                               of recycling (even if FOF_NOCONFIRMATION) */
154 #define FOF_NORECURSEREPARSE       0x8000  /* don't do recursion into reparse points */
155 
156 #define PO_DELETE 19
157 #define PO_RENAME 20
158 #define PO_PORTCHANGE 32
159 #define PO_REN_PORT 52
160 #define SHGFI_ADDOVERLAYS	32
161 #define SHGFI_OVERLAYINDEX	64
162 #define SHGFI_ICON	256
163 #define SHGFI_DISPLAYNAME	512
164 #define SHGFI_TYPENAME	1024
165 #define SHGFI_ATTRIBUTES	2048
166 #define SHGFI_ICONLOCATION	4096
167 #define SHGFI_EXETYPE 8192
168 #define SHGFI_SYSICONINDEX 16384
169 #define SHGFI_LINKOVERLAY 32768
170 #define SHGFI_SELECTED 65536
171 #define SHGFI_ATTR_SPECIFIED 131072
172 #define SHGFI_LARGEICON	0
173 #define SHGFI_SMALLICON	1
174 #define SHGFI_OPENICON	2
175 #define SHGFI_SHELLICONSIZE	4
176 #define SHGFI_PIDL	8
177 #define SHGFI_USEFILEATTRIBUTES	16
178 
179 #if (NTDDI_VERSION >= NTDDI_WINXP)
180 #define SHIL_LARGE        0x0
181 #define SHIL_SMALL        0x1
182 #define SHIL_EXTRALARGE   0x2
183 #define SHIL_SYSSMALL     0x3
184 #if (NTDDI_VERSION >= NTDDI_VISTA)
185 #define SHIL_JUMBO        0x4
186 #define SHIL_LAST         SHIL_JUMBO
187 #else
188 #define SHIL_LAST         SHIL_SYSSMALL
189 #endif
190 #endif
191 
192 typedef struct _SHCREATEPROCESSINFOW
193 {
194     DWORD cbSize;
195     ULONG fMask;
196     HWND hwnd;
197     LPCWSTR pszFile;
198     LPCWSTR pszParameters;
199     LPCWSTR pszCurrentDirectory;
200     IN HANDLE hUserToken;
201     IN LPSECURITY_ATTRIBUTES lpProcessAttributes;
202     IN LPSECURITY_ATTRIBUTES lpThreadAttributes;
203     IN BOOL bInheritHandles;
204     IN DWORD dwCreationFlags;
205     IN LPSTARTUPINFOW lpStartupInfo;
206     OUT LPPROCESS_INFORMATION lpProcessInformation;
207 } SHCREATEPROCESSINFOW, *PSHCREATEPROCESSINFOW;
208 
209 typedef WORD FILEOP_FLAGS;
210 typedef WORD PRINTEROP_FLAGS;
211 
212 typedef struct _AppBarData {
213 	DWORD	cbSize;
214 	HWND	hWnd;
215 	UINT	uCallbackMessage;
216 	UINT	uEdge;
217 	RECT	rc;
218 	LPARAM lParam;
219 } APPBARDATA,*PAPPBARDATA;
220 DECLARE_HANDLE(HDROP);
221 
222 typedef struct _NOTIFYICONDATAA {
223 	DWORD cbSize;
224 	HWND hWnd;
225 	UINT uID;
226 	UINT uFlags;
227 	UINT uCallbackMessage;
228 	HICON hIcon;
229 #if (NTDDI_VERSION < NTDDI_WIN2K)
230 	CHAR szTip[64];
231 #endif
232 #if (NTDDI_VERSION >= NTDDI_WIN2K)
233 	CHAR szTip[128];
234 	DWORD dwState;
235 	DWORD dwStateMask;
236 	CHAR szInfo[256];
237 	_ANONYMOUS_UNION union {
238 		UINT uTimeout;
239 		UINT uVersion;
240 	} DUMMYUNIONNAME;
241 	CHAR szInfoTitle[64];
242 	DWORD dwInfoFlags;
243 #endif
244 #if (NTDDI_VERSION >= NTDDI_WINXP)
245 	GUID guidItem;
246 #endif
247 #if (NTDDI_VERSION >= NTDDI_VISTA)
248 	HICON hBalloonIcon;
249 #endif
250 } NOTIFYICONDATAA,*PNOTIFYICONDATAA;
251 
252 typedef struct _NOTIFYICONDATAW {
253 	DWORD cbSize;
254 	HWND hWnd;
255 	UINT uID;
256 	UINT uFlags;
257 	UINT uCallbackMessage;
258 	HICON hIcon;
259 #if (NTDDI_VERSION < NTDDI_WIN2K)
260 	WCHAR szTip[64];
261 #endif
262 #if (NTDDI_VERSION >= NTDDI_WIN2K)
263 	WCHAR szTip[128];
264 	DWORD dwState;
265 	DWORD dwStateMask;
266 	WCHAR szInfo[256];
267 	_ANONYMOUS_UNION union {
268 		UINT uTimeout;
269 		UINT uVersion;
270 	} DUMMYUNIONNAME;
271 	WCHAR szInfoTitle[64];
272 	DWORD dwInfoFlags;
273 #endif
274 #if (NTDDI_VERSION >= NTDDI_WINXP)
275 	GUID guidItem;
276 #endif
277 #if (NTDDI_VERSION >= NTDDI_VISTA)
278 	HICON hBalloonIcon;
279 #endif
280 } NOTIFYICONDATAW,*PNOTIFYICONDATAW;
281 
282 #define NOTIFYICONDATAA_V1_SIZE FIELD_OFFSET(NOTIFYICONDATAA, szTip[64])
283 #define NOTIFYICONDATAW_V1_SIZE FIELD_OFFSET(NOTIFYICONDATAW, szTip[64])
284 #define NOTIFYICONDATAA_V2_SIZE FIELD_OFFSET(NOTIFYICONDATAA, guidItem)
285 #define NOTIFYICONDATAW_V2_SIZE FIELD_OFFSET(NOTIFYICONDATAW, guidItem)
286 #define NOTIFYICONDATAA_V3_SIZE FIELD_OFFSET(NOTIFYICONDATAA, hBalloonIcon)
287 #define NOTIFYICONDATAW_V3_SIZE FIELD_OFFSET(NOTIFYICONDATAW, hBalloonIcon)
288 
289 #if WINVER >= 0x400
290 typedef struct _DRAGINFOA {
291 	UINT uSize;
292 	POINT pt;
293 	BOOL fNC;
294 	LPSTR lpFileList;
295 	DWORD grfKeyState;
296 } DRAGINFOA,*LPDRAGINFOA;
297 typedef struct _DRAGINFOW {
298 	UINT uSize;
299 	POINT pt;
300 	BOOL fNC;
301 	LPWSTR lpFileList;
302 	DWORD grfKeyState;
303 } DRAGINFOW,*LPDRAGINFOW;
304 #endif
305 
306 typedef struct _SHELLEXECUTEINFOA {
307 	DWORD cbSize;
308 	ULONG fMask;
309 	HWND hwnd;
310 	LPCSTR lpVerb;
311 	LPCSTR lpFile;
312 	LPCSTR lpParameters;
313 	LPCSTR lpDirectory;
314 	int nShow;
315 	HINSTANCE hInstApp;
316 	PVOID lpIDList;
317 	LPCSTR lpClass;
318 	HKEY hkeyClass;
319 	DWORD dwHotKey;
320 	HANDLE hIcon;
321 	HANDLE hProcess;
322 } SHELLEXECUTEINFOA,*LPSHELLEXECUTEINFOA;
323 typedef struct _SHELLEXECUTEINFOW {
324 	DWORD cbSize;
325 	ULONG fMask;
326 	HWND hwnd;
327 	LPCWSTR lpVerb;
328 	LPCWSTR lpFile;
329 	LPCWSTR lpParameters;
330 	LPCWSTR lpDirectory;
331 	int nShow;
332 	HINSTANCE hInstApp;
333 	PVOID lpIDList;
334 	LPCWSTR lpClass;
335 	HKEY hkeyClass;
336 	DWORD dwHotKey;
337 	HANDLE hIcon;
338 	HANDLE hProcess;
339 } SHELLEXECUTEINFOW,*LPSHELLEXECUTEINFOW;
340 typedef struct _SHFILEOPSTRUCTA {
341 	HWND hwnd;
342 	UINT wFunc;
343 	LPCSTR pFrom;
344 	LPCSTR pTo;
345 	FILEOP_FLAGS fFlags;
346 	BOOL fAnyOperationsAborted;
347 	PVOID hNameMappings;
348 	LPCSTR lpszProgressTitle;
349 } SHFILEOPSTRUCTA,*LPSHFILEOPSTRUCTA;
350 typedef struct _SHFILEOPSTRUCTW {
351 	HWND hwnd;
352 	UINT wFunc;
353 	LPCWSTR pFrom;
354 	LPCWSTR pTo;
355 	FILEOP_FLAGS fFlags;
356 	BOOL fAnyOperationsAborted;
357 	PVOID hNameMappings;
358 	LPCWSTR lpszProgressTitle;
359 } SHFILEOPSTRUCTW,*LPSHFILEOPSTRUCTW;
360 typedef struct _SHFILEINFOA {
361 	HICON hIcon;
362 	int iIcon;
363 	DWORD dwAttributes;
364 	CHAR szDisplayName[MAX_PATH];
365 	CHAR szTypeName[80];
366 } SHFILEINFOA;
367 typedef struct _SHFILEINFOW {
368 	HICON hIcon;
369 	int iIcon;
370 	DWORD dwAttributes;
371 	WCHAR szDisplayName[MAX_PATH];
372 	WCHAR szTypeName[80];
373 } SHFILEINFOW;
374 typedef struct _SHQUERYRBINFO {
375 	DWORD   cbSize;
376 	__int64 i64Size;
377 	__int64 i64NumItems;
378 } SHQUERYRBINFO, *LPSHQUERYRBINFO;
379 typedef struct _SHNAMEMAPPINGA {
380 	LPSTR	pszOldPath;
381 	LPSTR	pszNewPath;
382 	int	cchOldPath;
383 	int	cchNewPath;
384 } SHNAMEMAPPINGA, *LPSHNAMEMAPPINGA;
385 typedef struct _SHNAMEMAPPINGW {
386 	LPWSTR	pszOldPath;
387 	LPWSTR	pszNewPath;
388 	int	cchOldPath;
389 	int	cchNewPath;
390 } SHNAMEMAPPINGW, *LPSHNAMEMAPPINGW;
391 
392 #define SHERB_NOCONFIRMATION 0x1
393 #define SHERB_NOPROGRESSUI   0x2
394 #define SHERB_NOSOUND        0x4
395 
396 /******************************************
397  * Links
398  */
399 
400 #define SHGNLI_PIDL        0x01
401 #define SHGNLI_PREFIXNAME  0x02
402 #define SHGNLI_NOUNIQUE    0x04
403 #define SHGNLI_NOLNK       0x08
404 
405 LPWSTR * WINAPI CommandLineToArgvW(_In_ LPCWSTR, _Out_ int*);
406 void WINAPI DragAcceptFiles(_In_ HWND, _In_ BOOL);
407 void WINAPI DragFinish(_In_ HDROP);
408 
409 _Success_(return != 0)
410 UINT
411 WINAPI
412 DragQueryFileA(
413   _In_ HDROP hDrop,
414   _In_ UINT iFile,
415   _Out_writes_opt_(cch) LPSTR lpszFile,
416   _In_ UINT cch);
417 
418 _Success_(return != 0)
419 UINT
420 WINAPI
421 DragQueryFileW(
422   _In_ HDROP hDrop,
423   _In_ UINT iFile,
424   _Out_writes_opt_(cch) LPWSTR lpszFile,
425   _In_ UINT cch);
426 
427 BOOL WINAPI DragQueryPoint(_In_ HDROP, _Out_ LPPOINT);
428 
429 HICON
430 WINAPI
431 ExtractAssociatedIconA(
432   _Reserved_ HINSTANCE hInst,
433   _Inout_updates_(128) LPSTR pszIconPath,
434   _Inout_ WORD *piIcon);
435 
436 HICON
437 WINAPI
438 ExtractAssociatedIconW(
439   _Reserved_ HINSTANCE hInst,
440   _Inout_updates_(128) LPWSTR pszIconPath,
441   _Inout_ WORD *piIcon);
442 
443 HICON
444 WINAPI
445 ExtractIconA(
446   _Reserved_ HINSTANCE hInst,
447   _In_ LPCSTR pszExeFileName,
448   UINT nIconIndex);
449 
450 HICON
451 WINAPI
452 ExtractIconW(
453   _Reserved_ HINSTANCE hInst,
454   _In_ LPCWSTR pszExeFileName,
455   UINT nIconIndex);
456 
457 UINT
458 WINAPI
459 ExtractIconExA(
460   _In_ LPCSTR lpszFile,
461   _In_ int nIconIndex,
462   _Out_writes_opt_(nIcons) HICON *phiconLarge,
463   _Out_writes_opt_(nIcons) HICON *phiconSmall,
464   _In_ UINT nIcons);
465 
466 UINT
467 WINAPI
468 ExtractIconExW(
469   _In_ LPCWSTR lpszFile,
470   _In_ int nIconIndex,
471   _Out_writes_opt_(nIcons) HICON *phiconLarge,
472   _Out_writes_opt_(nIcons) HICON *phiconSmall,
473   _In_ UINT nIcons);
474 
475 _Success_(return > 32)
476 HINSTANCE
477 WINAPI
478 FindExecutableA(
479   _In_ LPCSTR lpFile,
480   _In_opt_ LPCSTR lpDirectory,
481   _Out_writes_(MAX_PATH) LPSTR lpResult);
482 
483 _Success_(return > 32)
484 HINSTANCE
485 WINAPI
486 FindExecutableW(
487   _In_ LPCWSTR lpFile,
488   _In_opt_ LPCWSTR lpDirectory,
489   _Out_writes_(MAX_PATH) LPWSTR lpResult);
490 
491 UINT_PTR WINAPI SHAppBarMessage(_In_ DWORD, _Inout_ PAPPBARDATA);
492 BOOL WINAPI Shell_NotifyIconA(_In_ DWORD, _In_ PNOTIFYICONDATAA);
493 BOOL WINAPI Shell_NotifyIconW(_In_ DWORD, _In_ PNOTIFYICONDATAW);
494 
495 int
496 WINAPI
497 ShellAboutA(
498   _In_opt_ HWND hWnd,
499   _In_ LPCSTR szApp,
500   _In_opt_ LPCSTR szOtherStuff,
501   _In_opt_ HICON hIcon);
502 
503 int
504 WINAPI
505 ShellAboutW(
506   _In_opt_ HWND hWnd,
507   _In_ LPCWSTR szApp,
508   _In_opt_ LPCWSTR szOtherStuff,
509   _In_opt_ HICON hIcon);
510 
511 int
512 ShellMessageBoxA(
513   _In_opt_ HINSTANCE hAppInst,
514   _In_opt_ HWND hWnd,
515   _In_ LPCSTR lpcText,
516   _In_opt_ LPCSTR lpcTitle,
517   _In_ UINT fuStyle,
518   ...);
519 
520 int
521 ShellMessageBoxW(
522   _In_opt_ HINSTANCE hAppInst,
523   _In_opt_ HWND hWnd,
524   _In_ LPCWSTR lpcText,
525   _In_opt_ LPCWSTR lpcTitle,
526   _In_ UINT fuStyle,
527   ...);
528 
529 HINSTANCE
530 WINAPI
531 ShellExecuteA(
532   _In_opt_ HWND hwnd,
533   _In_opt_ LPCSTR lpOperation,
534   _In_ LPCSTR lpFile,
535   _In_opt_ LPCSTR lpParameters,
536   _In_opt_ LPCSTR lpDirectory,
537   _In_ INT nShowCmd);
538 
539 HINSTANCE
540 WINAPI
541 ShellExecuteW(
542   _In_opt_ HWND hwnd,
543   _In_opt_ LPCWSTR lpOperation,
544   _In_ LPCWSTR lpFile,
545   _In_opt_ LPCWSTR lpParameters,
546   _In_opt_ LPCWSTR lpDirectory,
547   _In_ INT nShowCmd);
548 
549 BOOL WINAPI ShellExecuteExA(_Inout_ LPSHELLEXECUTEINFOA);
550 BOOL WINAPI ShellExecuteExW(_Inout_ LPSHELLEXECUTEINFOW);
551 int WINAPI SHFileOperationA(_Inout_ LPSHFILEOPSTRUCTA);
552 int WINAPI SHFileOperationW(_Inout_ LPSHFILEOPSTRUCTW);
553 void WINAPI SHFreeNameMappings(_In_opt_ HANDLE);
554 
555 DWORD_PTR
556 WINAPI
557 SHGetFileInfoA(
558   _In_ LPCSTR pszPath,
559   DWORD dwFileAttributes,
560   _Inout_updates_bytes_opt_(cbFileInfo) SHFILEINFOA *psfi,
561   UINT cbFileInfo,
562   UINT uFlags);
563 
564 DWORD_PTR
565 WINAPI
566 SHGetFileInfoW(
567   _In_ LPCWSTR pszPath,
568   DWORD dwFileAttributes,
569   _Inout_updates_bytes_opt_(cbFileInfo) SHFILEINFOW *psfi,
570   UINT cbFileInfo,
571   UINT uFlags);
572 
573 _Success_(return != 0)
574 BOOL
575 WINAPI
576 SHGetNewLinkInfoA(
577   _In_ LPCSTR pszLinkTo,
578   _In_ LPCSTR pszDir,
579   _Out_writes_(MAX_PATH) LPSTR pszName,
580   _Out_ BOOL *pfMustCopy,
581   _In_ UINT uFlags);
582 
583 _Success_(return != 0)
584 BOOL
585 WINAPI
586 SHGetNewLinkInfoW(
587   _In_ LPCWSTR pszLinkTo,
588   _In_ LPCWSTR pszDir,
589   _Out_writes_(MAX_PATH) LPWSTR pszName,
590   _Out_ BOOL *pfMustCopy,
591   _In_ UINT uFlags);
592 
593 HRESULT
594 WINAPI
595 SHQueryRecycleBinA(
596   _In_opt_ LPCSTR pszRootPath,
597   _Inout_ LPSHQUERYRBINFO pSHQueryRBInfo);
598 
599 HRESULT
600 WINAPI
601 SHQueryRecycleBinW(
602   _In_opt_ LPCWSTR pszRootPath,
603   _Inout_ LPSHQUERYRBINFO pSHQueryRBInfo);
604 
605 HRESULT
606 WINAPI
607 SHEmptyRecycleBinA(
608   _In_opt_ HWND hwnd,
609   _In_opt_ LPCSTR pszRootPath,
610   DWORD dwFlags);
611 
612 HRESULT
613 WINAPI
614 SHEmptyRecycleBinW(
615   _In_opt_ HWND hwnd,
616   _In_opt_ LPCWSTR pszRootPath,
617   DWORD dwFlags);
618 
619 BOOL WINAPI SHCreateProcessAsUserW(_Inout_ PSHCREATEPROCESSINFOW);
620 
621 DWORD
622 WINAPI
623 DoEnvironmentSubstA(
624     _Inout_updates_(cchSrc) LPSTR pszSrc,
625     UINT cchSrc);
626 
627 DWORD
628 WINAPI
629 DoEnvironmentSubstW(
630     _Inout_updates_(cchSrc) LPWSTR pszSrc,
631     UINT cchSrc);
632 
633 #ifdef UNICODE
634 #define NOTIFYICONDATA_V1_SIZE NOTIFYICONDATAW_V1_SIZE
635 #define NOTIFYICONDATA_V2_SIZE NOTIFYICONDATAW_V2_SIZE
636 #define NOTIFYICONDATA_V3_SIZE NOTIFYICONDATAW_V3_SIZE
637 typedef NOTIFYICONDATAW NOTIFYICONDATA,*PNOTIFYICONDATA;
638 typedef DRAGINFOW DRAGINFO,*LPDRAGINFO;
639 typedef SHELLEXECUTEINFOW SHELLEXECUTEINFO,*LPSHELLEXECUTEINFO;
640 typedef SHFILEOPSTRUCTW SHFILEOPSTRUCT,*LPSHFILEOPSTRUCT;
641 typedef SHFILEINFOW SHFILEINFO;
642 typedef SHNAMEMAPPINGW SHNAMEMAPPING;
643 typedef LPSHNAMEMAPPINGW LPSHNAMEMAPPING;
644 #define DragQueryFile DragQueryFileW
645 #define ExtractAssociatedIcon ExtractAssociatedIconW
646 #define ExtractIcon ExtractIconW
647 #define ExtractIconEx ExtractIconExW
648 #define FindExecutable FindExecutableW
649 #define Shell_NotifyIcon Shell_NotifyIconW
650 #define ShellAbout ShellAboutW
651 #define ShellExecute ShellExecuteW
652 #define ShellExecuteEx ShellExecuteExW
653 #define ShellMessageBox ShellMessageBoxW
654 #define SHFileOperation SHFileOperationW
655 #define SHGetFileInfo SHGetFileInfoW
656 #define SHQueryRecycleBin SHQueryRecycleBinW
657 #define SHEmptyRecycleBin SHEmptyRecycleBinW
658 #define SHGetNewLinkInfo SHGetNewLinkInfoW
659 #define DoEnvironmentSubst DoEnvironmentSubstW
660 
661 #else
662 #define NOTIFYICONDATA_V1_SIZE NOTIFYICONDATAA_V1_SIZE
663 #define NOTIFYICONDATA_V2_SIZE NOTIFYICONDATAA_V2_SIZE
664 #define NOTIFYICONDATA_V3_SIZE NOTIFYICONDATAA_V3_SIZE
665 typedef NOTIFYICONDATAA NOTIFYICONDATA,*PNOTIFYICONDATA;
666 typedef DRAGINFOA DRAGINFO,*LPDRAGINFO;
667 typedef SHELLEXECUTEINFOA SHELLEXECUTEINFO,*LPSHELLEXECUTEINFO;
668 typedef SHFILEOPSTRUCTA SHFILEOPSTRUCT,*LPSHFILEOPSTRUCT;
669 typedef SHFILEINFOA SHFILEINFO;
670 typedef SHNAMEMAPPINGA SHNAMEMAPPING;
671 typedef LPSHNAMEMAPPINGA LPSHNAMEMAPPING;
672 #define DragQueryFile DragQueryFileA
673 #define ExtractAssociatedIcon ExtractAssociatedIconA
674 #define ExtractIcon ExtractIconA
675 #define ExtractIconEx ExtractIconExA
676 #define FindExecutable FindExecutableA
677 #define Shell_NotifyIcon Shell_NotifyIconA
678 #define ShellAbout ShellAboutA
679 #define ShellExecute ShellExecuteA
680 #define ShellExecuteEx ShellExecuteExA
681 #define ShellMessageBox ShellMessageBoxA
682 #define SHFileOperation SHFileOperationA
683 #define SHGetFileInfo SHGetFileInfoA
684 #define SHQueryRecycleBin SHQueryRecycleBinA
685 #define SHEmptyRecycleBin SHEmptyRecycleBinA
686 #define SHGetNewLinkInfo SHGetNewLinkInfoA
687 #define DoEnvironmentSubst DoEnvironmentSubstA
688 #endif
689 
690 #if (NTDDI_VERSION >= NTDDI_VISTA)
691 
692 typedef struct _SHSTOCKICONINFO {
693   DWORD cbSize;
694   HICON hIcon;
695   int iSysImageIndex;
696   int iIcon;
697   WCHAR szPath[MAX_PATH];
698 } SHSTOCKICONINFO;
699 
700 #define SHGSI_ICONLOCATION 0
701 
702 typedef enum SHSTOCKICONID
703 {
704   SIID_INVALID=-1,
705   SIID_DOCNOASSOC,
706   SIID_DOCASSOC,
707   SIID_APPLICATION,
708   SIID_FOLDER,
709   SIID_FOLDEROPEN,
710   SIID_DRIVE525,
711   SIID_DRIVE35,
712   SIID_DRIVERREMOVE,
713   SIID_DRIVERFIXED,
714   SIID_DRIVERNET,
715   SIID_DRIVERNETDISABLE,
716   SIID_DRIVERCD,
717   SIID_DRIVERRAM,
718   SIID_WORLD,
719   /* Missing: 14 */
720   SIID_SERVER = 15,
721   SIID_PRINTER,
722   SIID_MYNETWORK,
723   /* Missing: 18 - 21 */
724   SIID_FIND = 22,
725   SIID_HELP,
726   /* Missing: 24 - 27 */
727   SIID_SHARE = 28,
728   SIID_LINK,
729   SIID_SLOWFILE,
730   SIID_RECYCLER,
731   SIID_RECYCLERFULL,
732   /* Missing: 33 - 39 */
733   SIID_MEDIACDAUDIO = 40,
734   /* Missing: 41 - 46 */
735   SIID_LOCK = 47,
736   /* Missing: 48 */
737   SIID_AUTOLIST = 49,
738   SIID_PRINTERNET,
739   SIID_SERVERSHARE,
740   SIID_PRINTERFAX,
741   SIID_PRINTERFAXNET,
742   SIID_PRINTERFILE,
743   SIID_STACK,
744   SIID_MEDIASVCD,
745   SIID_STUFFEDFOLDER,
746   SIID_DRIVEUNKNOWN,
747   SIID_DRIVEDVD,
748   SIID_MEDIADVD,
749   SIID_MEDIADVDRAM,
750   SIID_MEDIADVDRW,
751   SIID_MEDIADVDR,
752   SIID_MEDIADVDROM,
753   SIID_MEDIACDAUDIOPLUS,
754   SIID_MEDIACDRW,
755   SIID_MEDIACDR,
756   SIID_MEDIACDBURN,
757   SIID_MEDIABLANKCD,
758   SIID_MEDIACDROM,
759   SIID_AUDIOFILES,
760   SIID_IMAGEFILES,
761   SIID_VIDEOFILES,
762   SIID_MIXEDFILES,
763   SIID_FOLDERBACK,
764   SIID_FOLDERFRONT,
765   SIID_SHIELD,
766   SIID_WARNING,
767   SIID_INFO,
768   SIID_ERROR,
769   SIID_KEY,
770   SIID_SOFTWARE,
771   SIID_RENAME,
772   SIID_DELETE,
773   SIID_MEDIAAUDIODVD,
774   SIID_MEDIAMOVIEDVD,
775   SIID_MEDIAENHANCEDCD,
776   SIID_MEDIAENHANCEDDVD,
777   SIID_MEDIAHDDVD,
778   SIID_MEDIABLUERAY,
779   SIID_MEDIAVCD,
780   SIID_MEDIADVDPLUSR,
781   SIID_MEDIADVDPLUSRW,
782   SIID_DESKTOPPC,
783   SIID_MOBILEPC,
784   SIID_USERS,
785   SIID_MEDIASMARTMEDIA,
786   SIID_MEDIACOMPACTFLASH,
787   SIID_DEVICECELLPHONE,
788   SIID_DEVICECAMERA,
789   SIID_DEVICEVIDEOCAMERA,
790   SIID_DEVICEAUDIOPLAYER,
791   SIID_NETWORKCONNECT,
792   SIID_INTERNET,
793   SIID_ZIPFILE,
794   SIID_SETTINGS,
795   /* Missing: 107 - 131 */
796   SIID_DRIVEHDDVD = 132,
797   SIID_DRIVEBD,
798   SIID_MEDIAHDDVDROM,
799   SIID_MEDIAHDDVDR,
800   SIID_MEDIAHDDVDRAM,
801   SIID_MEDIABDROM,
802   SIID_MEDIABDR,
803   SIID_MEDIABDRE,
804   SIID_CLUSTEREDDRIVE,
805   /* Missing: 141 - 174 */
806   SIID_MAX_ICONS = 175
807 } SHSTOCKICONID;
808 
809 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
810 
811 #if !defined(_WIN64)
812 #include <poppack.h>
813 #endif
814 
815 #ifdef _MSC_VER
816 #pragma warning(pop)
817 #endif
818 #ifdef __cplusplus
819 }
820 #endif
821 #endif
822