1 // Licensed under the Apache License, Version 2.0
2 // <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
3 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
4 // All files in the project carrying such notice may not be copied, modified, or distributed
5 // except according to those terms.
6 use ctypes::{c_int, c_void};
7 use shared::guiddef::{REFGUID, REFIID};
8 use shared::minwindef::{BOOL, DWORD, UINT, ULONG, WORD};
9 use shared::windef::{COLORREF, HICON, HWND, RECT};
10 use um::commctrl::HIMAGELIST;
11 use um::minwinbase::{WIN32_FIND_DATAA, WIN32_FIND_DATAW};
12 use um::objidl::IBindCtx;
13 use um::propkeydef::REFPROPERTYKEY;
14 use um::propsys::GETPROPERTYSTOREFLAGS;
15 use um::shtypes::{PCIDLIST_ABSOLUTE, PIDLIST_ABSOLUTE};
16 use um::unknwnbase::{IUnknown, IUnknownVtbl};
17 use um::winnt::{HRESULT, LPCSTR, LPCWSTR, LPSTR, LPWSTR, PCWSTR, ULONGLONG, WCHAR};
18 DEFINE_GUID!{CLSID_DesktopWallpaper,
19     0xc2cf3110, 0x460e, 0x4fc1, 0xb9, 0xd0, 0x8a, 0x1c, 0x0c, 0x9c, 0xc4, 0xbd}
20 DEFINE_GUID!{CLSID_TaskbarList,
21     0x56fdf344, 0xfd6d, 0x11d0, 0x95, 0x8a, 0x00, 0x60, 0x97, 0xc9, 0xa0, 0x90}
22 DEFINE_GUID!{CLSID_FileOpenDialog,
23     0xdc1c5a9c, 0xe88a, 0x4dde, 0xa5, 0xa1, 0x60, 0xf8, 0x2a, 0x20, 0xae, 0xf7}
24 DEFINE_GUID!{CLSID_FileSaveDialog,
25     0xc0b4e2f3, 0xba21, 0x4773, 0x8d, 0xba, 0x33, 0x5e, 0xc9, 0x46, 0xeb, 0x8b}
26 //4498
27 ENUM!{enum SHCONTF {
28     SHCONTF_CHECKING_FOR_CHILDREN = 0x10,
29     SHCONTF_FOLDERS = 0x20,
30     SHCONTF_NONFOLDERS = 0x40,
31     SHCONTF_INCLUDEHIDDEN = 0x80,
32     SHCONTF_INIT_ON_FIRST_NEXT = 0x100,
33     SHCONTF_NETPRINTERSRCH = 0x200,
34     SHCONTF_SHAREABLE = 0x400,
35     SHCONTF_STORAGE = 0x800,
36     SHCONTF_NAVIGATION_ENUM = 0x1000,
37     SHCONTF_FASTITEMS = 0x2000,
38     SHCONTF_FLATLIST = 0x4000,
39     SHCONTF_ENABLE_ASYNC = 0x8000,
40     SHCONTF_INCLUDESUPERHIDDEN = 0x10000,
41 }}
42 pub type SFGAOF = ULONG;
43 //9466
44 ENUM!{enum SIGDN {
45     SIGDN_NORMALDISPLAY = 0,
46     SIGDN_PARENTRELATIVEPARSING = 0x80018001,
47     SIGDN_DESKTOPABSOLUTEPARSING = 0x80028000,
48     SIGDN_PARENTRELATIVEEDITING = 0x80031001,
49     SIGDN_DESKTOPABSOLUTEEDITING = 0x8004c000,
50     SIGDN_FILESYSPATH = 0x80058000,
51     SIGDN_URL = 0x80068000,
52     SIGDN_PARENTRELATIVEFORADDRESSBAR = 0x8007c001,
53     SIGDN_PARENTRELATIVE = 0x80080001,
54     SIGDN_PARENTRELATIVEFORUI = 0x80094001,
55 }}
56 ENUM!{enum SICHINTF {
57     SICHINT_DISPLAY = 0,
58     SICHINT_ALLFIELDS = 0x80000000,
59     SICHINT_CANONICAL = 0x10000000,
60     SICHINT_TEST_FILESYSPATH_IF_NOT_EQUAL = 0x20000000,
61 }}
62 RIDL!{#[uuid(0x43826d1e, 0xe718, 0x42ee, 0xbc, 0x55, 0xa1, 0xe2, 0x61, 0xc3, 0x7b, 0xfe)]
63 interface IShellItem(IShellItemVtbl): IUnknown(IUnknownVtbl) {
64     fn BindToHandler(
65         pbc: *mut IBindCtx,
66         bhid: REFGUID,
67         riid: REFIID,
68         ppv: *mut *mut c_void,
69     ) -> HRESULT,
70     fn GetParent(
71         ppsi: *mut *mut IShellItem,
72     ) -> HRESULT,
73     fn GetDisplayName(
74         sigdnName: SIGDN,
75         ppszName: *mut LPWSTR,
76     ) -> HRESULT,
77     fn GetAttributes(
78         sfgaoMask: SFGAOF,
79         psfgaoAttribs: *mut SFGAOF,
80     ) -> HRESULT,
81     fn Compare(
82         psi: *mut IShellItem,
83         hint: SICHINTF,
84         piOrder: *mut c_int,
85     ) -> HRESULT,
86 }}
87 ENUM!{enum SIATTRIBFLAGS {
88     SIATTRIBFLAGS_AND = 0x1,
89     SIATTRIBFLAGS_OR = 0x2,
90     SIATTRIBFLAGS_APPCOMPAT = 0x3,
91     SIATTRIBFLAGS_MASK = 0x3,
92     SIATTRIBFLAGS_ALLITEMS = 0x4000,
93 }}
94 RIDL!{#[uuid(0xb63ea76d, 0x1f85, 0x456f, 0xa1, 0x9c, 0x48, 0x15, 0x9e, 0xfa, 0x85, 0x8b)]
95 interface IShellItemArray(IShellItemArrayVtbl): IUnknown(IUnknownVtbl) {
96     fn BindToHandler(
97         pbc: *mut IBindCtx,
98         bhid: REFGUID,
99         riid: REFIID,
100         ppvOut: *mut *mut c_void,
101     ) -> HRESULT,
102     fn GetPropertyStore(
103         flags: GETPROPERTYSTOREFLAGS,
104         riid: REFIID,
105         ppv: *mut *mut c_void,
106     ) -> HRESULT,
107     fn GetPropertyDescriptionList(
108         keyType: REFPROPERTYKEY,
109         riid: REFIID,
110         ppv: *mut *mut c_void,
111     ) -> HRESULT,
112     fn GetAttributes(
113         AttribFlags: SIATTRIBFLAGS,
114         sfgaoMask: SFGAOF,
115         psfgaoAttribs: *mut SFGAOF,
116     ) -> HRESULT,
117     fn GetCount(
118         pdwNumItems: *mut DWORD,
119     ) -> HRESULT,
120     fn GetItemAt(
121         dwIndex: DWORD,
122         ppsi: *mut *mut IShellItem,
123     ) -> HRESULT,
124     // TODO: Add IEnumShellItems
125     //fn EnumItems(
126     //    ppenumShellItems: *mut *mut IEnumShellItems,
127     //) -> HRESULT,
128 }}
129 //20869
130 RIDL!{#[uuid(0xb4db1657, 0x70d7, 0x485e, 0x8e, 0x3e, 0x6f, 0xcb, 0x5a, 0x5c, 0x18, 0x02)]
131 interface IModalWindow(IModalWindowVtbl): IUnknown(IUnknownVtbl) {
132     fn Show(
133         hwndOwner: HWND,
134     ) -> HRESULT,
135 }}
136 //22307
137 //27457
138 RIDL!{#[uuid(0x2659b475, 0xeeb8, 0x48b7, 0x8f, 0x07, 0xb3, 0x78, 0x81, 0x0f, 0x48, 0xcf)]
139 interface IShellItemFilter(IShellItemFilterVtbl): IUnknown(IUnknownVtbl) {
140     fn IncludeItem(
141         psi: *mut IShellItem,
142     ) -> HRESULT,
143     fn GetEnumFlagsForItem(
144         psi: *mut IShellItem,
145         pgrfFlags: *mut SHCONTF,
146     ) -> HRESULT,
147 }}
148 RIDL!{#[uuid(0x56fdf342, 0xfd6d, 0x11d0, 0x95, 0x8a, 0x00, 0x60, 0x97, 0xc9, 0xa0, 0x90)]
149 interface ITaskbarList(ITaskbarListVtbl): IUnknown(IUnknownVtbl) {
150     fn HrInit() -> HRESULT,
151     fn AddTab(
152         hwnd: HWND,
153     ) -> HRESULT,
154     fn DeleteTab(
155         hwnd: HWND,
156     ) -> HRESULT,
157     fn ActivateTab(
158         hwnd: HWND,
159     ) -> HRESULT,
160     fn SetActiveAlt(
161         hwnd: HWND,
162     ) -> HRESULT,
163 }}
164 RIDL!{#[uuid(0x602d4995, 0xb13a, 0x429b, 0xa6, 0x6e, 0x19, 0x35, 0xe4, 0x4f, 0x43, 0x17)]
165 interface ITaskbarList2(ITaskbarList2Vtbl): ITaskbarList(ITaskbarListVtbl) {
166     fn MarkFullscreenWindow(
167         hwnd: HWND,
168         fFullscreen: BOOL,
169     ) -> HRESULT,
170 }}
171 ENUM!{enum THUMBBUTTONFLAGS {
172     THBF_ENABLED = 0,
173     THBF_DISABLED = 0x1,
174     THBF_DISMISSONCLICK = 0x2,
175     THBF_NOBACKGROUND = 0x4,
176     THBF_HIDDEN = 0x8,
177     THBF_NONINTERACTIVE = 0x10,
178 }}
179 ENUM!{enum THUMBBUTTONMASK {
180     THB_BITMAP = 0x1,
181     THB_ICON = 0x2,
182     THB_TOOLTIP = 0x4,
183     THB_FLAGS = 0x8,
184 }}
185 STRUCT!{struct THUMBBUTTON {
186     dwMask: THUMBBUTTONMASK,
187     iId: UINT,
188     iBitmap: UINT,
189     hIcon: HICON,
190     szTip: [WCHAR; 260],
191     dwFlags: THUMBBUTTONFLAGS,
192 }}
193 pub type LPTHUMBBUTTON = *mut THUMBBUTTON;
194 pub const THBN_CLICKED: WORD = 0x1800;
195 ENUM!{enum TBPFLAG {
196     TBPF_NOPROGRESS = 0,
197     TBPF_INDETERMINATE = 0x1,
198     TBPF_NORMAL = 0x2,
199     TBPF_ERROR = 0x4,
200     TBPF_PAUSED = 0x8,
201 }}
202 RIDL!{#[uuid(0xea1afb91, 0x9e28, 0x4b86, 0x90, 0xe9, 0x9e, 0x9f, 0x8a, 0x5e, 0xef, 0xaf)]
203 interface ITaskbarList3(ITaskbarList3Vtbl): ITaskbarList2(ITaskbarList2Vtbl) {
204     fn SetProgressValue(
205         hwnd: HWND,
206         ullCompleted: ULONGLONG,
207         ullTotal: ULONGLONG,
208     ) -> HRESULT,
209     fn SetProgressState(
210         hwnd: HWND,
211         tbpFlags: TBPFLAG,
212     ) -> HRESULT,
213     fn RegisterTab(
214         hwndTab: HWND,
215         hwndMDI: HWND,
216     ) -> HRESULT,
217     fn UnregisterTab(
218         hwndTab: HWND,
219     ) -> HRESULT,
220     fn SetTabOrder(
221         hwndTab: HWND,
222         hwndInsertBefore: HWND,
223     ) -> HRESULT,
224     fn SetTabActive(
225         hwndTab: HWND,
226         hwndMDI: HWND,
227         dwReserved: DWORD,
228     ) -> HRESULT,
229     fn ThumbBarAddButtons(
230         hwnd: HWND,
231         cButtons: UINT,
232         pButton: LPTHUMBBUTTON,
233     ) -> HRESULT,
234     fn ThumbBarUpdateButtons(
235         hwnd: HWND,
236         cButtons: UINT,
237         pButton: LPTHUMBBUTTON,
238     ) -> HRESULT,
239     fn ThumbBarSetImageList(
240         hwnd: HWND,
241         himl: HIMAGELIST,
242     ) -> HRESULT,
243     fn SetOverlayIcon(
244         hwnd: HWND,
245         hIcon: HICON,
246         pszDescription: LPCWSTR,
247     ) -> HRESULT,
248     fn SetThumbnailTooltip(
249         hwnd: HWND,
250         pszTip: LPCWSTR,
251     ) -> HRESULT,
252     fn SetThumbnailClip(
253         hwnd: HWND,
254         prcClip: *mut RECT,
255     ) -> HRESULT,
256 }}
257 ENUM!{enum STPFLAG {
258     STPF_NONE = 0,
259     STPF_USEAPPTHUMBNAILALWAYS = 0x1,
260     STPF_USEAPPTHUMBNAILWHENACTIVE = 0x2,
261     STPF_USEAPPPEEKALWAYS = 0x4,
262     STPF_USEAPPPEEKWHENACTIVE = 0x8,
263 }}
264 RIDL!{#[uuid(0xc43dc798, 0x95d1, 0x4bea, 0x90, 0x30, 0xbb, 0x99, 0xe2, 0x98, 0x3a, 0x1a)]
265 interface ITaskbarList4(ITaskbarList4Vtbl): ITaskbarList3(ITaskbarList3Vtbl) {
266     fn SetTabProperties(
267         hwndTab: HWND,
268         stpFlags: STPFLAG,
269     ) -> HRESULT,
270 }}
271 ENUM!{enum DESKTOP_SLIDESHOW_OPTIONS {
272     DSO_SHUFFLEIMAGES = 0x1,
273 }}
274 ENUM!{enum DESKTOP_SLIDESHOW_STATE {
275     DSS_ENABLED = 0x1,
276     DSS_SLIDESHOW = 0x2,
277     DSS_DISABLED_BY_REMOTE_SESSION = 0x4,
278 }}
279 ENUM!{enum DESKTOP_SLIDESHOW_DIRECTION {
280     DSD_FORWARD = 0,
281     DSD_BACKWARD = 1,
282 }}
283 ENUM!{enum DESKTOP_WALLPAPER_POSITION {
284     DWPOS_CENTER = 0,
285     DWPOS_TILE = 1,
286     DWPOS_STRETCH = 2,
287     DWPOS_FIT = 3,
288     DWPOS_FILL = 4,
289     DWPOS_SPAN = 5,
290 }}
291 RIDL!{#[uuid(0xb92b56a9, 0x8b55, 0x4e14, 0x9a, 0x89, 0x01, 0x99, 0xbb, 0xb6, 0xf9, 0x3b)]
292 interface IDesktopWallpaper(IDesktopWallpaperVtbl): IUnknown(IUnknownVtbl) {
293     fn SetWallpaper(
294         monitorID: LPCWSTR,
295         wallpaper: LPCWSTR,
296     ) -> HRESULT,
297     fn GetWallpaper(
298         monitorID: LPCWSTR,
299         wallpaper: *mut LPWSTR,
300     ) -> HRESULT,
301     fn GetMonitorDevicePathAt(
302         monitorIndex: UINT,
303         monitorID: *mut LPWSTR,
304     ) -> HRESULT,
305     fn GetMonitorDevicePathCount(
306         count: *mut UINT,
307     ) -> HRESULT,
308     fn GetMonitorRECT(
309         monitorID: LPCWSTR,
310         displayRect: *mut RECT,
311     ) -> HRESULT,
312     fn SetBackgroundColor(
313         color: COLORREF,
314     ) -> HRESULT,
315     fn GetBackgroundColor(
316         color: *mut COLORREF,
317     ) -> HRESULT,
318     fn SetPosition(
319         position: DESKTOP_WALLPAPER_POSITION,
320     ) -> HRESULT,
321     fn GetPosition(
322         position: *mut DESKTOP_WALLPAPER_POSITION,
323     ) -> HRESULT,
324     fn SetSlideshow(
325         items: *mut IShellItemArray,
326     ) -> HRESULT,
327     fn GetSlideshow(
328         items: *mut *mut IShellItemArray,
329     ) -> HRESULT,
330     fn SetSlideshowOptions(
331         options: DESKTOP_SLIDESHOW_OPTIONS,
332         slideshowTick: UINT,
333     ) -> HRESULT,
334     fn GetSlideshowOptions(
335         options: *mut DESKTOP_SLIDESHOW_OPTIONS,
336         slideshowTick: *mut UINT,
337     ) -> HRESULT,
338     fn AdvanceSlideshow(
339         monitorID: LPCWSTR,
340         direction: DESKTOP_SLIDESHOW_DIRECTION,
341     ) -> HRESULT,
342     fn GetStatus(
343         state: *mut DESKTOP_SLIDESHOW_STATE,
344     ) -> HRESULT,
345     fn Enable(
346         enable: BOOL,
347     ) -> HRESULT,
348 }}
349 RIDL!{#[uuid(0x000214ee, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
350 interface IShellLinkA(IShellLinkAVtbl): IUnknown(IUnknownVtbl) {
351     fn GetPath(
352         pszFile: LPSTR,
353         cch: c_int,
354         pfd: *mut WIN32_FIND_DATAA,
355         fFlags: DWORD,
356     ) -> HRESULT,
357     fn GetIDList(
358         ppidl: *mut PIDLIST_ABSOLUTE,
359     ) -> HRESULT,
360     fn SetIDList(
361         pidl: PCIDLIST_ABSOLUTE,
362     ) -> HRESULT,
363     fn GetDescription(
364         pszName: LPSTR,
365         cch: c_int,
366     ) -> HRESULT,
367     fn SetDescription(
368         pszName: LPCSTR,
369     ) -> HRESULT,
370     fn GetWorkingDirectory(
371         pszDir: LPSTR,
372         cch: c_int,
373     ) -> HRESULT,
374     fn SetWorkingDirectory(
375         pszDir: LPCSTR,
376     ) -> HRESULT,
377     fn GetArguments(
378         pszArgs: LPSTR,
379         cch: c_int,
380     ) -> HRESULT,
381     fn SetArguments(
382         pszArgs: LPCSTR,
383     ) -> HRESULT,
384     fn GetHotkey(
385         pwHotkey: *mut WORD,
386     ) -> HRESULT,
387     fn SetHotkey(
388         wHotkey: WORD,
389     ) -> HRESULT,
390     fn GetShowCmd(
391         piShowCmd: *mut c_int,
392     ) -> HRESULT,
393     fn SetShowCmd(
394         iShowCmd: c_int,
395     ) -> HRESULT,
396     fn GetIconLocation(
397         pszIconPath: LPSTR,
398         cch: c_int,
399         piIcon: *mut c_int,
400     ) -> HRESULT,
401     fn SetIconLocation(
402         pszIconPath: LPCSTR,
403         iIcon: c_int,
404     ) -> HRESULT,
405     fn SetRelativePath(
406         pszPathRel: LPCSTR,
407         dwReserved: DWORD,
408     ) -> HRESULT,
409     fn Resolve(
410         hwnd: HWND,
411         fFlags: DWORD,
412     ) -> HRESULT,
413     fn SetPath(
414         pszFile: LPCSTR,
415     ) -> HRESULT,
416 }}
417 RIDL!{#[uuid(0x000214f9, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
418 interface IShellLinkW(IShellLinkWVtbl): IUnknown(IUnknownVtbl) {
419     fn GetPath(
420         pszFile: LPWSTR,
421         cch: c_int,
422         pfd: *mut WIN32_FIND_DATAW,
423         fFlags: DWORD,
424     ) -> HRESULT,
425     fn GetIDList(
426         ppidl: *mut PIDLIST_ABSOLUTE,
427     ) -> HRESULT,
428     fn SetIDList(
429         pidl: PCIDLIST_ABSOLUTE,
430     ) -> HRESULT,
431     fn GetDescription(
432         pszName: LPWSTR,
433         cch: c_int,
434     ) -> HRESULT,
435     fn SetDescription(
436         pszName: LPCWSTR,
437     ) -> HRESULT,
438     fn GetWorkingDirectory(
439         pszDir: LPWSTR,
440         cch: c_int,
441     ) -> HRESULT,
442     fn SetWorkingDirectory(
443         pszDir: LPCWSTR,
444     ) -> HRESULT,
445     fn GetArguments(
446         pszArgs: LPWSTR,
447         cch: c_int,
448     ) -> HRESULT,
449     fn SetArguments(
450         pszArgs: LPCWSTR,
451     ) -> HRESULT,
452     fn GetHotkey(
453         pwHotkey: *mut WORD,
454     ) -> HRESULT,
455     fn SetHotkey(
456         wHotkey: WORD,
457     ) -> HRESULT,
458     fn GetShowCmd(
459         piShowCmd: *mut c_int,
460     ) -> HRESULT,
461     fn SetShowCmd(
462         iShowCmd: c_int,
463     ) -> HRESULT,
464     fn GetIconLocation(
465         pszIconPath: LPWSTR,
466         cch: c_int,
467         piIcon: *mut c_int,
468     ) -> HRESULT,
469     fn SetIconLocation(
470         pszIconPath: LPCWSTR,
471         iIcon: c_int,
472     ) -> HRESULT,
473     fn SetRelativePath(
474         pszPathRel: LPCWSTR,
475         dwReserved: DWORD,
476     ) -> HRESULT,
477     fn Resolve(
478         hwnd: HWND,
479         fFlags: DWORD,
480     ) -> HRESULT,
481     fn SetPath(
482         pszFile: LPCWSTR,
483     ) -> HRESULT,
484 }}
485 RIDL!{#[uuid(0xc2cf3110, 0x460e, 0x4fc1, 0xb9, 0xd0, 0x8a, 0x1c, 0x0c, 0x9c, 0xc4, 0xbd)]
486 class DesktopWallpaper;}
487 RIDL!{#[uuid(0x00021400, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
488 class ShellDesktop;}
489 RIDL!{#[uuid(0xf3364ba0, 0x65b9, 0x11ce, 0xa9, 0xba, 0x00, 0xaa, 0x00, 0x4a, 0xe8, 0x37)]
490 class ShellFSFolder;}
491 RIDL!{#[uuid(0x208d2c60, 0x3aea, 0x1069, 0xa2, 0xd7, 0x08, 0x00, 0x2b, 0x30, 0x30, 0x9d)]
492 class NetworkPlaces;}
493 RIDL!{#[uuid(0x00021401, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
494 class ShellLink;}
495 RIDL!{#[uuid(0x94357b53, 0xca29, 0x4b78, 0x83, 0xae, 0xe8, 0xfe, 0x74, 0x09, 0x13, 0x4f)]
496 class DriveSizeCategorizer;}
497 RIDL!{#[uuid(0xb0a8f3cf, 0x4333, 0x4bab, 0x88, 0x73, 0x1c, 0xcb, 0x1c, 0xad, 0xa4, 0x8b)]
498 class DriveTypeCategorizer;}
499 RIDL!{#[uuid(0xb5607793, 0x24ac, 0x44c7, 0x82, 0xe2, 0x83, 0x17, 0x26, 0xaa, 0x6c, 0xb7)]
500 class FreeSpaceCategorizer;}
501 RIDL!{#[uuid(0x55d7b852, 0xf6d1, 0x42f2, 0xaa, 0x75, 0x87, 0x28, 0xa1, 0xb2, 0xd2, 0x64)]
502 class SizeCategorizer;}
503 RIDL!{#[uuid(0xd912f8cf, 0x0396, 0x4915, 0x88, 0x4e, 0xfb, 0x42, 0x5d, 0x32, 0x94, 0x3b)]
504 class PropertiesUI;}
505 RIDL!{#[uuid(0x0010890e, 0x8789, 0x413c, 0xad, 0xbc, 0x48, 0xf5, 0xb5, 0x11, 0xb3, 0xaf)]
506 class UserNotification;}
507 RIDL!{#[uuid(0x56fdf344, 0xfd6d, 0x11d0, 0x95, 0x8a, 0x00, 0x60, 0x97, 0xc9, 0xa0, 0x90)]
508 class TaskbarList;}
509 RIDL!{#[uuid(0x9ac9fbe1, 0xe0a2, 0x4ad6, 0xb4, 0xee, 0xe2, 0x12, 0x01, 0x3e, 0xa9, 0x17)]
510 class ShellItem;}
511 RIDL!{#[uuid(0x72eb61e0, 0x8672, 0x4303, 0x91, 0x75, 0xf2, 0xe4, 0xc6, 0x8b, 0x2e, 0x7c)]
512 class NamespaceWalker;}
513 RIDL!{#[uuid(0x3ad05575, 0x8857, 0x4850, 0x92, 0x77, 0x11, 0xb8, 0x5b, 0xdb, 0x8e, 0x09)]
514 class FileOperation;}
515 RIDL!{#[uuid(0xdc1c5a9c, 0xe88a, 0x4dde, 0xa5, 0xa1, 0x60, 0xf8, 0x2a, 0x20, 0xae, 0xf7)]
516 class FileOpenDialog;}
517 RIDL!{#[uuid(0xc0b4e2f3, 0xba21, 0x4773, 0x8d, 0xba, 0x33, 0x5e, 0xc9, 0x46, 0xeb, 0x8b)]
518 class FileSaveDialog;}
519 RIDL!{#[uuid(0x4df0c730, 0xdf9d, 0x4ae3, 0x91, 0x53, 0xaa, 0x6b, 0x82, 0xe9, 0x79, 0x5a)]
520 class KnownFolderManager;}
521 RIDL!{#[uuid(0x49f371e1, 0x8c5c, 0x4d9c, 0x9a, 0x3b, 0x54, 0xa6, 0x82, 0x7f, 0x51, 0x3c)]
522 class SharingConfigurationManager;}
523 RIDL!{#[uuid(0x7007acc7, 0x3202, 0x11d1, 0xaa, 0xd2, 0x00, 0x80, 0x5f, 0xc1, 0x27, 0x0e)]
524 class NetworkConnections;}
525 RIDL!{#[uuid(0xd6277990, 0x4c6a, 0x11cf, 0x8d, 0x87, 0x00, 0xaa, 0x00, 0x60, 0xf5, 0xbf)]
526 class ScheduledTasks;}
527 RIDL!{#[uuid(0x591209c7, 0x767b, 0x42b2, 0x9f, 0xba, 0x44, 0xee, 0x46, 0x15, 0xf2, 0xc7)]
528 class ApplicationAssociationRegistration;}
529 RIDL!{#[uuid(0x14010e02, 0xbbbd, 0x41f0, 0x88, 0xe3, 0xed, 0xa3, 0x71, 0x21, 0x65, 0x84)]
530 class SearchFolderItemFactory;}
531 RIDL!{#[uuid(0x06622d85, 0x6856, 0x4460, 0x8d, 0xe1, 0xa8, 0x19, 0x21, 0xb4, 0x1c, 0x4b)]
532 class OpenControlPanel;}
533 RIDL!{#[uuid(0x9e56be60, 0xc50f, 0x11cf, 0x9a, 0x2c, 0x00, 0xa0, 0xc9, 0x0a, 0x90, 0xce)]
534 class MailRecipient;}
535 RIDL!{#[uuid(0xf02c1a0d, 0xbe21, 0x4350, 0x88, 0xb0, 0x73, 0x67, 0xfc, 0x96, 0xef, 0x3c)]
536 class NetworkExplorerFolder;}
537 RIDL!{#[uuid(0x77f10cf0, 0x3db5, 0x4966, 0xb5, 0x20, 0xb7, 0xc5, 0x4f, 0xd3, 0x5e, 0xd6)]
538 class DestinationList;}
539 RIDL!{#[uuid(0x86c14003, 0x4d6b, 0x4ef3, 0xa7, 0xb4, 0x05, 0x06, 0x66, 0x3b, 0x2e, 0x68)]
540 class ApplicationDestinations;}
541 RIDL!{#[uuid(0x86bec222, 0x30f2, 0x47e0, 0x9f, 0x25, 0x60, 0xd1, 0x1c, 0xd7, 0x5c, 0x28)]
542 class ApplicationDocumentLists;}
543 RIDL!{#[uuid(0xde77ba04, 0x3c92, 0x4d11, 0xa1, 0xa5, 0x42, 0x35, 0x2a, 0x53, 0xe0, 0xe3)]
544 class HomeGroup;}
545 RIDL!{#[uuid(0xd9b3211d, 0xe57f, 0x4426, 0xaa, 0xef, 0x30, 0xa8, 0x06, 0xad, 0xd3, 0x97)]
546 class ShellLibrary;}
547 RIDL!{#[uuid(0x273eb5e7, 0x88b0, 0x4843, 0xbf, 0xef, 0xe2, 0xc8, 0x1d, 0x43, 0xaa, 0xe5)]
548 class AppStartupLink;}
549 RIDL!{#[uuid(0x2d3468c1, 0x36a7, 0x43b6, 0xac, 0x24, 0xd3, 0xf0, 0x2f, 0xd9, 0x60, 0x7a)]
550 class EnumerableObjectCollection;}
551 RIDL!{#[uuid(0xd5120aa3, 0x46ba, 0x44c5, 0x82, 0x2d, 0xca, 0x80, 0x92, 0xc1, 0xfc, 0x72)]
552 class FrameworkInputPane;}
553 RIDL!{#[uuid(0xc63382be, 0x7933, 0x48d0, 0x9a, 0xc8, 0x85, 0xfb, 0x46, 0xbe, 0x2f, 0xdd)]
554 class DefFolderMenu;}
555 RIDL!{#[uuid(0x7e5fe3d9, 0x985f, 0x4908, 0x91, 0xf9, 0xee, 0x19, 0xf9, 0xfd, 0x15, 0x14)]
556 class AppVisibility;}
557 RIDL!{#[uuid(0x4ed3a719, 0xcea8, 0x4bd9, 0x91, 0x0d, 0xe2, 0x52, 0xf9, 0x97, 0xaf, 0xc2)]
558 class AppShellVerbHandler;}
559 RIDL!{#[uuid(0xe44e9428, 0xbdbc, 0x4987, 0xa0, 0x99, 0x40, 0xdc, 0x8f, 0xd2, 0x55, 0xe7)]
560 class ExecuteUnknown;}
561 RIDL!{#[uuid(0xb1aec16f, 0x2383, 0x4852, 0xb0, 0xe9, 0x8f, 0x0b, 0x1d, 0xc6, 0x6b, 0x4d)]
562 class PackageDebugSettings;}
563 RIDL!{#[uuid(0x6b273fc5, 0x61fd, 0x4918, 0x95, 0xa2, 0xc3, 0xb5, 0xe9, 0xd7, 0xf5, 0x81)]
564 class SuspensionDependencyManager;}
565 RIDL!{#[uuid(0x45ba127d, 0x10a8, 0x46ea, 0x8a, 0xb7, 0x56, 0xea, 0x90, 0x78, 0x94, 0x3c)]
566 class ApplicationActivationManager;}
567 RIDL!{#[uuid(0x958a6fb5, 0xdcb2, 0x4faf, 0xaa, 0xfd, 0x7f, 0xb0, 0x54, 0xad, 0x1a, 0x3b)]
568 class ApplicationDesignModeSettings;}
569 extern "system" {
SHCreateItemFromParsingName( pszPath: PCWSTR, pbc: *mut IBindCtx, riid: REFIID, ppv: *mut *mut c_void ) -> HRESULT570     pub fn SHCreateItemFromParsingName(
571         pszPath: PCWSTR,
572         pbc: *mut IBindCtx,
573         riid: REFIID,
574         ppv: *mut *mut c_void
575     ) -> HRESULT;
576 }
577