winapi_ui_automation/um/
shobjidl_core.rs

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.
6use ctypes::{c_int, c_void};
7use shared::guiddef::{REFGUID, REFIID};
8use shared::minwindef::{BOOL, DWORD, UINT, ULONG, WORD};
9use shared::windef::{COLORREF, HICON, HWND, RECT};
10use um::commctrl::HIMAGELIST;
11use um::minwinbase::{WIN32_FIND_DATAA, WIN32_FIND_DATAW};
12use um::objidl::IBindCtx;
13use um::propkeydef::REFPROPERTYKEY;
14use um::propsys::GETPROPERTYSTOREFLAGS;
15use um::shtypes::{PCIDLIST_ABSOLUTE, PIDLIST_ABSOLUTE};
16use um::unknwnbase::{IUnknown, IUnknownVtbl};
17use um::winnt::{HRESULT, LPCSTR, LPCWSTR, LPSTR, LPWSTR, PCWSTR, ULONGLONG, WCHAR};
18DEFINE_GUID!{CLSID_DesktopWallpaper,
19    0xc2cf3110, 0x460e, 0x4fc1, 0xb9, 0xd0, 0x8a, 0x1c, 0x0c, 0x9c, 0xc4, 0xbd}
20DEFINE_GUID!{CLSID_TaskbarList,
21    0x56fdf344, 0xfd6d, 0x11d0, 0x95, 0x8a, 0x00, 0x60, 0x97, 0xc9, 0xa0, 0x90}
22DEFINE_GUID!{CLSID_FileOpenDialog,
23    0xdc1c5a9c, 0xe88a, 0x4dde, 0xa5, 0xa1, 0x60, 0xf8, 0x2a, 0x20, 0xae, 0xf7}
24DEFINE_GUID!{CLSID_FileSaveDialog,
25    0xc0b4e2f3, 0xba21, 0x4773, 0x8d, 0xba, 0x33, 0x5e, 0xc9, 0x46, 0xeb, 0x8b}
26//4498
27ENUM!{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}}
42pub type SFGAOF = ULONG;
43//9466
44ENUM!{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}}
56ENUM!{enum SICHINTF {
57    SICHINT_DISPLAY = 0,
58    SICHINT_ALLFIELDS = 0x80000000,
59    SICHINT_CANONICAL = 0x10000000,
60    SICHINT_TEST_FILESYSPATH_IF_NOT_EQUAL = 0x20000000,
61}}
62RIDL!{#[uuid(0x43826d1e, 0xe718, 0x42ee, 0xbc, 0x55, 0xa1, 0xe2, 0x61, 0xc3, 0x7b, 0xfe)]
63interface 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}}
87ENUM!{enum SIATTRIBFLAGS {
88    SIATTRIBFLAGS_AND = 0x1,
89    SIATTRIBFLAGS_OR = 0x2,
90    SIATTRIBFLAGS_APPCOMPAT = 0x3,
91    SIATTRIBFLAGS_MASK = 0x3,
92    SIATTRIBFLAGS_ALLITEMS = 0x4000,
93}}
94RIDL!{#[uuid(0xb63ea76d, 0x1f85, 0x456f, 0xa1, 0x9c, 0x48, 0x15, 0x9e, 0xfa, 0x85, 0x8b)]
95interface 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
130RIDL!{#[uuid(0xb4db1657, 0x70d7, 0x485e, 0x8e, 0x3e, 0x6f, 0xcb, 0x5a, 0x5c, 0x18, 0x02)]
131interface IModalWindow(IModalWindowVtbl): IUnknown(IUnknownVtbl) {
132    fn Show(
133        hwndOwner: HWND,
134    ) -> HRESULT,
135}}
136//22307
137//27457
138RIDL!{#[uuid(0x2659b475, 0xeeb8, 0x48b7, 0x8f, 0x07, 0xb3, 0x78, 0x81, 0x0f, 0x48, 0xcf)]
139interface 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}}
148RIDL!{#[uuid(0x56fdf342, 0xfd6d, 0x11d0, 0x95, 0x8a, 0x00, 0x60, 0x97, 0xc9, 0xa0, 0x90)]
149interface 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}}
164RIDL!{#[uuid(0x602d4995, 0xb13a, 0x429b, 0xa6, 0x6e, 0x19, 0x35, 0xe4, 0x4f, 0x43, 0x17)]
165interface ITaskbarList2(ITaskbarList2Vtbl): ITaskbarList(ITaskbarListVtbl) {
166    fn MarkFullscreenWindow(
167        hwnd: HWND,
168        fFullscreen: BOOL,
169    ) -> HRESULT,
170}}
171ENUM!{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}}
179ENUM!{enum THUMBBUTTONMASK {
180    THB_BITMAP = 0x1,
181    THB_ICON = 0x2,
182    THB_TOOLTIP = 0x4,
183    THB_FLAGS = 0x8,
184}}
185STRUCT!{struct THUMBBUTTON {
186    dwMask: THUMBBUTTONMASK,
187    iId: UINT,
188    iBitmap: UINT,
189    hIcon: HICON,
190    szTip: [WCHAR; 260],
191    dwFlags: THUMBBUTTONFLAGS,
192}}
193pub type LPTHUMBBUTTON = *mut THUMBBUTTON;
194pub const THBN_CLICKED: WORD = 0x1800;
195ENUM!{enum TBPFLAG {
196    TBPF_NOPROGRESS = 0,
197    TBPF_INDETERMINATE = 0x1,
198    TBPF_NORMAL = 0x2,
199    TBPF_ERROR = 0x4,
200    TBPF_PAUSED = 0x8,
201}}
202RIDL!{#[uuid(0xea1afb91, 0x9e28, 0x4b86, 0x90, 0xe9, 0x9e, 0x9f, 0x8a, 0x5e, 0xef, 0xaf)]
203interface 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}}
257ENUM!{enum STPFLAG {
258    STPF_NONE = 0,
259    STPF_USEAPPTHUMBNAILALWAYS = 0x1,
260    STPF_USEAPPTHUMBNAILWHENACTIVE = 0x2,
261    STPF_USEAPPPEEKALWAYS = 0x4,
262    STPF_USEAPPPEEKWHENACTIVE = 0x8,
263}}
264RIDL!{#[uuid(0xc43dc798, 0x95d1, 0x4bea, 0x90, 0x30, 0xbb, 0x99, 0xe2, 0x98, 0x3a, 0x1a)]
265interface ITaskbarList4(ITaskbarList4Vtbl): ITaskbarList3(ITaskbarList3Vtbl) {
266    fn SetTabProperties(
267        hwndTab: HWND,
268        stpFlags: STPFLAG,
269    ) -> HRESULT,
270}}
271ENUM!{enum DESKTOP_SLIDESHOW_OPTIONS {
272    DSO_SHUFFLEIMAGES = 0x1,
273}}
274ENUM!{enum DESKTOP_SLIDESHOW_STATE {
275    DSS_ENABLED = 0x1,
276    DSS_SLIDESHOW = 0x2,
277    DSS_DISABLED_BY_REMOTE_SESSION = 0x4,
278}}
279ENUM!{enum DESKTOP_SLIDESHOW_DIRECTION {
280    DSD_FORWARD = 0,
281    DSD_BACKWARD = 1,
282}}
283ENUM!{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}}
291RIDL!{#[uuid(0xb92b56a9, 0x8b55, 0x4e14, 0x9a, 0x89, 0x01, 0x99, 0xbb, 0xb6, 0xf9, 0x3b)]
292interface 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}}
349RIDL!{#[uuid(0x000214ee, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
350interface 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}}
417RIDL!{#[uuid(0x000214f9, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
418interface 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}}
485RIDL!{#[uuid(0xc2cf3110, 0x460e, 0x4fc1, 0xb9, 0xd0, 0x8a, 0x1c, 0x0c, 0x9c, 0xc4, 0xbd)]
486class DesktopWallpaper;}
487RIDL!{#[uuid(0x00021400, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
488class ShellDesktop;}
489RIDL!{#[uuid(0xf3364ba0, 0x65b9, 0x11ce, 0xa9, 0xba, 0x00, 0xaa, 0x00, 0x4a, 0xe8, 0x37)]
490class ShellFSFolder;}
491RIDL!{#[uuid(0x208d2c60, 0x3aea, 0x1069, 0xa2, 0xd7, 0x08, 0x00, 0x2b, 0x30, 0x30, 0x9d)]
492class NetworkPlaces;}
493RIDL!{#[uuid(0x00021401, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
494class ShellLink;}
495RIDL!{#[uuid(0x94357b53, 0xca29, 0x4b78, 0x83, 0xae, 0xe8, 0xfe, 0x74, 0x09, 0x13, 0x4f)]
496class DriveSizeCategorizer;}
497RIDL!{#[uuid(0xb0a8f3cf, 0x4333, 0x4bab, 0x88, 0x73, 0x1c, 0xcb, 0x1c, 0xad, 0xa4, 0x8b)]
498class DriveTypeCategorizer;}
499RIDL!{#[uuid(0xb5607793, 0x24ac, 0x44c7, 0x82, 0xe2, 0x83, 0x17, 0x26, 0xaa, 0x6c, 0xb7)]
500class FreeSpaceCategorizer;}
501RIDL!{#[uuid(0x55d7b852, 0xf6d1, 0x42f2, 0xaa, 0x75, 0x87, 0x28, 0xa1, 0xb2, 0xd2, 0x64)]
502class SizeCategorizer;}
503RIDL!{#[uuid(0xd912f8cf, 0x0396, 0x4915, 0x88, 0x4e, 0xfb, 0x42, 0x5d, 0x32, 0x94, 0x3b)]
504class PropertiesUI;}
505RIDL!{#[uuid(0x0010890e, 0x8789, 0x413c, 0xad, 0xbc, 0x48, 0xf5, 0xb5, 0x11, 0xb3, 0xaf)]
506class UserNotification;}
507RIDL!{#[uuid(0x56fdf344, 0xfd6d, 0x11d0, 0x95, 0x8a, 0x00, 0x60, 0x97, 0xc9, 0xa0, 0x90)]
508class TaskbarList;}
509RIDL!{#[uuid(0x9ac9fbe1, 0xe0a2, 0x4ad6, 0xb4, 0xee, 0xe2, 0x12, 0x01, 0x3e, 0xa9, 0x17)]
510class ShellItem;}
511RIDL!{#[uuid(0x72eb61e0, 0x8672, 0x4303, 0x91, 0x75, 0xf2, 0xe4, 0xc6, 0x8b, 0x2e, 0x7c)]
512class NamespaceWalker;}
513RIDL!{#[uuid(0x3ad05575, 0x8857, 0x4850, 0x92, 0x77, 0x11, 0xb8, 0x5b, 0xdb, 0x8e, 0x09)]
514class FileOperation;}
515RIDL!{#[uuid(0xdc1c5a9c, 0xe88a, 0x4dde, 0xa5, 0xa1, 0x60, 0xf8, 0x2a, 0x20, 0xae, 0xf7)]
516class FileOpenDialog;}
517RIDL!{#[uuid(0xc0b4e2f3, 0xba21, 0x4773, 0x8d, 0xba, 0x33, 0x5e, 0xc9, 0x46, 0xeb, 0x8b)]
518class FileSaveDialog;}
519RIDL!{#[uuid(0x4df0c730, 0xdf9d, 0x4ae3, 0x91, 0x53, 0xaa, 0x6b, 0x82, 0xe9, 0x79, 0x5a)]
520class KnownFolderManager;}
521RIDL!{#[uuid(0x49f371e1, 0x8c5c, 0x4d9c, 0x9a, 0x3b, 0x54, 0xa6, 0x82, 0x7f, 0x51, 0x3c)]
522class SharingConfigurationManager;}
523RIDL!{#[uuid(0x7007acc7, 0x3202, 0x11d1, 0xaa, 0xd2, 0x00, 0x80, 0x5f, 0xc1, 0x27, 0x0e)]
524class NetworkConnections;}
525RIDL!{#[uuid(0xd6277990, 0x4c6a, 0x11cf, 0x8d, 0x87, 0x00, 0xaa, 0x00, 0x60, 0xf5, 0xbf)]
526class ScheduledTasks;}
527RIDL!{#[uuid(0x591209c7, 0x767b, 0x42b2, 0x9f, 0xba, 0x44, 0xee, 0x46, 0x15, 0xf2, 0xc7)]
528class ApplicationAssociationRegistration;}
529RIDL!{#[uuid(0x14010e02, 0xbbbd, 0x41f0, 0x88, 0xe3, 0xed, 0xa3, 0x71, 0x21, 0x65, 0x84)]
530class SearchFolderItemFactory;}
531RIDL!{#[uuid(0x06622d85, 0x6856, 0x4460, 0x8d, 0xe1, 0xa8, 0x19, 0x21, 0xb4, 0x1c, 0x4b)]
532class OpenControlPanel;}
533RIDL!{#[uuid(0x9e56be60, 0xc50f, 0x11cf, 0x9a, 0x2c, 0x00, 0xa0, 0xc9, 0x0a, 0x90, 0xce)]
534class MailRecipient;}
535RIDL!{#[uuid(0xf02c1a0d, 0xbe21, 0x4350, 0x88, 0xb0, 0x73, 0x67, 0xfc, 0x96, 0xef, 0x3c)]
536class NetworkExplorerFolder;}
537RIDL!{#[uuid(0x77f10cf0, 0x3db5, 0x4966, 0xb5, 0x20, 0xb7, 0xc5, 0x4f, 0xd3, 0x5e, 0xd6)]
538class DestinationList;}
539RIDL!{#[uuid(0x86c14003, 0x4d6b, 0x4ef3, 0xa7, 0xb4, 0x05, 0x06, 0x66, 0x3b, 0x2e, 0x68)]
540class ApplicationDestinations;}
541RIDL!{#[uuid(0x86bec222, 0x30f2, 0x47e0, 0x9f, 0x25, 0x60, 0xd1, 0x1c, 0xd7, 0x5c, 0x28)]
542class ApplicationDocumentLists;}
543RIDL!{#[uuid(0xde77ba04, 0x3c92, 0x4d11, 0xa1, 0xa5, 0x42, 0x35, 0x2a, 0x53, 0xe0, 0xe3)]
544class HomeGroup;}
545RIDL!{#[uuid(0xd9b3211d, 0xe57f, 0x4426, 0xaa, 0xef, 0x30, 0xa8, 0x06, 0xad, 0xd3, 0x97)]
546class ShellLibrary;}
547RIDL!{#[uuid(0x273eb5e7, 0x88b0, 0x4843, 0xbf, 0xef, 0xe2, 0xc8, 0x1d, 0x43, 0xaa, 0xe5)]
548class AppStartupLink;}
549RIDL!{#[uuid(0x2d3468c1, 0x36a7, 0x43b6, 0xac, 0x24, 0xd3, 0xf0, 0x2f, 0xd9, 0x60, 0x7a)]
550class EnumerableObjectCollection;}
551RIDL!{#[uuid(0xd5120aa3, 0x46ba, 0x44c5, 0x82, 0x2d, 0xca, 0x80, 0x92, 0xc1, 0xfc, 0x72)]
552class FrameworkInputPane;}
553RIDL!{#[uuid(0xc63382be, 0x7933, 0x48d0, 0x9a, 0xc8, 0x85, 0xfb, 0x46, 0xbe, 0x2f, 0xdd)]
554class DefFolderMenu;}
555RIDL!{#[uuid(0x7e5fe3d9, 0x985f, 0x4908, 0x91, 0xf9, 0xee, 0x19, 0xf9, 0xfd, 0x15, 0x14)]
556class AppVisibility;}
557RIDL!{#[uuid(0x4ed3a719, 0xcea8, 0x4bd9, 0x91, 0x0d, 0xe2, 0x52, 0xf9, 0x97, 0xaf, 0xc2)]
558class AppShellVerbHandler;}
559RIDL!{#[uuid(0xe44e9428, 0xbdbc, 0x4987, 0xa0, 0x99, 0x40, 0xdc, 0x8f, 0xd2, 0x55, 0xe7)]
560class ExecuteUnknown;}
561RIDL!{#[uuid(0xb1aec16f, 0x2383, 0x4852, 0xb0, 0xe9, 0x8f, 0x0b, 0x1d, 0xc6, 0x6b, 0x4d)]
562class PackageDebugSettings;}
563RIDL!{#[uuid(0x6b273fc5, 0x61fd, 0x4918, 0x95, 0xa2, 0xc3, 0xb5, 0xe9, 0xd7, 0xf5, 0x81)]
564class SuspensionDependencyManager;}
565RIDL!{#[uuid(0x45ba127d, 0x10a8, 0x46ea, 0x8a, 0xb7, 0x56, 0xea, 0x90, 0x78, 0x94, 0x3c)]
566class ApplicationActivationManager;}
567RIDL!{#[uuid(0x958a6fb5, 0xdcb2, 0x4faf, 0xaa, 0xfd, 0x7f, 0xb0, 0x54, 0xad, 0x1a, 0x3b)]
568class ApplicationDesignModeSettings;}
569extern "system" {
570    pub fn SHCreateItemFromParsingName(
571        pszPath: PCWSTR,
572        pbc: *mut IBindCtx,
573        riid: REFIID,
574        ppv: *mut *mut c_void
575    ) -> HRESULT;
576}