ReactOS 0.4.17-dev-573-g8315b8c
CFolderItems.cpp
Go to the documentation of this file.
1/*
2 * PROJECT: shell32
3 * LICENSE: LGPL-2.1+ (https://spdx.org/licenses/LGPL-2.1+)
4 * PURPOSE: FolderItem(s) implementation
5 * COPYRIGHT: Copyright 2015-2018 Mark Jansen (mark.jansen@reactos.org)
6 */
7
8#include "precomp.h"
9#include "prop.h"
10
12
14 _In_opt_ PCWSTR pszArgs, _In_ UINT fCMIC, _In_ UINT fCMF, _In_opt_ IUnknown *pSite)
15{
16 // Note: We can't use SHLWAPI::SHInvokeCommandOnContextMenu because it does not have an arguments parameter
17 if (!pCM)
18 return E_INVALIDARG;
19
20 HRESULT hr = S_OK;
21 int iDefItem = 0;
22 HMENU hMenu = NULL;
24 CMINVOKECOMMANDINFOEX ici = { sizeof(ici), fCMIC, hWnd, NULL, NULL, NULL, SW_SHOWNORMAL };
25 CHAR szVerb[MAX_PATH], szArgs[MAX_PATH * 3];
26
27 if (pSite)
28 IUnknown_SetSite(pCM, pSite);
29
30 if (IS_INTRESOURCE(pszVerb))
31 {
32 ici.lpVerb = MAKEINTRESOURCEA(pszVerb);
33 if (!cVerbs)
34 {
35 hMenu = CreatePopupMenu();
36 if (hMenu)
37 {
38 hr = pCM->QueryContextMenu(hMenu, 0, 1, MAXSHORT, fCMF | CMF_DEFAULTONLY);
39 if ((iDefItem = GetMenuDefaultItem(hMenu, 0, 0)) != -1)
40 ici.lpVerb = MAKEINTRESOURCEA(iDefItem - 1);
41 }
42 }
43 ici.lpVerbW = MAKEINTRESOURCEW(ici.lpVerb);
44 }
45 else
46 {
47 ici.fMask |= CMIC_MASK_UNICODE;
48 ici.lpVerbW = pszVerb;
49 if (pszVerb && SHUnicodeToAnsi(pszVerb, szVerb, _countof(szVerb)))
50 ici.lpVerb = szVerb;
51 }
52
53 if (pszArgs)
54 {
55 ici.fMask |= CMIC_MASK_UNICODE;
56 ici.lpParametersW = pszArgs;
57 if (pszArgs && SHUnicodeToAnsi(pszArgs, szArgs, _countof(szArgs)))
58 ici.lpParameters = szArgs;
59 }
60
61 SetCursor(hOldCursor);
62
63 if (!FAILED_UNEXPECTEDLY(hr) && (iDefItem != -1 || ici.lpVerbW))
64 hr = pCM->InvokeCommand((LPCMINVOKECOMMANDINFO)&ici);
65 if (pSite)
67 if (hMenu)
68 DestroyMenu(hMenu);
69 return hr;
70}
71
72static inline HRESULT GetUIObjectOfFolderItems(FolderItems *pFI, REFIID riid, void **ppv)
73{
74 VARIANT v;
75 V_VT(&v) = VT_DISPATCH;
76 V_DISPATCH(&v) = static_cast<IDispatch*>(pFI);
78}
79
81{
82}
83
85{
86}
87
89{
91 return SHILClone(idlist, &m_idlist);
92}
93
95{
96 return SHBindToParent(GetAbsoluteIDList(), riid, ppv, &pidlLast);
97}
98
100{
101 if (!pV)
102 return E_POINTER;
103 pV = VariantDerefVariant(pV);
104
105 IUnknown *pUnk = NULL;
106 switch (V_VT(pV))
107 {
108 case VT_DISPATCH | VT_BYREF:
109 pUnk = V_DISPATCHREF(pV) ? *V_DISPATCHREF(pV) : NULL;
110 break;
111 case VT_DISPATCH:
112 pUnk = V_DISPATCH(pV);
113 break;
114 }
116}
117
119{
121 PITEMID_CHILD pidl;
122 if (SUCCEEDED(GetParentAndItem(pV, &pPAI)) && SUCCEEDED(pPAI->GetParentAndItem(NULL, NULL, &pidl)))
123 return pidl;
124 return NULL;
125}
126
128{
130 PCUITEMID_CHILD pidlLeaf;
133 return hr;
134 return SHGetDataFromIDListW(psf, pidlLeaf, SHGDFIL_FINDDATA, &wfd, sizeof(wfd));
135}
136
137// *** FolderItem methods ***
139{
140 TRACE("(%p, %p)\n", this, ppid);
141 return m_Folder->get_Application(ppid);
142}
143
145{
146 TRACE("(%p, %p)\n", this, ppid);
147
148 if (!ppid)
149 return E_INVALIDARG;
150 return m_Folder->QueryInterface(IID_PPV_ARG(IDispatch, ppid));
151}
152
154{
155 TRACE("(%p, %p)\n", this, pbs);
156
157 *pbs = NULL;
158
160 PCUITEMID_CHILD last_part;
163 return hr;
164
165 STRRET strret;
166 hr = Parent->GetDisplayNameOf(last_part, SHGDN_INFOLDER, &strret);
168 hr = StrRetToBSTR(&strret, last_part, pbs);
169
170 return hr;
171}
172
174{
175 TRACE("(%p, %s)\n", this, wine_dbgstr_w(bs));
176
178 PCUITEMID_CHILD pidlLeaf;
181 return hr;
182
183 LPITEMIDLIST pidlNew;
184 if (SUCCEEDED(hr = psf->SetNameOf(GetHwnd(), pidlLeaf, bs, SHGDN_INFOLDER, &pidlNew)) && pidlNew)
185 {
186 LPITEMIDLIST pidlClone = ILClone(m_idlist);
187 ILRemoveLastID(pidlClone);
188 if (pidlClone && SUCCEEDED(SHILAppend(pidlNew, &pidlClone)))
189 {
190 m_idlist.Free();
191 m_idlist.Attach(pidlClone);
192 }
193 }
194 return hr;
195}
196
198{
199 CComPtr<IShellFolder> psfDesktop;
200
201 HRESULT hr = SHGetDesktopFolder(&psfDesktop);
202 if (!SUCCEEDED(hr))
203 return hr;
204
205 STRRET strret;
206 hr = psfDesktop->GetDisplayNameOf(m_idlist, SHGDN_FORPARSING, &strret);
208 return hr;
209
210 return StrRetToBSTR(&strret, NULL, pbs);
211}
212
214{
215 TRACE("(%p, %p)\n", this, ppid);
216 return E_NOTIMPL;
217}
218
220{
221 return CFolder::CreateInstance(GetAbsoluteIDList(), *static_cast<Folder*>(m_Folder), IID_PPV_ARG(IDispatch, ppid));
222}
223
225{
226 *pB = SHGetAttributes(NULL, GetAbsoluteIDList(), sfgaof) ? VARIANT_TRUE : VARIANT_FALSE;
227 return S_OK;
228}
229
231{
232 TRACE("(%p, %p)\n", this, pb);
233 return HasAttribute(SFGAO_LINK, pb);
234}
235
237{
238 TRACE("(%p, %p)\n", this, pb);
239 return HasAttribute(SFGAO_FOLDER, pb);
240}
241
243{
244 TRACE("(%p, %p)\n", this, pb);
245 return HasAttribute(SFGAO_FILESYSTEM, pb);
246}
247
249{
250 TRACE("(%p, %p)\n", this, pb);
251 return HasAttribute(SFGAO_BROWSABLE, pb);
252}
253
255{
256 TRACE("(%p, %p)\n", this, pdt);
257
258 WIN32_FIND_DATA wfd;
260 {
261 FILETIME ft;
262 FileTimeToLocalFileTime(&wfd.ftLastWriteTime, &ft);
263 WORD dd, dt;
264 if (FileTimeToDosDateTime(&ft, &dd, &dt) && DosDateTimeToVariantTime(dd, dt, pdt))
265 return S_OK;
266 }
267 *pdt = 0;
268 return S_FALSE;
269}
270
272{
273 TRACE("(%p, %f)\n", this, dt);
274 return E_NOTIMPL;
275}
276
278{
279 TRACE("(%p, %p)\n", this, pul);
280
281 WIN32_FIND_DATA wfd;
283 {
284 *pul = wfd.nFileSizeLow;
285 return S_OK;
286 }
287 *pul = 0;
288 return S_FALSE;
289}
290
292{
293 TRACE("(%p, %p)\n", this, pbs);
294
295 VARIANT v;
296 V_VT(&v) = VT_EMPTY;
297 if (SUCCEEDED(GetExtendedProperty(PKEY_ItemTypeText, &v)))
298 {
300 {
301 *pbs = V_BSTR(&v);
302 return S_OK;
303 }
304 VariantClear(&v);
305 }
307 return hr == S_OK ? S_FALSE : hr;
308}
309
311{
312 if (!ppfic)
313 return E_POINTER;
314
317 if (SUCCEEDED(hr))
318 hr = pVerbs->Init(GetAbsoluteIDList());
320 return hr;
321
322 *ppfic = pVerbs.Detach();
323 return S_OK;
324}
325
327{
329 V_VT(&empty) = VT_EMPTY;
330 return InvokeVerbEx(vVerb, empty);
331}
332
334{
335 TRACE("(%p, %s)\n", this, wine_dbgstr_variant(&vVerb));
336
337 HWND hWnd = GetHwnd();
339 PCUITEMID_CHILD pidlItem;
342 return hr;
343
345 if (SUCCEEDED(hr = psf->GetUIObjectOf(hWnd, 1, &pidlItem, IID_NULL_PPV_ARG(IContextMenu, &pCM))))
346 hr = CFolderItems::InvokeVerbHelper(hWnd, *pCM, vVerb, vArgs, GetSite());
347 return hr;
348}
349
351{
353 PCUITEMID_CHILD pidlLeaf;
355 return FAILED(hr) ? hr : psf->GetDetailsEx(pidlLeaf, reinterpret_cast<const SHCOLUMNID*>(&pkey), pv);
356}
357
359{
360 if (!pv)
361 return E_INVALIDARG;
362
363 if (!lstrcmpiW(bsPropName, L"InfoTip"))
364 {
365 VARIANT v;
366 V_VT(&v) = VT_DISPATCH;
367 V_DISPATCH(&v) = static_cast<IDispatch*>(this);
368 if (SUCCEEDED(m_Folder->GetDetailsOf(v, CFolder::INFOTIPCOLUMN, &V_BSTR(pv))))
369 {
370 V_VT(pv) = VT_BSTR;
371 return S_OK;
372 }
373 }
374
375 PROPERTYKEY pkeybuf;
376 const PROPERTYKEY *pPK = SHELL_GetPropertyKeyFromString(bsPropName, &pkeybuf);
377 if (pPK && GetExtendedProperty(*pPK, pv) == S_OK)
378 return S_OK;
379
380 V_VT(pv) = VT_EMPTY;
381 return S_FALSE;
382}
383
385{
386 if (ppidlParent)
387 *ppidlParent = NULL;
388 if (ppsf)
389 *ppsf = NULL;
390 if (ppidlChild)
391 *ppidlChild = NULL;
392
395 PCUITEMID_CHILD pidlChild;
396 if (ppsf || ppidlChild)
397 {
399 return hr;
400 }
401
402 if (ppidlParent && FAILED(hr = SHILCloneParent(GetAbsoluteIDList(), ppidlParent)))
403 return hr;
404 if (ppidlChild && FAILED(hr = SHILClone(pidlChild, ppidlChild)))
405 {
406 if (ppidlParent)
407 {
408 ILFree(*ppidlParent);
409 *ppidlParent = NULL;
410 }
411 return hr;
412 }
413 if (ppsf)
414 *ppsf = psf.Detach();
415 return hr;
416}
417
418
420 :m_Count(-1)
421{
422}
423
425{
427}
428
430{
432 return SHILClone(idlist, &m_idlist);
433}
434
436{
438 m_Count = -1;
439}
440
442{
443 if (!m_bstrFilter)
444 return TRUE;
445
447 if (FAILED(SHILCombine(m_idlist, pidl, &pidlFull)))
448 return FALSE;
449 CComHeapPtr<WCHAR> pszPath;
450 if (FAILED(SHELL_DisplayNameOf(NULL, pidlFull, SHGDN_FORPARSING | SHGDN_INFOLDER, &pszPath)))
451 return FALSE;
452 return PathMatchSpecW(pszPath, m_bstrFilter);
453}
454
456{
457 return ((CFolderItems*)Cookie)->IncludeItem(pidl) ? S_OK : S_FALSE;
458}
459
461{
462 if (m_EnumIDList)
463 return S_OK;
464
468 return hr;
469
471 if (FAILED(hr = psf->EnumObjects(NULL, m_Contf, &pEnum)))
472 return hr;
473 hr = pEnum ? S_OK : E_UNEXPECTED;
474 if (SUCCEEDED(hr) && m_bstrFilter)
475 {
476 CComPtr<IEnumIDList> pFilteredEnum;
477 hr = CEnumIDListBase::CreateInstance(*pEnum, ItemsEnumFilter, this, &pFilteredEnum);
478 if (SUCCEEDED(hr))
479 pEnum = pFilteredEnum;
480 }
481
482 if (FAILED(hr))
483 return hr;
484 m_EnumIDList = pEnum;
485 return S_OK;
486}
487
488// *** FolderItems methods ***
490{
491 if (!plCount)
492 return E_POINTER;
493
494 if (m_Count == -1)
495 {
496 long count = 0;
497
498 if (FAILED(EnumObjects()))
499 return E_FAIL;
500 HRESULT hr = m_EnumIDList->Reset();
502 return hr;
503
505 while ((hr = GetNext(&Pidl)) == S_OK)
506 {
507 count++;
508 Pidl.Free();
509 }
510 m_Count = count;
511 }
512 *plCount = m_Count;
513
514 return S_OK;
515}
516
518{
519 TRACE("(%p, %p)\n", this, ppid);
520 return m_Folder->get_Application(ppid);
521}
522
524{
525 TRACE("(%p, %p)\n", this, ppid);
526
527 if (ppid)
528 *ppid = NULL;
529
530 return E_NOTIMPL;
531}
532
534{
536 HRESULT hr;
537
539 if (FAILED(hr))
540 return hr;
541
542 if (V_VT(&index) == VT_I2)
544
545 if (V_VT(&index) == VT_I4)
546 {
547 if (FAILED(EnumObjects()))
548 return E_FAIL;
549
551
552 hr = m_EnumIDList->Reset();
554 return hr;
555
556 hr = m_EnumIDList->Skip(count);
557
559 return hr;
560
561 CComHeapPtr<ITEMIDLIST> pidlChild;
562 hr = GetNext(&pidlChild);
564 return hr;
565 if (hr != S_OK)
566 return E_INVALIDARG;
567
569 if (FAILED_UNEXPECTEDLY(hr = SHILCombine(m_idlist, pidlChild, &pidlFull)))
570 return hr;
571 hr = ShellObjectCreatorInit<CFolderItem>(m_Folder, pidlFull, IID_PPV_ARG(FolderItem, ppid));
573 return hr;
574 return hr;
575 }
576 else if (V_VT(&index) == VT_BSTR)
577 {
578 if (!V_BSTR(&index))
579 return S_FALSE;
580
581 hr = m_Folder->ParseName(V_BSTR(&index), ppid);
583 return hr;
584 return hr;
585 }
586
587 FIXME("Index type %d not handled.\n", V_VT(&index));
588 return E_NOTIMPL;
589}
590
592{
593 return ShellObjectCreatorInit<CFolderItems>(static_cast<LPITEMIDLIST>(m_idlist), m_Folder, IID_FolderItems, reinterpret_cast<void**>(ppunk));
594}
595
597{
600 if (FAILED(hr))
602 return InvokeVerbHelper(GetHwnd(), *pCM, vVerb, vArgs, GetSite());
603}
604
606{
607 if (bstrFilter)
608 {
609 if (!*bstrFilter)
610 bstrFilter = NULL;
611 else if ((bstrFilter = SysAllocString(bstrFilter)) == NULL)
612 return E_OUTOFMEMORY;
613 }
614 ResetEnum();
616 m_bstrFilter = bstrFilter;
617 m_Contf = grfFlags;
618 return S_OK;
619}
620
622{
623 if (!ppfic)
624 return E_POINTER;
625
628 if (FAILED(hr))
629 return hr;
630 long count;
631 if (SUCCEEDED(hr = get_Count(&count)) && count)
632 {
635 hr = pVerbs->Init(*static_cast<IContextMenu*>(pCM));
636 }
637 *ppfic = pVerbs.Detach();
638 return S_OK;
639}
640
642{
643 PCWSTR pszVerb = V_VT(&vVerb) == VT_BSTR && !StrIsNullOrEmpty(V_BSTR(&vVerb)) ? V_BSTR(&vVerb) : NULL;
644 PCWSTR pszArgs = V_VT(&vArgs) == VT_BSTR && !StrIsNullOrEmpty(V_BSTR(&vArgs)) ? V_BSTR(&vArgs) : NULL;
645 HRESULT hr = SHELL_InvokeCommandOnContextMenu(hWnd, &cm, pszVerb, !!pszVerb, pszArgs, 0, 0, pSite);
646 return SUCCEEDED(hr) ? hr : S_FALSE;
647}
HRESULT WINAPI SHGetDesktopFolder(IShellFolder **psf)
HRESULT SHELL_InvokeCommandOnContextMenu(_In_opt_ HWND hWnd, _In_ IContextMenu *pCM, _In_opt_ PCWSTR pszVerb, _In_ UINT cVerbs, _In_opt_ PCWSTR pszArgs, _In_ UINT fCMIC, _In_ UINT fCMF, _In_opt_ IUnknown *pSite)
static HRESULT GetUIObjectOfFolderItems(FolderItems *pFI, REFIID riid, void **ppv)
ACPI_PHYSICAL_ADDRESS ACPI_SIZE BOOLEAN Warn UINT32 *TableIdx UINT32 ACPI_TABLE_HEADER *OutTableHeader ACPI_TABLE_HEADER **OutTable ACPI_HANDLE UINT32 ACPI_WALK_CALLBACK ACPI_WALK_CALLBACK void void **ReturnValue UINT32 ACPI_BUFFER *RetPathPtr ACPI_OBJECT_HANDLER void *Data ACPI_OBJECT_HANDLER void **Data ACPI_STRING ACPI_OBJECT_LIST ACPI_BUFFER *ReturnObjectBuffer ACPI_DEVICE_INFO **ReturnBuffer ACPI_HANDLE Parent
Definition: acpixf.h:732
HWND hWnd
Definition: settings.c:17
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
#define index(s, c)
Definition: various.h:29
void shell(int argc, const char *argv[])
Definition: cmds.c:1231
#define FIXME(fmt,...)
Definition: precomp.h:53
#define STDMETHODCALLTYPE
Definition: bdasup.h:9
T * Detach()
Definition: atlcomcli.h:186
static HRESULT CreateInstance(IEnumIDList &Source, CREATEINSTANCEFILTERFUNC Filter, void *CallerCookie, IEnumIDList **ppEnum)
static HRESULT CreateInstance(CComPtr< CFolderItemVerbs > &objref)
CComHeapPtr< ITEMIDLIST > m_idlist
Definition: CFolderItems.h:19
STDMETHOD() get_Type(BSTR *pbs) override
IUnknown * GetSite()
Definition: CFolderItems.h:31
STDMETHOD() get_Path(BSTR *pbs) override
STDMETHOD() get_IsLink(VARIANT_BOOL *pb) override
STDMETHOD() get_Size(LONG *pul) override
HRESULT GetFindDataFromIDList(WIN32_FIND_DATA &wfd)
static HRESULT GetParentAndItem(const VARIANT *pV, IParentAndItem **ppPAI)
STDMETHOD() get_IsFileSystem(VARIANT_BOOL *pb) override
STDMETHOD() get_IsBrowsable(VARIANT_BOOL *pb) override
STDMETHOD() get_ModifyDate(DATE *pdt) override
HRESULT GetParentShellFolderAndItem(REFIID riid, void **ppv, PCUITEMID_CHILD &pidlLast)
HRESULT GetExtendedProperty(REFPROPERTYKEY pkey, VARIANT *pv)
HWND GetHwnd()
Definition: CFolderItems.h:30
STDMETHOD() get_Parent(IDispatch **ppid) override
STDMETHOD() get_IsFolder(VARIANT_BOOL *pb) override
STDMETHOD() Verbs(FolderItemVerbs **ppfic) override
STDMETHOD() put_Name(BSTR bs) override
HRESULT Initialize(Folder *folder, LPCITEMIDLIST idlist)
LPCITEMIDLIST GetAbsoluteIDList()
Definition: CFolderItems.h:29
STDMETHOD() get_Name(BSTR *pbs) override
STDMETHOD() ExtendedProperty(BSTR bsPropName, VARIANT *pv) override
STDMETHOD() InvokeVerbEx(VARIANT vVerb, VARIANT vArgs) override
STDMETHOD() put_ModifyDate(DATE dt) override
static PITEMID_CHILD CloneLeafPidl(const VARIANT *pV)
STDMETHOD() get_GetFolder(IDispatch **ppid) override
STDMETHOD() get_Application(IDispatch **ppid) override
STDMETHOD() InvokeVerb(VARIANT vVerb) override
HRESULT HasAttribute(DWORD sfgaof, VARIANT_BOOL *pB)
CComPtr< Folder > m_Folder
Definition: CFolderItems.h:20
STDMETHOD() get_GetLink(IDispatch **ppid) override
STDMETHOD() Filter(LONG grfFlags, BSTR bstrFilter) override
STDMETHOD() Item(VARIANT index, FolderItem **ppid) override
STDMETHOD() get_Application(IDispatch **ppid) override
BSTR m_bstrFilter
Definition: CFolderItems.h:88
HWND GetHwnd()
Definition: CFolderItems.h:101
HRESULT GetNext(LPITEMIDLIST *ppidl)
Definition: CFolderItems.h:94
HRESULT EnumObjects()
IUnknown * GetSite()
Definition: CFolderItems.h:102
CComPtr< IEnumIDList > m_EnumIDList
Definition: CFolderItems.h:84
STDMETHOD() InvokeVerbEx(VARIANT vVerb, VARIANT vArgs) override
static HRESULT CALLBACK ItemsEnumFilter(void *Cookie, LPCITEMIDLIST pidl)
STDMETHOD() get_Count(long *plCount) override
CComHeapPtr< ITEMIDLIST > m_idlist
Definition: CFolderItems.h:83
CComPtr< Folder > m_Folder
Definition: CFolderItems.h:85
static HRESULT InvokeVerbHelper(HWND hWnd, IContextMenu &cm, VARIANT &vVerb, VARIANT &vArgs, IUnknown *pSite)
HRESULT Initialize(LPCITEMIDLIST idlist, Folder *parent)
STDMETHOD() get_Parent(IDispatch **ppid) override
BOOL IncludeItem(LPCITEMIDLIST pidl)
STDMETHOD() _NewEnum(IUnknown **ppunk) override
STDMETHOD() get_Verbs(FolderItemVerbs **ppfic) override
@ INFOTIPCOLUMN
Definition: CFolder.h:28
static HRESULT GetUIObjectFromVariant(VARIANT &vItem, REFIID riid, void **ppv)
Definition: CFolder.cpp:179
static HRESULT CreateInstance(LPCITEMIDLIST pidl, IDispatch *pDispatch, REFIID riid, void **ppv)
Definition: CFolder.h:55
void Free()
Definition: atlalloc.h:153
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_INVALIDARG
Definition: ddrawi.h:101
#define E_NOTIMPL
Definition: ddrawi.h:99
#define E_FAIL
Definition: ddrawi.h:102
HRESULT hr
Definition: delayimp.cpp:582
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
static const WCHAR empty[1]
Definition: string.c:47
double DATE
Definition: compat.h:2253
OLECHAR * BSTR
Definition: compat.h:2293
#define MAX_PATH
Definition: compat.h:34
#define CALLBACK
Definition: compat.h:35
short VARIANT_BOOL
Definition: compat.h:2290
@ VT_BSTR
Definition: compat.h:2303
@ VT_BYREF
Definition: compat.h:2342
@ VT_I4
Definition: compat.h:2298
@ VT_I2
Definition: compat.h:2297
@ VT_EMPTY
Definition: compat.h:2295
@ VT_DISPATCH
Definition: compat.h:2304
BOOL WINAPI FileTimeToLocalFileTime(IN CONST FILETIME *lpFileTime, OUT LPFILETIME lpLocalFileTime)
Definition: time.c:216
BOOL WINAPI FileTimeToDosDateTime(IN CONST FILETIME *lpFileTime, OUT LPWORD lpFatDate, OUT LPWORD lpFatTime)
Definition: time.c:37
int WINAPI lstrcmpiW(LPCWSTR str1, LPCWSTR str2)
Definition: locale.c:4171
#define IS_INTRESOURCE(x)
Definition: loader.c:613
BOOL WINAPI PathMatchSpecW(const WCHAR *path, const WCHAR *mask)
Definition: path.c:2497
DWORD WINAPI SHUnicodeToAnsi(const WCHAR *src, char *dest, int dest_len)
Definition: main.c:1756
HRESULT WINAPI IUnknown_SetSite(IUnknown *obj, IUnknown *site)
Definition: main.c:222
HRESULT SHELL_DisplayNameOf(_In_opt_ IShellFolder *psf, _In_ LPCITEMIDLIST pidl, _In_opt_ UINT Flags, _Out_ PWSTR *ppStr)
Definition: utils.cpp:454
SHSTDAPI SHBindToObject(_In_opt_ IShellFolder *psf, _In_ LPCITEMIDLIST pidl, _In_opt_ IBindCtx *pBindCtx, _In_ REFIID riid, _Out_ void **ppvObj)
DWORD SHGetAttributes(_In_ IShellFolder *psf, _In_ LPCITEMIDLIST pidl, _In_ DWORD dwAttributes)
Definition: utils.cpp:496
HRESULT SHILAppend(_Inout_ LPITEMIDLIST pidl, _Inout_ LPITEMIDLIST *ppidl)
Definition: utils.cpp:261
static VARIANT * VariantDerefVariant(_In_ const VARIANT *pV)
Definition: prop.h:36
HRESULT WINAPI StrRetToBSTR(STRRET *lpStrRet, LPCITEMIDLIST pidl, BSTR *pBstrOut)
Definition: string.c:418
#define FAILED_UNEXPECTEDLY
Definition: utils.cpp:33
static void *static void *static LPDIRECTPLAY IUnknown * pUnk
Definition: dplayx.c:30
#define L(x)
Definition: resources.c:13
r parent
Definition: btrfs.c:3010
unsigned short WORD
Definition: ntddk_ex.h:93
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
const GLdouble * v
Definition: gl.h:2040
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLuint index
Definition: glext.h:6031
unsigned int UINT
Definition: sysinfo.c:13
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
nsresult QueryInterface(nsIIDRef riid, void **result)
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FAILED(hr)
Definition: intsafe.h:51
#define wine_dbgstr_w
Definition: kernel32.h:34
static struct msdos_boot_sector bs
Definition: mkdosfs.c:539
const char * var
Definition: shader.c:5666
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:60
#define _In_
Definition: no_sal2.h:158
#define _In_opt_
Definition: no_sal2.h:212
BSTR WINAPI SysAllocString(LPCOLESTR str)
Definition: oleaut.c:240
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
Definition: oleaut.c:273
#define V_VT(A)
Definition: oleauto.h:211
#define V_DISPATCHREF(A)
Definition: oleauto.h:240
#define V_BSTR(A)
Definition: oleauto.h:226
#define V_UI4(A)
Definition: oleauto.h:270
#define V_DISPATCH(A)
Definition: oleauto.h:239
long LONG
Definition: pedump.c:60
char CHAR
Definition: pedump.c:57
LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl)
Definition: pidl.c:238
void WINAPI ILFree(LPITEMIDLIST pidl)
Definition: pidl.c:1051
BOOL WINAPI ILRemoveLastID(LPITEMIDLIST pidl)
Definition: pidl.c:222
HRESULT WINAPI SHBindToParent(LPCITEMIDLIST pidl, REFIID riid, LPVOID *ppv, LPCITEMIDLIST *ppidlLast)
Definition: pidl.c:1504
HRESULT WINAPI SHGetDataFromIDListW(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, int nFormat, LPVOID dest, int len)
Definition: pidl.c:1358
const PROPERTYKEY * SHELL_GetPropertyKeyFromString(_In_ PCWSTR pszString, _Out_ PROPERTYKEY *pkey)
Definition: prop.cpp:60
PROPERTYKEY * REFPROPERTYKEY
Definition: propsys.idl:40
#define REFIID
Definition: guiddef.h:118
static HRESULT SHELL_SysAllocString(PCWSTR in, BSTR *out)
Definition: shell32_main.h:262
#define SHGDFIL_FINDDATA
Definition: shlobj.h:1468
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41
const ITEMID_CHILD UNALIGNED * PCUITEMID_CHILD
Definition: shtypes.idl:70
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
Definition: shtypes.idl:42
#define _countof(array)
Definition: sndvol32.h:70
#define TRACE(s)
Definition: solgame.cpp:4
Definition: fci.c:116
const uint16_t * PCWSTR
Definition: typedefs.h:57
uint32_t ULONG
Definition: typedefs.h:59
#define MAXSHORT
Definition: umtypes.h:114
INT WINAPI DosDateTimeToVariantTime(USHORT wDosDate, USHORT wDosTime, double *pDateOut)
Definition: variant.c:1188
HRESULT WINAPI DECLSPEC_HOTPATCH VariantChangeType(VARIANTARG *pvargDest, const VARIANTARG *pvargSrc, USHORT wFlags, VARTYPE vt)
Definition: variant.c:939
HRESULT WINAPI DECLSPEC_HOTPATCH VariantClear(VARIANTARG *pVarg)
Definition: variant.c:626
HRESULT WINAPI VariantCopyInd(VARIANT *pvargDest, const VARIANTARG *pvargSrc)
Definition: variant.c:823
HICON HCURSOR
Definition: windef.h:99
#define S_FALSE
Definition: winerror.h:3451
#define ERROR_NO_DATA
Definition: winerror.h:406
static HRESULT HRESULT_FROM_WIN32(unsigned int x)
Definition: winerror.h:210
#define E_UNEXPECTED
Definition: winerror.h:3528
#define E_POINTER
Definition: winerror.h:3480
#define SW_SHOWNORMAL
Definition: winuser.h:781
HMENU WINAPI CreatePopupMenu(void)
Definition: menu.c:838
UINT WINAPI GetMenuDefaultItem(_In_ HMENU hMenu, _In_ UINT fByPos, _In_ UINT gmdiFlags)
HCURSOR WINAPI SetCursor(_In_opt_ HCURSOR)
HCURSOR WINAPI LoadCursorW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
Definition: cursoricon.c:2474
#define MAKEINTRESOURCEA(i)
Definition: winuser.h:581
BOOL WINAPI DestroyMenu(_In_ HMENU)
#define IDC_WAIT
Definition: winuser.h:697
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
_In_opt_ PVOID _Out_ PLARGE_INTEGER Cookie
Definition: cmfuncs.h:14
#define IID_PPV_ARG(Itype, ppType)
#define IID_NULL_PPV_ARG(Itype, ppType)