ReactOS 0.4.16-dev-527-gdad3a09
folder.cpp
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS CabView Shell Extension
3 * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
4 * PURPOSE: Shell folder implementation
5 * COPYRIGHT: Copyright 2024 Whindmar Saksit <whindsaks@proton.me>
6 */
7
8#include "cabview.h"
9#include "util.h"
10
12{
13 COL_NAME, // PKEY_ItemNameDisplay
14 COL_SIZE, // PKEY_Size
15 COL_TYPE, // PKEY_ItemTypeText
16 COL_MDATE, // PKEY_DateModified
17 COL_PATH, // PKEY_?: Archive-relative path
18 COL_ATT, // PKEY_FileAttributes
20};
21
22static const struct FOLDERCOLUMN
23{
28 const GUID *pkg;
30} g_Columns[] =
31{
38};
39
40#include <pshpack1.h>
41struct CABITEM
42{
44 WORD Unknown; // Not sure what Windows uses this for, we always store 0
46 WORD Date, Time; // DOS
50
51#if FLATFOLDER
52 inline bool IsFolder() const { return false; }
53#else
54 inline BOOL IsFolder() const { return Attrib & FILE_ATTRIBUTE_DIRECTORY; }
55#endif
58 WORD GetFSAttributes() const { return Attrib & FSATTS; }
59 LPCWSTR GetName() const { return Path + NameOffset; }
60
61 template<class PIDL> static CABITEM* Validate(PIDL pidl)
62 {
63 CABITEM *p = (CABITEM*)pidl;
64 return p && p->cb > FIELD_OFFSET(CABITEM, Path[1]) && p->Unknown == 0 ? p : NULL;
65 }
66};
67#include <poppack.h>
68
69static CABITEM* CreateItem(LPCWSTR Path, UINT Attrib, UINT Size, UINT DateTime)
70{
72 if (cb > 0xffff)
73 return NULL;
74 CABITEM *p = (CABITEM*)SHAlloc(cb + sizeof(USHORT));
75 if (p)
76 {
77 p->cb = (USHORT)cb;
78 p->Unknown = 0;
79 p->Size = Size;
80 p->Attrib = Attrib;
81 p->Date = HIWORD(DateTime);
82 p->Time = LOWORD(DateTime);
83 p->NameOffset = 0;
84 for (UINT i = 0;; ++i)
85 {
86 WCHAR c = Path[i];
87 if (c == L':') // Don't allow absolute paths
88 c = L'_';
89 if (c == L'/') // Normalize
90 c = L'\\';
91 if (c == '\\')
92 p->NameOffset = i + 1;
93 p->Path[i] = c;
94 if (!c)
95 break;
96 }
97 ((SHITEMID*)((BYTE*)p + cb))->cb = 0;
98 }
99 return p;
100}
101
102static CABITEM* CreateItem(LPCSTR Path, UINT Attrib, UINT Size = 0, UINT DateTime = 0)
103{
104 WCHAR buf[MAX_PATH * 2];
105 UINT codepage = (Attrib & _A_NAME_IS_UTF) ? CP_UTF8 : CP_ACP;
107 return CreateItem(buf, Attrib, Size, DateTime);
108 return NULL;
109}
110
113{
114 enum { IDC_EXTRACT, IDC_EXTRACTALL };
116 const BOOL Background = !pdtobj;
117
118 switch (uMsg)
119 {
121 {
122 *((UINT*)lParam) = wParam | CMF_NOVERBS | (Background ? 0 : CMF_VERBSONLY);
123 return S_OK;
124 }
125
127 {
128 QCMINFO &qcmi = *(QCMINFO*)lParam;
129 UINT pos = qcmi.indexMenu, id = 0;
130 if (Background || SUCCEEDED(hr = InsertMenuItem(qcmi, pos, id, IDC_EXTRACT, IDS_EXTRACT, MFS_DEFAULT)))
131 {
132 hr = InsertMenuItem(qcmi, pos, id, IDC_EXTRACTALL, IDS_EXTRACTALL);
133 if (SUCCEEDED(hr) && !Background)
134 {
135 --pos;
136 InsertMenuItem(qcmi, pos, id, 0, -1); // Separator
137 }
138 }
139 if (SUCCEEDED(hr))
140 {
141 qcmi.idCmdFirst = id + 1;
142 hr = S_FALSE; // Don't add verbs
143 }
144 break;
145 }
146
148 {
149 hr = S_FALSE;
150 CCabFolder *pCabFolder = static_cast<CCabFolder*>(psf);
151 switch (wParam)
152 {
153 case IDC_EXTRACT:
154 case IDC_EXTRACTALL:
155 hr = pCabFolder->ExtractFilesUI(hwnd, wParam == IDC_EXTRACT ? pdtobj : NULL);
156 break;
157 }
158 break;
159 }
160 }
161 return hr;
162}
163
165 IDataObject *pdtobj, UINT uMsg,
167{
168 return ItemMenuCallback(psf, hwnd, NULL, uMsg, wParam, lParam);
169}
170
172{
173 CABITEM *needle = (CABITEM*)pidl;
174 for (ULONG i = 0, c = GetCount(); i < c; ++i)
175 {
177 if (!lstrcmpiW(needle->Path, item->Path))
178 return i;
179 }
180 return -1;
181}
182
184{
187};
188
190{
192
193 switch ((UINT)msg)
194 {
195 case ECM_FILE:
196 {
197 const FDINOTIFICATION &fdin = *ecd.pfdin;
200 if (IncludeInEnumIDList(data.ContF, attr))
201 {
202 UINT datetime = MAKELONG(fdin.time, fdin.date);
203 CABITEM *item = CreateItem(fdin.psz1, fdin.attribs, fdin.cb, datetime);
204 if (!item)
205 return E_OUTOFMEMORY;
206 if (FAILED(hr = data.pEIDL->Append((LPCITEMIDLIST)item)))
207 SHFree(item);
208 }
209 return SUCCEEDED(hr) ? S_FALSE : hr; // Never extract
210 }
211 }
212 return E_NOTIMPL;
213}
214
216{
217 FILLCALLBACKDATA data = { this, contf };
219}
220
222{
224 if (SHGetPathFromIDListW(pidl, path))
225 return Fill(path, hwnd, contf);
227}
228
230{
231 if (pSort)
232 *pSort = COL_NAME;
233 if (pDisplay)
234 *pDisplay = COL_NAME;
235 return S_OK;
236}
237
239{
240 if (!pcsFlags || iColumn >= _countof(g_Columns))
241 return E_INVALIDARG;
242 *pcsFlags = g_Columns[iColumn].ColFlags;
243 return S_OK;
244}
245
247{
249 if (!item || !pName)
250 return E_INVALIDARG;
251
253 {
255 return StrTo(FLATFOLDER ? item->Path : item->GetName(), *pName);
256
259 return E_FAIL;
260 UINT cch = lstrlenW(parent) + 1 + lstrlenW(item->Path) + 1;
261 pName->uType = STRRET_WSTR;
262 pName->pOleStr = (LPWSTR)SHAlloc(cch * sizeof(WCHAR));
263 if (!pName->pOleStr)
264 return E_OUTOFMEMORY;
265 lstrcpyW(pName->pOleStr, parent);
266 PathAppendW(pName->pOleStr, item->Path);
267 return S_OK;
268 }
269
270 SHFILEINFO fi;
271 DWORD attr = item->IsFolder() ? FILE_ATTRIBUTE_DIRECTORY : 0;
273 if (SHGetFileInfo(item->GetName(), attr, &fi, sizeof(fi), flags))
274 return StrTo(fi.szDisplayName, *pName);
275 return StrTo(item->GetName(), *pName);
276}
277
279{
280 HRESULT hr = E_FAIL;
281 STRRET *psr = &psd->str, srvar;
283 if (!item)
284 return E_INVALIDARG;
285
286 switch (iColumn)
287 {
288 case COL_NAME:
289 {
290 hr = GetDisplayNameOf(pidl, SHGDN_NORMAL | SHGDN_INFOLDER, pv ? &srvar : psr);
291 return SUCCEEDED(hr) && pv ? StrRetToVariantBSTR(&srvar, *pv) : hr;
292 }
293
294 case COL_SIZE:
295 {
296 UINT data = item->Size;
297 if (pv)
298 {
299 V_VT(pv) = VT_UI4;
300 V_UI4(pv) = data;
301 }
302 else
303 {
304 psr->uType = STRRET_CSTR;
306 }
307 return S_OK;
308 }
309
310 case COL_TYPE:
311 {
312 SHFILEINFO fi;
314 DWORD attr = item->GetFSAttributes();
316 if (SHGetFileInfo(item->GetName(), attr, &fi, sizeof(fi), flags))
317 return pv ? StrTo(data, *pv) : StrTo(data, *psr);
318 break;
319 }
320
321 case COL_MDATE:
322 {
323 if (pv)
324 {
325 if (DosDateTimeToVariantTime(item->Date, item->Time, &V_DATE(pv)))
326 {
327 V_VT(pv) = VT_DATE;
328 return S_OK;
329 }
330 }
331 else
332 {
333 FILETIME utc, loc;
334 if (DosDateTimeToFileTime(item->Date, item->Time, &utc) && FileTimeToLocalFileTime(&utc, &loc))
335 {
336 psr->uType = STRRET_CSTR;
337 if (SHFormatDateTimeA(&loc, NULL, psr->cStr, _countof(psr->cStr)))
338 {
339 return S_OK;
340 }
341 }
342 }
343 break;
344 }
345
346 case COL_PATH:
347 {
348 UINT len = item->NameOffset ? item->NameOffset - 1 : 0;
349 return pv ? StrTo(item->Path, len, *pv) : StrTo(item->Path, len, *psr);
350 }
351
352 case COL_ATT:
353 {
354 UINT data = item->GetFSAttributes();
355 if (pv)
356 {
357 V_VT(pv) = VT_UI4;
358 V_UI4(pv) = data;
359 }
360 else
361 {
362 UINT i = 0;
363 psr->uType = STRRET_CSTR;
364 if (data & FILE_ATTRIBUTE_READONLY) psr->cStr[i++] = 'R';
365 if (data & FILE_ATTRIBUTE_HIDDEN) psr->cStr[i++] = 'H';
366 if (data & FILE_ATTRIBUTE_SYSTEM) psr->cStr[i++] = 'S';
367 if (data & FILE_ATTRIBUTE_ARCHIVE) psr->cStr[i++] = 'A';
368 psr->cStr[i++] = '\0';
369 }
370 return S_OK;
371 }
372 }
373 return hr;
374}
375
377{
378 if (!pscid || !pv)
379 return E_INVALIDARG;
380
381 CABITEM *item;
382 int col = MapSCIDToColumn(*pscid);
383 if (col >= 0)
384 {
385 return GetItemDetails(pidl, col, NULL, pv);
386 }
387 else if ((item = CABITEM::Validate(pidl)) == NULL)
388 {
389 return E_INVALIDARG;
390 }
391 else if (IsEqual(*pscid, FMTID_ShellDetails, PID_FINDDATA))
392 {
393 WIN32_FIND_DATA wfd;
394 ZeroMemory(&wfd, sizeof(wfd));
395 wfd.dwFileAttributes = item->GetFSAttributes();
396 wfd.nFileSizeLow = item->Size;
397 DosDateTimeToFileTime(item->Date, item->Time, &wfd.ftLastWriteTime);
398 lstrcpyn(wfd.cFileName, item->GetName(), MAX_PATH);
399 return InitVariantFromBuffer(&wfd, sizeof(wfd), pv);
400 }
401 return E_FAIL;
402}
403
405{
406 if (!psd || iColumn >= _countof(g_Columns))
407 {
408 return E_INVALIDARG;
409 }
410 else if (!pidl)
411 {
412 psd->fmt = g_Columns[iColumn].LvcFmt;
413 psd->cxChar = g_Columns[iColumn].LvcChars;
415 if (LoadStringW(_AtlBaseModule.GetResourceInstance(), g_Columns[iColumn].TextId, buf, _countof(buf)))
416 return StrTo(buf, psd->str);
417 return E_FAIL;
418 }
419 return GetItemDetails(pidl, iColumn, psd, NULL);
420}
421
423{
424 for (UINT i = 0; i < _countof(g_Columns); ++i)
425 {
426 if (g_Columns[i].pkg && IsEqual(scid, *g_Columns[i].pkg, g_Columns[i].pki))
427 return i;
428 }
429 return -1;
430}
431
433{
435 {
436 pscid->fmtid = *g_Columns[column].pkg;
437 pscid->pid = g_Columns[column].pki;
438 return S_OK;
439 }
440 return E_FAIL;
441}
442
443IFACEMETHODIMP CCabFolder::EnumObjects(HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST *ppEnumIDList)
444{
446 *ppEnumIDList = static_cast<LPENUMIDLIST>(p);
447 return p ? p->Fill(m_CurDir, hwndOwner, dwFlags) : E_OUTOFMEMORY;
448}
449
451{
453 return E_NOTIMPL;
454}
455
457{
458 CABITEM *p1 = (CABITEM*)pidl1, *p2 = (CABITEM*)pidl2;
459 HRESULT hr = S_OK;
460 int ret = 0;
461
463 {
464 ret = lstrcmpiW(p1->Path, p2->Path);
465 if (ret && (lParam & SHCIDS_ALLFIELDS))
466 {
467 for (UINT i = 0; ret && SUCCEEDED(hr) && i < COLCOUNT; ++i)
468 {
469 hr = (i == COL_NAME) ? 0 : CompareID(i, pidl1, pidl2);
471 }
472 }
473 }
474 else
475 {
476 UINT col = lParam & SHCIDS_COLUMNMASK;
477 switch (col)
478 {
479 case COL_NAME:
480 ret = StrCmpLogicalW(p1->GetName(), p2->GetName());
481 break;
482
483 case COL_SIZE:
484 ret = p1->Size - p2->Size;
485 break;
486
487 case COL_MDATE:
488 ret = MAKELONG(p1->Time, p1->Date) - MAKELONG(p2->Time, p2->Date);
489 break;
490
491 default:
492 {
493 if (col < COLCOUNT)
494 {
495 PWSTR str1, str2;
496 if (SUCCEEDED(hr = ::GetDetailsOf(*this, pidl1, col, str1)))
497 {
498 if (SUCCEEDED(hr = ::GetDetailsOf(*this, pidl2, col, str2)))
499 {
500 ret = StrCmpLogicalW(str1, str2);
501 SHFree(str2);
502 }
503 SHFree(str1);
504 }
505 }
506 else
507 {
509 }
510 }
511 }
512 }
514}
515
517{
519 if (!pidl1 || !ILIsSingle(pidl1) || !pidl2 || !ILIsSingle(pidl2))
520 return E_UNEXPECTED;
521
522 return CompareID(lParam, pidl1, pidl2);
523}
524
526{
527 if (riid == IID_IShellView)
528 {
529 SFV_CREATE sfvc = { sizeof(SFV_CREATE), static_cast<IShellFolder*>(this) };
530 return SHCreateShellFolderView(&sfvc, (IShellView**)ppv);
531 }
532 if (riid == IID_IContextMenu)
533 {
535 IContextMenu **ppCM = (IContextMenu**)ppv;
536 return CDefFolderMenu_Create2(m_CurDir, hwndOwner, 0, NULL, this, func, 0, NULL, ppCM);
537 }
538 return E_NOINTERFACE;
539}
540
542{
543 if (!cidl)
544 {
545 const SFGAOF ThisFolder = (SFGAO_FOLDER | SFGAO_BROWSABLE | SFGAO_CANLINK);
546 *rgfInOut = *rgfInOut & ThisFolder;
547 return S_OK;
548 }
549 else if (!apidl)
550 {
551 return E_INVALIDARG;
552 }
553 HRESULT hr = S_OK;
554 const SFGAOF filemask = SFGAO_READONLY | SFGAO_HIDDEN | SFGAO_SYSTEM | SFGAO_ISSLOW;
555 SFGAOF remain = *rgfInOut & filemask, validate = *rgfInOut & SFGAO_VALIDATE;
556 CComPtr<CEnumIDList> list;
557 for (UINT i = 0; i < cidl && (remain || validate); ++i)
558 {
559 CABITEM *item = CABITEM::Validate(apidl[i]);
560 if (!item)
561 {
563 break;
564 }
565 else if (validate)
566 {
568 return hr;
569 if (list->FindNamedItem((PCUITEMID_CHILD)item) == -1)
571 }
572 SFGAOF att = MapFSToSFAttributes(item->GetFSAttributes()) | SFGAO_ISSLOW;
573 remain &= att & ~(FLATFOLDER ? SFGAO_FOLDER : 0);
574 }
575 *rgfInOut = remain;
576 return hr;
577}
578
580{
582 if (riid == IID_IExtractIconA || riid == IID_IExtractIconW)
583 {
584 if (cidl != 1)
585 return E_INVALIDARG;
586 CABITEM *item = CABITEM::Validate(apidl[0]);
587 if (!item)
588 return E_INVALIDARG;
589
590 DWORD attr = item->GetFSAttributes();
591 return SHCreateFileExtractIconW(item->GetName(), attr, riid, ppvOut);
592 }
593 else if (riid == IID_IContextMenu && cidl)
594 {
596 IContextMenu **ppCM = (IContextMenu**)ppvOut;
597 return CDefFolderMenu_Create2(NULL, hwndOwner, cidl, apidl, this, func, 0, NULL, ppCM);
598 }
599 else if (riid == IID_IDataObject && cidl)
600 {
601 // Note: This IDataObject is only compatible with IContextMenu, it cannot handle drag&drop of virtual items!
602 return CIDLData_CreateFromIDArray(m_CurDir, cidl, apidl, (IDataObject**)ppvOut);
603 }
604 return hr;
605}
606
608{
609 switch (uMsg)
610 {
613 return S_OK;
616 return S_OK;
617 }
618 return E_NOTIMPL;
619}
620
622{
623 if (CABITEM *item = CABITEM::Validate(pidl))
624 {
625 int index = MapPIDLToSystemImageListIndex(this, pidl, flags);
626 if (index == -1 && item->IsFolder())
627 index = (flags & GIL_OPENICON) ? SIID_FOLDEROPEN : SIID_FOLDER;
628 if (index != -1)
629 {
630 *pIconIndex = index;
631 return S_OK;
632 }
633 }
634 return S_FALSE;
635}
636
638{
639 BOOL ret = SHGetPathFromIDListW(pidl, pszPath);
640 if (!ret && ILIsEmpty(pidl))
643}
644
646{
648 switch (uMsg)
649 {
650 case BFFM_INITIALIZED:
651 {
652 if (LoadStringW(_AtlBaseModule.GetResourceInstance(), IDS_EXTRACT, buf, _countof(buf)))
653 {
654 // Remove leading and trailing dots
655 WCHAR *s = buf, *e = s + lstrlenW(s);
656 while (*s == '.') ++s;
657 while (e > s && e[-1] == '.') *--e = UNICODE_NULL;
660 }
661 if (lpData)
662 {
665 }
666 break;
667 }
668
669 case BFFM_SELCHANGED:
670 {
671 SFGAOF wanted = SFGAO_FILESYSTEM | SFGAO_FOLDER, query = wanted | SFGAO_STREAM;
673 BOOL enable = ILIsEmpty(pidl); // Allow the desktop
675 IShellFolder *pSF;
677 {
678 SFGAOF attrib = query;
679 if (SUCCEEDED(pSF->GetAttributesOf(1, &child, &attrib)))
680 enable = (attrib & query) == wanted;
681 pSF->Release();
682 }
683 if (enable)
684 {
685 // We don't trust .zip folders, check the file-system to make sure
688 }
690 break;
691 }
692 }
693 return 0;
694}
695
697{
701 STGMEDIUM cidamedium;
704 IProgressDialog *pPD;
707};
708
710{
711 HWND hWnd;
713 return hWnd;
714 return IsWindowVisible(data.hWndOwner) ? data.hWndOwner : NULL;
715}
716
718{
720 switch ((UINT)msg)
721 {
722 case ECM_BEGIN:
723 {
724 data.cabfiles = (UINT)(SIZE_T)ecd.pfdin->hf;
725 return S_OK;
726 }
727
728 case ECM_FILE:
729 {
730 if (data.pPD && data.pPD->HasUserCancelled())
732 HRESULT hr = data.pCIDA ? S_FALSE : S_OK; // Filtering or all items?
733 if (hr != S_OK)
734 {
735 CABITEM *needle = CreateItem(ecd.pfdin->psz1, ecd.pfdin->attribs);
736 if (!needle)
737 return E_OUTOFMEMORY;
738 for (UINT i = 0; i < data.pCIDA->cidl && hr == S_FALSE; ++i)
739 {
741 LPCITEMIDLIST pidlChild = ILFindLastID(HIDA_GetPIDLItem(data.pCIDA, i));
742 CABITEM *haystack = CABITEM::Validate(pidlChild);
744 break;
745 if (!lstrcmpiW(needle->Path, haystack->Path))
746 {
747 if (data.pPD)
748 data.pPD->SetLine(1, needle->Path, TRUE, NULL);
749 hr = S_OK; // Found it in the list of files to extract
750 }
751 }
752 SHFree(needle);
753 }
754 if (data.pPD)
755 data.pPD->SetProgress(data.completed++, data.cabfiles);
756 return hr;
757 }
758
759 case ECM_PREPAREPATH:
760 {
763 }
764
765 case ECM_ERROR:
766 {
767 return ErrorBox(GetUiOwner(data), ecd.hr);
768 }
769 }
770 return E_NOTIMPL;
771}
772
774{
775 if (data.pPD)
776 {
777 data.pPD->StopProgressDialog();
778 data.pPD->Release();
779 }
780 CDataObjectHIDA::DestroyCIDA(data.pCIDA, data.cidamedium);
781 IUnknown_Set((IUnknown**)&data.pDO, NULL);
782 IUnknown_Set((IUnknown**)&data.pMarshalDO, NULL);
783 IUnknown_Set((IUnknown**)&data.pLifetimeCF, NULL);
784 SHFree(&data);
785}
786
788{
790 HRESULT hr = S_OK;
791 if (SUCCEEDED(SHCoCreateInstance(NULL, &CLSID_ProgressDialog, NULL, IID_PPV_ARG(IProgressDialog, &data.pPD))))
792 {
793 // TODO: IActionProgress SPACTION_COPYING
794 if (SUCCEEDED(data.pPD->StartProgressDialog(data.hWndOwner, NULL, PROGDLG_NOTIME, NULL)))
795 {
796 data.pPD->SetTitle(data.cab);
797 data.pPD->SetLine(2, data.path, TRUE, NULL);
798 data.pPD->SetAnimation(GetModuleHandleW(L"SHELL32"), 161);
799 data.pPD->SetProgress(0, 0);
800 }
801 }
802 if (data.pMarshalDO)
803 {
805 data.pMarshalDO = NULL;
806 if (SUCCEEDED(hr))
807 hr = CDataObjectHIDA::CreateCIDA(data.pDO, &data.pCIDA, data.cidamedium);
808 }
809 if (SUCCEEDED(hr))
810 {
812 }
813 Free(data);
814 return 0;
815}
816
818{
821
823 if (!pData)
824 return E_OUTOFMEMORY;
825 ZeroMemory(pData, sizeof(*pData));
826 pData->hWndOwner = hWnd;
827 pData->pLifetimeCF = this;
828 pData->pLifetimeCF->AddRef();
829
831 if (SUCCEEDED(hr) && pDO)
832 {
834 }
835 if (SUCCEEDED(hr))
836 {
838 LPITEMIDLIST pidlInitial = ILClone(m_CurDir);
839 ILRemoveLastID(pidlInitial); // Remove the "name.cab" part (we can't extract into ourselves)
841 BROWSEINFO bi = { hWnd, NULL, NULL, pData->cab, bif, FolderBrowseCallback, (LPARAM)pidlInitial };
843 {
845 ILFree(folder);
846 if (SUCCEEDED(hr))
847 {
850 }
851 }
852 ILFree(pidlInitial);
853 }
854 if (hr != S_OK)
855 Free(*pData);
857}
HRESULT WINAPI SHCreateShellFolderView(const SFV_CREATE *pcsfv, IShellView **ppsv)
Definition: CDefView.cpp:4675
HRESULT WINAPI CDefFolderMenu_Create2(PCIDLIST_ABSOLUTE pidlFolder, HWND hwnd, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, IShellFolder *psf, LPFNDFMCALLBACK lpfn, UINT nKeys, const HKEY *ahkeyClsKeys, IContextMenu **ppcm)
EXTERN_C HRESULT WINAPI SHCreateFileExtractIconW(_In_ LPCWSTR pszFile, _In_ DWORD dwFileAttributes, _In_ REFIID riid, _Outptr_ void **ppv)
#define SHCIDS_ALLFIELDS
Definition: CFontExt.cpp:15
#define SFVM_WINDOWCLOSING
PRTL_UNICODE_STRING_BUFFER Path
#define msg(x)
Definition: auth_time.c:54
HWND hWnd
Definition: settings.c:17
#define IDS_COL_TYPE
Definition: resource.h:9
#define index(s, c)
Definition: various.h:29
#define UNIMPLEMENTED
Definition: ntoskrnl.c:15
EXTERN_C LPITEMIDLIST WINAPI SHBrowseForFolderW(LPBROWSEINFOW lpbi)
Definition: brfolder.cpp:1370
HRESULT ExtractCabinet(LPCWSTR cab, LPCWSTR destination, EXTRACTCALLBACK callback, LPVOID cookie)
Definition: extract.cpp:189
EXTERN_C const GUID CLSID_CabFolder
Definition: cabview.h:14
#define FLATFOLDER
Definition: cabview.h:12
EXTRACTCALLBACKMSG
Definition: cabview.h:16
@ ECM_ERROR
Definition: cabview.h:16
@ ECM_BEGIN
Definition: cabview.h:16
@ ECM_FILE
Definition: cabview.h:16
@ ECM_PREPAREPATH
Definition: cabview.h:16
IFACEMETHODIMP CompareIDs(LPARAM lParam, PCUIDLIST_RELATIVE pidl1, PCUIDLIST_RELATIVE pidl2) override
Definition: folder.cpp:516
HRESULT CompareID(LPARAM lParam, PCUITEMID_CHILD pidl1, PCUITEMID_CHILD pidl2)
Definition: folder.cpp:456
int MapSCIDToColumn(const SHCOLUMNID &scid)
Definition: folder.cpp:422
IFACEMETHODIMP GetDefaultColumn(DWORD dwRes, ULONG *pSort, ULONG *pDisplay) override
Definition: folder.cpp:229
IFACEMETHODIMP GetDetailsOf(PCUITEMID_CHILD pidl, UINT iColumn, SHELLDETAILS *psd) override
Definition: folder.cpp:404
CComHeapPtr< ITEMIDLIST > m_CurDir
Definition: cabview.h:125
IFACEMETHODIMP MessageSFVCB(UINT uMsg, WPARAM wParam, LPARAM lParam) override
Definition: folder.cpp:607
IFACEMETHODIMP GetDefaultColumnState(UINT iColumn, SHCOLSTATEF *pcsFlags) override
Definition: folder.cpp:238
IFACEMETHODIMP MapColumnToSCID(UINT column, SHCOLUMNID *pscid) override
Definition: folder.cpp:432
IFACEMETHODIMP GetDisplayNameOf(PCUITEMID_CHILD pidl, DWORD dwFlags, LPSTRRET pName) override
Definition: folder.cpp:246
HRESULT GetItemDetails(PCUITEMID_CHILD pidl, UINT iColumn, SHELLDETAILS *psd, VARIANT *pv)
Definition: folder.cpp:278
HRESULT CreateEnum(CEnumIDList **List)
Definition: cabview.h:134
HWND m_ShellViewWindow
Definition: cabview.h:126
IFACEMETHODIMP CreateViewObject(HWND hwndOwner, REFIID riid, LPVOID *ppvOut) override
Definition: folder.cpp:525
IFACEMETHODIMP GetUIObjectOf(HWND hwndOwner, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, REFIID riid, UINT *prgfInOut, LPVOID *ppvOut) override
Definition: folder.cpp:579
IFACEMETHODIMP EnumObjects(HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST *ppEnumIDList) override
Definition: folder.cpp:443
IFACEMETHODIMP GetIconOf(PCUITEMID_CHILD pidl, UINT flags, int *pIconIndex) override
Definition: folder.cpp:621
IFACEMETHODIMP BindToObject(PCUIDLIST_RELATIVE pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut) override
Definition: folder.cpp:450
HRESULT ExtractFilesUI(HWND hWnd, IDataObject *pDO)
Definition: folder.cpp:817
IFACEMETHODIMP GetDetailsEx(PCUITEMID_CHILD pidl, const SHCOLUMNID *pscid, VARIANT *pv) override
Definition: folder.cpp:376
IFACEMETHODIMP GetAttributesOf(UINT cidl, PCUITEMID_CHILD_ARRAY apidl, SFGAOF *rgfInOut) override
Definition: folder.cpp:541
HRESULT Fill(LPCWSTR path, HWND hwnd=NULL, SHCONTF contf=0)
Definition: folder.cpp:215
static CEnumIDList * CreateInstance()
Definition: cabview.h:102
UINT GetCount() const
Definition: cabview.h:60
HDPA m_Items
Definition: cabview.h:31
int FindNamedItem(PCUITEMID_CHILD pidl) const
Definition: folder.cpp:171
Definition: list.h:37
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
#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
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
EXTERN_C INT WINAPI SHFormatDateTimeA(const FILETIME UNALIGNED *fileTime, DWORD *flags, LPSTR buf, UINT size)
Definition: ordinal.c:5313
#define SFGAO_SYSTEM
Definition: shobjidl.idl:198
#define SIID_FOLDEROPEN
Definition: precomp.h:31
#define SIID_FOLDER
Definition: precomp.h:30
#define IDS_EXTRACT
Definition: resource.h:24
#define IDS_EXTRACTALL
Definition: resource.h:25
#define IDS_COL_MDATE
Definition: resource.h:20
#define IDS_COL_NAME
Definition: resource.h:17
#define IDS_COL_ATT
Definition: resource.h:22
#define IDS_COL_SIZE
Definition: resource.h:18
#define IDS_COL_PATH
Definition: resource.h:21
bool IncludeInEnumIDList(SHCONTF contf, SFGAOF att)
Definition: util.h:131
HRESULT StrTo(LPCWSTR str, UINT len, STRRET &sr)
Definition: util.h:49
SFGAOF MapFSToSFAttributes(UINT att)
Definition: util.h:124
HRESULT StrRetToVariantBSTR(STRRET *psr, VARIANT &v)
Definition: util.h:80
int MapPIDLToSystemImageListIndex(IShellFolder *pSF, PCUITEMID_CHILD pidl, UINT GilFlags=0)
Definition: util.h:150
HRESULT InitVariantFromBuffer(const void *buffer, UINT cb, VARIANT *pv)
Definition: util.h:26
#define SHCIDS_CANONICALONLY
Definition: precomp.h:50
#define DFM_MERGECONTEXTMENU
Definition: precomp.h:44
#define DFM_INVOKECOMMAND
Definition: precomp.h:45
#define CP_ACP
Definition: compat.h:109
HANDLE HWND
Definition: compat.h:19
#define MAX_PATH
Definition: compat.h:34
#define CALLBACK
Definition: compat.h:35
#define lstrcpyW
Definition: compat.h:749
#define MultiByteToWideChar
Definition: compat.h:110
@ VT_DATE
Definition: compat.h:2302
@ VT_UI4
Definition: compat.h:2313
#define lstrlenW
Definition: compat.h:750
#define FAILED_UNEXPECTEDLY(hr)
Definition: precomp.h:121
static DOUBLE utc(DOUBLE time, DateInstance *date)
Definition: date.c:357
DWORD WINAPI GetFileAttributesW(LPCWSTR lpFileName)
Definition: fileinfo.c:652
HMODULE WINAPI GetModuleHandleW(LPCWSTR lpModuleName)
Definition: loader.c:838
BOOL WINAPI FileTimeToLocalFileTime(IN CONST FILETIME *lpFileTime, OUT LPFILETIME lpLocalFileTime)
Definition: time.c:221
BOOL WINAPI DosDateTimeToFileTime(IN WORD wFatDate, IN WORD wFatTime, OUT LPFILETIME lpFileTime)
Definition: time.c:75
int WINAPI lstrcmpiW(LPCWSTR str1, LPCWSTR str2)
Definition: locale.c:4262
HRESULT WINAPI CoMarshalInterThreadInterfaceInStream(REFIID riid, LPUNKNOWN pUnk, LPSTREAM *ppStm)
Definition: marshal.c:2100
HRESULT WINAPI CoGetInterfaceAndReleaseStream(LPSTREAM pStm, REFIID riid, LPVOID *ppv)
Definition: marshal.c:2144
void WINAPI SHFree(LPVOID pv)
Definition: shellole.c:326
LPVOID WINAPI SHAlloc(SIZE_T len)
Definition: shellole.c:304
HRESULT WINAPI SHCoCreateInstance(LPCWSTR aclsid, const CLSID *clsid, LPUNKNOWN pUnkOuter, REFIID refiid, LPVOID *ppv)
Definition: shellole.c:105
BOOL WINAPI SHGetSpecialFolderPathW(HWND hwndOwner, LPWSTR szPath, int nFolder, BOOL bCreate)
Definition: shellpath.c:3092
VOID WINAPI IUnknown_Set(IUnknown **lppDest, IUnknown *lpUnknown)
Definition: ordinal.c:2190
HRESULT WINAPI IUnknown_GetWindow(IUnknown *lpUnknown, HWND *lphWnd)
Definition: ordinal.c:1336
INT WINAPI StrCmpLogicalW(LPCWSTR lpszStr, LPCWSTR lpszComp)
Definition: string.c:2310
LPSTR WINAPI StrFormatByteSizeA(DWORD dwBytes, LPSTR lpszDest, UINT cchMax)
Definition: string.c:2530
BOOL WINAPI SHCreateThread(LPTHREAD_START_ROUTINE pfnThreadProc, VOID *pData, DWORD dwFlags, LPTHREAD_START_ROUTINE pfnCallback)
Definition: thread.c:356
unsigned short(__cdecl typeof(TIFFCurrentDirectory))(struct tiff *)
Definition: typeof.h:94
r parent
Definition: btrfs.c:3010
static IShellFolder IShellItem **static IBindCtx LPITEMIDLIST SFGAOF
Definition: ebrowser.c:83
@ IsEqual
Definition: fatprocs.h:1887
#define _A_NAME_IS_UTF
Definition: fci.h:131
static FRESULT validate(void *obj)
Definition: ff.c:2372
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
unsigned short WORD
Definition: ntddk_ex.h:93
static HWND GetUiOwner(const EXTRACTFILESDATA &data)
Definition: folder.cpp:709
static HRESULT CALLBACK ItemMenuCallback(IShellFolder *psf, HWND hwnd, IDataObject *pdtobj, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: folder.cpp:111
static CABITEM * CreateItem(LPCWSTR Path, UINT Attrib, UINT Size, UINT DateTime)
Definition: folder.cpp:69
FOLDERCOLUMNS
Definition: folder.cpp:12
@ COL_NAME
Definition: folder.cpp:13
@ COLCOUNT
Definition: folder.cpp:19
@ COL_ATT
Definition: folder.cpp:18
@ COL_MDATE
Definition: folder.cpp:16
@ COL_TYPE
Definition: folder.cpp:15
@ COL_SIZE
Definition: folder.cpp:14
@ COL_PATH
Definition: folder.cpp:17
static HRESULT CALLBACK FolderBackgroundMenuCallback(IShellFolder *psf, HWND hwnd, IDataObject *pdtobj, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: folder.cpp:164
static HRESULT CALLBACK EnumFillCallback(EXTRACTCALLBACKMSG msg, const EXTRACTCALLBACKDATA &ecd, LPVOID cookie)
Definition: folder.cpp:189
static const struct FOLDERCOLUMN g_Columns[]
static int CALLBACK FolderBrowseCallback(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
Definition: folder.cpp:645
static HRESULT GetFsPathFromIDList(PCIDLIST_ABSOLUTE pidl, PWSTR pszPath)
Definition: folder.cpp:637
static DWORD CALLBACK ExtractFilesThread(LPVOID pParam)
Definition: folder.cpp:787
static HRESULT CALLBACK ExtractFilesCallback(EXTRACTCALLBACKMSG msg, const EXTRACTCALLBACKDATA &ecd, LPVOID cookie)
Definition: folder.cpp:717
static UINT ErrorBox(UINT Error=GetLastError())
Definition: geninst.cpp:177
GLdouble s
Definition: gl.h:2039
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLenum func
Definition: glext.h:6028
const GLubyte * c
Definition: glext.h:8905
GLuint index
Definition: glext.h:6031
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
GLbitfield flags
Definition: glext.h:7161
GLfloat GLfloat p
Definition: glext.h:8902
GLboolean enable
Definition: glext.h:11120
GLenum GLsizei len
Definition: glext.h:6722
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
ULONG SFGAOF
Definition: shobjidl.idl:222
HRESULT GetAttributesOf([in] UINT cidl, [in, size_is(cidl)] PCUITEMID_CHILD_ARRAY apidl, [in, out] SFGAOF *rgfInOut)
ULONG Release()
nsrefcnt AddRef()
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FAILED(hr)
Definition: intsafe.h:51
#define C_ASSERT(e)
Definition: intsafe.h:73
#define e
Definition: ke_i.h:82
#define c
Definition: ke_i.h:80
#define ERROR_FILE_NOT_FOUND
Definition: disk.h:79
static LPSTR pName
Definition: security.c:75
static DWORD DWORD void LPSTR DWORD cch
Definition: str.c:202
static HMODULE MODULEINFO DWORD cb
Definition: module.c:33
static const char haystack[]
Definition: editor.c:145
static SHCONTF
Definition: ordinal.c:64
static HWND child
Definition: cursoricon.c:298
static ATOM item
Definition: dde.c:856
unsigned int UINT
Definition: ndis.h:50
#define FILE_ATTRIBUTE_READONLY
Definition: nt_native.h:702
#define FILE_ATTRIBUTE_HIDDEN
Definition: nt_native.h:703
#define FILE_ATTRIBUTE_SYSTEM
Definition: nt_native.h:704
#define FILE_ATTRIBUTE_ARCHIVE
Definition: nt_native.h:706
#define FILE_ATTRIBUTE_DIRECTORY
Definition: nt_native.h:705
#define IFACEMETHODIMP
Definition: ntbasedef.h:157
#define UNICODE_NULL
#define PID_STG_STORAGETYPE
Definition: ntquery.h:50
#define PID_STG_WRITETIME
Definition: ntquery.h:60
#define PID_STG_SIZE
Definition: ntquery.h:58
#define PID_STG_ATTRIBUTES
Definition: ntquery.h:59
#define PID_STG_NAME
Definition: ntquery.h:56
#define L(x)
Definition: ntvdm.h:50
interface IBindCtx * LPBC
Definition: objfwd.h:18
#define V_VT(A)
Definition: oleauto.h:211
#define V_UI4(A)
Definition: oleauto.h:270
#define V_DATE(A)
Definition: oleauto.h:231
const GUID IID_IDataObject
#define PathAppendW
Definition: pathcch.h:309
#define LOWORD(l)
Definition: pedump.c:82
unsigned short USHORT
Definition: pedump.c:61
LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl)
Definition: pidl.c:237
void WINAPI ILFree(LPITEMIDLIST pidl)
Definition: pidl.c:1044
LPITEMIDLIST WINAPI ILFindLastID(LPCITEMIDLIST pidl)
Definition: pidl.c:198
BOOL WINAPI ILRemoveLastID(LPITEMIDLIST pidl)
Definition: pidl.c:221
HRESULT WINAPI SHBindToParent(LPCITEMIDLIST pidl, REFIID riid, LPVOID *ppv, LPCITEMIDLIST *ppidlLast)
Definition: pidl.c:1462
BOOL WINAPI SHGetPathFromIDListW(LPCITEMIDLIST pidl, LPWSTR pszPath)
Definition: pidl.c:1454
#define DPA_FastGetPtr(hdpa, i)
Definition: commctrl.h:4965
#define LVCFMT_LEFT
Definition: commctrl.h:2603
#define LVCFMT_RIGHT
Definition: commctrl.h:2604
#define REFIID
Definition: guiddef.h:118
#define list
Definition: rosglue.h:35
#define CP_UTF8
Definition: nls.h:20
#define SHGetFileInfo
Definition: shellapi.h:698
#define SHGFI_DISPLAYNAME
Definition: shellapi.h:167
#define SHGFI_TYPENAME
Definition: shellapi.h:168
#define SHGFI_USEFILEATTRIBUTES
Definition: shellapi.h:182
HRESULT WINAPI CIDLData_CreateFromIDArray(PCIDLIST_ABSOLUTE pidlFolder, UINT cpidlFiles, PCUIDLIST_RELATIVE_ARRAY lppidlFiles, LPDATAOBJECT *ppdataObject)
Definition: shellord.c:2418
static PCUIDLIST_RELATIVE HIDA_GetPIDLItem(CIDA const *pida, SIZE_T i)
Definition: shellutils.h:637
#define MAKE_COMPARE_HRESULT(x)
Definition: shellutils.h:619
static BOOL ILIsSingle(LPCITEMIDLIST pidl)
Definition: shellutils.h:627
EXTERN_C HRESULT WINAPI SHPathPrepareForWriteW(HWND hwnd, IUnknown *modless, LPCWSTR path, DWORD flags)
Definition: shlfileop.cpp:2237
HRESULT hr
Definition: shlfolder.c:183
#define PID_FINDDATA
Definition: shlguid.h:169
#define CSIDL_DESKTOPDIRECTORY
Definition: shlobj.h:2188
#define BFFM_SELCHANGED
Definition: shlobj.h:1237
#define BIF_RETURNONLYFSDIRS
Definition: shlobj.h:1217
#define PROGDLG_NOTIME
Definition: shlobj.h:967
#define SFVM_WINDOWCREATED
Definition: shlobj.h:1308
#define BFFM_SETEXPANDED
Definition: shlobj.h:1249
#define BFFM_ENABLEOK
Definition: shlobj.h:1244
#define SHPPFW_IGNOREFILENAME
Definition: shlobj.h:341
#define BFFM_SETSELECTION
Definition: shlobj.h:1256
#define BROWSEINFO
Definition: shlobj.h:1210
#define BIF_USENEWUI
Definition: shlobj.h:1224
#define SHPPFW_DIRCREATE
Definition: shlobj.h:338
static BOOL ILIsEmpty(_In_opt_ PCUIDLIST_RELATIVE pidl)
Definition: shlobj.h:2519
#define BFFM_INITIALIZED
Definition: shlobj.h:1236
#define DFM_MODIFYQCMFLAGS
Definition: shlobj.h:2605
struct _SFV_CREATE SFV_CREATE
HRESULT(CALLBACK * LPFNDFMCALLBACK)(_In_opt_ IShellFolder *, _In_opt_ HWND, _In_opt_ IDataObject *, UINT, WPARAM, LPARAM)
Definition: shlobj.h:2568
#define CTF_PROCESS_REF
Definition: shlwapi.h:1963
#define CTF_COINIT
Definition: shlwapi.h:1964
#define CTF_FREELIBANDEXIT
Definition: shlwapi.h:1965
#define CTF_THREAD_REF
Definition: shlwapi.h:1962
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41
@ STRRET_CSTR
Definition: shtypes.idl:87
@ STRRET_WSTR
Definition: shtypes.idl:85
const PCUITEMID_CHILD * PCUITEMID_CHILD_ARRAY
Definition: shtypes.idl:71
const ITEMIDLIST_ABSOLUTE * PCIDLIST_ABSOLUTE
Definition: shtypes.idl:62
const ITEMID_CHILD UNALIGNED * PCUITEMID_CHILD
Definition: shtypes.idl:70
@ SHCOLSTATE_TYPE_INT
Definition: shtypes.idl:122
@ SHCOLSTATE_TYPE_DATE
Definition: shtypes.idl:123
@ SHCOLSTATE_TYPE_STR
Definition: shtypes.idl:121
@ SHCOLSTATE_ONBYDEFAULT
Definition: shtypes.idl:125
const ITEMIDLIST_RELATIVE UNALIGNED * PCUIDLIST_RELATIVE
Definition: shtypes.idl:57
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
Definition: shtypes.idl:42
DWORD SHCOLSTATEF
Definition: shtypes.idl:142
#define _countof(array)
Definition: sndvol32.h:70
@ FSATTS
Definition: folder.cpp:56
LPCWSTR GetName() const
Definition: folder.cpp:59
BOOL IsFolder() const
Definition: folder.cpp:54
WORD Attrib
Definition: folder.cpp:47
UINT Size
Definition: folder.cpp:45
WORD NameOffset
Definition: folder.cpp:48
WORD Date
Definition: folder.cpp:46
WORD cb
Definition: folder.cpp:43
static CABITEM * Validate(PIDL pidl)
Definition: folder.cpp:61
WCHAR Path[ANYSIZE_ARRAY]
Definition: folder.cpp:49
WORD GetFSAttributes() const
Definition: folder.cpp:58
WORD Unknown
Definition: folder.cpp:44
WORD Time
Definition: folder.cpp:46
Definition: shlobj.h:572
const FDINOTIFICATION * pfdin
Definition: cabview.h:20
IDataObject * pDO
Definition: folder.cpp:702
IStream * pMarshalDO
Definition: folder.cpp:703
STGMEDIUM cidamedium
Definition: folder.cpp:701
IProgressDialog * pPD
Definition: folder.cpp:704
CCabFolder * pLifetimeCF
Definition: folder.cpp:698
WCHAR cab[MAX_PATH]
Definition: folder.cpp:706
USHORT time
Definition: fdi.h:236
INT_PTR hf
Definition: fdi.h:233
char * psz1
Definition: fdi.h:228
USHORT date
Definition: fdi.h:235
USHORT attribs
Definition: fdi.h:237
LONG cb
Definition: fdi.h:227
CEnumIDList * pEIDL
Definition: folder.cpp:185
SHCONTF ContF
Definition: folder.cpp:186
BYTE pki
Definition: folder.cpp:29
BYTE LvcChars
Definition: folder.cpp:26
const GUID * pkg
Definition: folder.cpp:28
BYTE ColFlags
Definition: folder.cpp:27
BYTE LvcFmt
Definition: folder.cpp:25
BYTE TextId
Definition: folder.cpp:24
STRRET str
Definition: shtypes.idl:108
UINT idCmdFirst
Definition: shlobj.h:1392
UINT indexMenu
Definition: shlobj.h:1391
CHAR szTypeName[80]
Definition: shellapi.h:370
CHAR szDisplayName[MAX_PATH]
Definition: shellapi.h:369
char cStr[MAX_PATH]
Definition: shtypes.idl:98
UINT uType
Definition: shtypes.idl:93
Definition: cookie.c:202
Definition: cookie.c:34
Definition: fci.c:116
BSTR path
Definition: filesystem.c:114
TW_UINT32 TW_UINT16 TW_UINT16 TW_MEMREF pData
Definition: twain.h:1830
uint16_t * PWSTR
Definition: typedefs.h:56
#define FIELD_OFFSET(t, f)
Definition: typedefs.h:255
#define ANYSIZE_ARRAY
Definition: typedefs.h:46
ULONG_PTR SIZE_T
Definition: typedefs.h:80
#define MAKELONG(a, b)
Definition: typedefs.h:249
uint32_t ULONG
Definition: typedefs.h:59
#define HIWORD(l)
Definition: typedefs.h:247
INT WINAPI DosDateTimeToVariantTime(USHORT wDosDate, USHORT wDosTime, double *pDateOut)
Definition: variant.c:1211
#define INVALID_FILE_ATTRIBUTES
Definition: vfdcmd.c:23
int ret
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
Definition: wdfdevice.h:4533
int codepage
Definition: win_iconv.c:156
#define lstrcpyn
Definition: winbase.h:3900
#define ZeroMemory
Definition: winbase.h:1737
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1176
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
LONG_PTR LPARAM
Definition: windef.h:208
UINT_PTR WPARAM
Definition: windef.h:207
#define S_FALSE
Definition: winerror.h:2357
#define E_NOINTERFACE
Definition: winerror.h:2364
#define ERROR_CANCELLED
Definition: winerror.h:726
#define E_UNEXPECTED
Definition: winerror.h:2456
#define HRESULT_FROM_WIN32(x)
Definition: winerror.h:92
#define HRESULT_CODE(hr)
Definition: winerror.h:76
BOOL WINAPI PostMessageW(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
#define InsertMenuItem
Definition: winuser.h:5816
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
#define IDOK
Definition: winuser.h:833
#define MFS_DEFAULT
Definition: winuser.h:751
#define WM_SETTEXT
Definition: winuser.h:1620
BOOL WINAPI IsWindowVisible(_In_ HWND)
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
_In_opt_ PALLOCATE_FUNCTION _In_opt_ PFREE_FUNCTION Free
Definition: exfuncs.h:815
#define IID_PPV_ARG(Itype, ppType)
const char * LPCSTR
Definition: xmlstorage.h:183
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
unsigned char BYTE
Definition: xxhash.c:193