ReactOS 0.4.16-dev-2293-g4d8327b
CZipFolder.cpp
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS Zip Shell Extension
3 * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
4 * PURPOSE: Main class
5 * COPYRIGHT: Copyright 2017 Mark Jansen (mark.jansen@reactos.org)
6 * Copyright 2023-2026 Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com)
7 */
8
9#include "precomp.h"
10
12{
20};
21
23{
24}
25
27{
28 Close();
29}
30
32{
33 if (m_UnzipFile)
36}
37
38STDMETHODIMP_(unzFile) CZipFolder::getZip()
39{
40 if (!m_UnzipFile)
42 return m_UnzipFile;
43}
44
46{
48 m_ZipDir = zipDir;
49
50 m_CurDir.Attach(ILCombine(curDir, pidl));
51 return S_OK;
52}
53
55{
56 CComBSTR ZipFile;
57 ZipFile.Attach((BSTR)arg);
58
60
62 return 0;
63}
64
65// Adapted from CFileDefExt::GetFileTimeString
66BOOL CZipFolder::_GetFileTimeString(LPFILETIME lpFileTime, PWSTR pwszResult, UINT cchResult)
67{
68 SYSTEMTIME st;
69
70 if (!FileTimeToSystemTime(lpFileTime, &st))
71 return FALSE;
72
73 size_t cchRemaining = cchResult;
74 PWSTR pwszEnd = pwszResult;
75 int cchWritten = GetDateFormatW(LOCALE_USER_DEFAULT, DATE_SHORTDATE, &st, NULL, pwszEnd, cchRemaining);
76 if (cchWritten)
77 --cchWritten; // GetDateFormatW returns count with terminating zero
78 else
79 return FALSE;
80 cchRemaining -= cchWritten;
81 pwszEnd += cchWritten;
82
83 StringCchCopyExW(pwszEnd, cchRemaining, L" ", &pwszEnd, &cchRemaining, 0);
84
85 cchWritten = GetTimeFormatW(LOCALE_USER_DEFAULT, 0, &st, NULL, pwszEnd, cchRemaining);
86 if (cchWritten)
87 --cchWritten; // GetTimeFormatW returns count with terminating zero
88 else
89 return FALSE;
90
91 return TRUE;
92}
93
95{
99 return S_FALSE;
100
101 HRESULT hr = DeleteItems(pDataObj);
103 {
104 message.LoadString(IDS_CANTDELETEFILE);
106 }
107
108 return hr;
109}
110
112{
113
114 CDataObjectHIDA cida(pDataObj);
115 if (!cida || cida->cidl <= 0)
116 return E_FAIL;
117
118 // Get the target paths
119 CAtlList<CStringW> targetPaths;
120 for (UINT iFile = 0; iFile < cida->cidl; ++iFile)
121 {
122 PCUIDLIST_RELATIVE pidlRelative = HIDA_GetPIDLItem(cida, iFile);
123 const ZipPidlEntry* pEntry = _ZipFromIL(pidlRelative);
124 if (pEntry)
125 {
126 CStringW fullPath = m_ZipDir + pEntry->Name;
127 // For folders, end with a slash
128 if (pEntry->ZipType == ZIP_PIDL_DIRECTORY && fullPath.Right(1) != L"/")
129 fullPath += L"/";
130 targetPaths.AddTail(fullPath);
131 }
132 }
133
134 // Create a temporary file
135 WCHAR szTempPath[MAX_PATH], szTempFile[MAX_PATH];
137 GetTempFileNameW(szTempPath, L"ZIP", 0, szTempFile);
138
139 // Close the current handle to work with the ZIP file
140 Close();
141
142 zlib_filefunc64_def ffunc = {};
144
145 HRESULT hr = S_OK;
146 unzFile uf = unzOpen2_64(m_ZipFile, &ffunc);
147 zipFile zf = zipOpen2_64(szTempFile, APPEND_STATUS_CREATE, NULL, &ffunc);
148
149 if (!uf || !zf)
150 {
151 DPRINT1("Cannot open file\n");
152 if (uf) unzClose(uf);
153 if (zf) zipClose(zf, NULL);
154 return E_FAIL;
155 }
156
157 // Scan all entries in the original ZIP
158 if (unzGoToFirstFile(uf) == UNZ_OK)
159 {
160 do
161 {
162 // Read file entry
164 char szNameA[MAX_PATH];
165 if (unzGetCurrentFileInfo64(uf, &info, szNameA, sizeof(szNameA), NULL, 0, NULL, 0) != UNZ_OK)
166 continue;
167
168 // Read extra field
170 if (info.size_file_extra > 0)
171 {
172 extra.SetCount(info.size_file_extra);
173 unzGetCurrentFileInfo64(uf, NULL, NULL, 0, extra.GetData(), info.size_file_extra, NULL, 0);
174 }
175
176 CStringA utf8Name = CZipEnumerator::GetUtf8Name(szNameA, extra.GetData(), (DWORD)extra.GetCount());
177 CStringW currentEntryName;
178 if (utf8Name.GetLength() > 0)
179 currentEntryName = (LPWSTR)CA2WEX<MAX_PATH>(utf8Name, CP_UTF8);
180 else if (info.flag & MINIZIP_UTF8_FLAG)
181 currentEntryName = (LPWSTR)CA2WEX<MAX_PATH>(szNameA, CP_UTF8);
182 else
183 currentEntryName = (LPWSTR)CA2WEX<MAX_PATH>(szNameA, CP_ACP);
184
185 currentEntryName.Replace(L'\\', L'/');
186
187 // Check if it is on the deletion target list
188 bool bSkip = false;
189 POSITION pos = targetPaths.GetHeadPosition();
190 while (pos)
191 {
192 const CStringW& target = targetPaths.GetNext(pos);
193 // Check for an exact match (file) or a prefix match (folder)
194 if (currentEntryName == target || currentEntryName.Left(target.GetLength()) == target)
195 {
196 bSkip = true;
197 break;
198 }
199 }
200
201 if (!bSkip)
202 {
203 // If not to be deleted, copy to new ZIP
204 hr = CopyZipEntry(uf, zf, &info, szNameA);
206 break;
207 }
208 } while (unzGoToNextFile(uf) == UNZ_OK);
209 }
210
211 unzClose(uf);
212 zipClose(zf, NULL);
213
214 // Replace the original file with the temporary file
215 if (SUCCEEDED(hr) && ReplaceFileW(m_ZipFile, szTempFile, NULL, 0, NULL, NULL))
216 {
217 // Notify the shell that the folder contents have changed
219 }
220 else
221 {
222 DPRINT1("Failed to replace file\n");
223 DeleteFileW(szTempFile);
224 hr = E_FAIL;
225 }
226
227 return hr;
228}
229
231{
232 // Get extra field
234 if (info->size_file_extra > 0)
235 {
236 extra.SetCount(info->size_file_extra);
237 if (unzGetCurrentFileInfo64(uf, NULL, NULL, 0, extra.GetData(),
238 info->size_file_extra, NULL, 0) != UNZ_OK)
239 {
240 DPRINT1("Cannot get extra fields\n");
241 return E_FAIL;
242 }
243 }
244
245 if (unzOpenCurrentFile(uf) != UNZ_OK)
246 {
247 DPRINT1("Cannot open current file\n");
248 return E_FAIL;
249 }
250
251 zip_fileinfo zi = {0};
252 zi.dosDate = info->dosDate;
253 zi.internal_fa = info->internal_fa;
254 zi.external_fa = info->external_fa;
255
256 INT err = zipOpenNewFileInZip3_64(zf, nameA, &zi,
257 extra.GetData(), (UINT)extra.GetCount(),
258 extra.GetData(), (UINT)extra.GetCount(),
261 NULL, 0, info->flag);
262 if (err)
263 {
264 DPRINT1("err: %d\n", err);
266 return E_FAIL;
267 }
268
269 BYTE buffer[4096];
270 INT read;
271 while ((read = unzReadCurrentFile(uf, buffer, sizeof(buffer))) > 0)
273
276 return S_OK;
277}
278
280{
281 if (!pcsFlags || iColumn >= _countof(g_ColumnDefs))
282 return E_INVALIDARG;
283 *pcsFlags = g_ColumnDefs[iColumn].dwDefaultState;
284 return S_OK;
285}
286
288{
289 if (iColumn >= _countof(g_ColumnDefs))
290 return E_FAIL;
291
292 psd->cxChar = g_ColumnDefs[iColumn].cxChar;
293 psd->fmt = g_ColumnDefs[iColumn].fmt;
294
295 if (pidl == NULL)
296 {
297 return SHSetStrRet(&psd->str, _AtlBaseModule.GetResourceInstance(), g_ColumnDefs[iColumn].iResource);
298 }
299
300 PCUIDLIST_RELATIVE curpidl = ILGetNext(pidl);
301 if (curpidl->mkid.cb != 0)
302 {
303 DPRINT1("ERROR, unhandled PIDL!\n");
304 return E_FAIL;
305 }
306
307 const ZipPidlEntry* zipEntry = _ZipFromIL(pidl);
308 if (!zipEntry)
309 return E_INVALIDARG;
310
311 WCHAR Buffer[100];
312 bool isDir = zipEntry->ZipType == ZIP_PIDL_DIRECTORY;
313 switch (iColumn)
314 {
315 case COL_NAME:
316 return GetDisplayNameOf(pidl, 0, &psd->str);
317 case COL_TYPE:
318 {
319 SHFILEINFOW shfi;
321 ULONG_PTR firet = SHGetFileInfoW(zipEntry->Name, dwAttributes, &shfi, sizeof(shfi), SHGFI_USEFILEATTRIBUTES | SHGFI_TYPENAME);
322 if (!firet)
323 return E_FAIL;
324 return SHSetStrRet(&psd->str, shfi.szTypeName);
325 }
326 case COL_COMPRSIZE:
327 case COL_SIZE:
328 {
329 if (isDir)
330 return SHSetStrRet(&psd->str, L"");
331
332 ULONG64 Size = iColumn == COL_COMPRSIZE ? zipEntry->CompressedSize : zipEntry->UncompressedSize;
334 return E_FAIL;
335 return SHSetStrRet(&psd->str, Buffer);
336 }
337 case COL_PASSWORD:
338 if (isDir)
339 return SHSetStrRet(&psd->str, L"");
340 return SHSetStrRet(&psd->str, _AtlBaseModule.GetResourceInstance(), zipEntry->Password ? IDS_YES : IDS_NO);
341 case COL_RATIO:
342 {
343 if (isDir)
344 return SHSetStrRet(&psd->str, L"");
345
346 int ratio = 0;
347 if (zipEntry->UncompressedSize)
348 ratio = 100 - (int)((zipEntry->CompressedSize*100)/zipEntry->UncompressedSize);
349 StringCchPrintfW(Buffer, _countof(Buffer), L"%d%%", ratio);
350 return SHSetStrRet(&psd->str, Buffer);
351 }
352 case COL_DATE_MOD:
353 {
354 if (isDir)
355 return SHSetStrRet(&psd->str, L"");
356 FILETIME ftLocal;
357 DosDateTimeToFileTime((WORD)(zipEntry->DosDate>>16), (WORD)zipEntry->DosDate, &ftLocal);
358 if (!_GetFileTimeString(&ftLocal, Buffer, _countof(Buffer)))
359 return E_FAIL;
360 return SHSetStrRet(&psd->str, Buffer);
361 }
362 }
363
365 return E_NOTIMPL;
366}
367
369{
370 if (riid == IID_IShellFolder)
371 {
372 CStringW newZipDir = m_ZipDir;
373 PCUIDLIST_RELATIVE curpidl = pidl;
374 while (curpidl->mkid.cb)
375 {
376 const ZipPidlEntry* zipEntry = _ZipFromIL(curpidl);
377 if (!zipEntry)
378 {
379 return E_FAIL;
380 }
381 newZipDir += zipEntry->Name;
382 newZipDir += L'/';
383
384 curpidl = ILGetNext(curpidl);
385 }
386 return ShellObjectCreatorInit<CZipFolder>(m_ZipFile, newZipDir, m_CurDir, pidl, riid, ppvOut);
387 }
388 DbgPrint("%s(%S) UNHANDLED\n", __FUNCTION__, guid2string(riid));
389 return E_NOTIMPL;
390}
391
393{
394 const ZipPidlEntry* zipEntry1 = _ZipFromIL(pidl1);
395 const ZipPidlEntry* zipEntry2 = _ZipFromIL(pidl2);
396
397 if (!zipEntry1 || !zipEntry2)
398 return E_INVALIDARG;
399
400 int result = 0;
401 if (zipEntry1->ZipType != zipEntry2->ZipType)
402 result = zipEntry1->ZipType - zipEntry2->ZipType;
403 else
404 result = StrCmpIW(zipEntry1->Name, zipEntry2->Name);
405
406 if (!result && zipEntry1->ZipType == ZIP_PIDL_DIRECTORY)
407 {
408 PCUIDLIST_RELATIVE child1 = ILGetNext(pidl1);
409 PCUIDLIST_RELATIVE child2 = ILGetNext(pidl2);
410
411 if (child1->mkid.cb && child2->mkid.cb)
412 return CompareIDs(lParam, child1, child2);
413 else if (child1->mkid.cb)
414 result = 1;
415 else if (child2->mkid.cb)
416 result = -1;
417 }
418
420}
421
423{
424 m_hwnd = hwndOwner ? hwndOwner : m_hwnd;
425
426 static const GUID UnknownIID = // {93F81976-6A0D-42C3-94DD-AA258A155470}
427 {0x93F81976, 0x6A0D, 0x42C3, {0x94, 0xDD, 0xAA, 0x25, 0x8A, 0x15, 0x54, 0x70}};
428 if (riid == IID_IShellView)
429 {
430 SFV_CREATE sfvparams = {sizeof(SFV_CREATE), this};
432
433 HRESULT hr = _CFolderViewCB_CreateInstance(IID_PPV_ARG(IShellFolderViewCB, &pcb));
435 return hr;
436
437 sfvparams.psfvcb = pcb;
438 hr = SHCreateShellFolderView(&sfvparams, (IShellView**)ppvOut);
439
440 return hr;
441 }
442 else if (riid == IID_IExplorerCommandProvider)
443 {
445 }
446 else if (riid == IID_IContextMenu)
447 {
448 // Folder context menu
449 return QueryInterface(riid, ppvOut);
450 }
451 else if (riid == IID_IDropTarget)
452 {
453 *ppvOut = static_cast<IDropTarget*>(this);
454 AddRef();
455 return S_OK;
456 }
457 if (UnknownIID != riid)
458 DbgPrint("%s(%S) UNHANDLED\n", __FUNCTION__, guid2string(riid));
459 return E_NOTIMPL;
460}
461
463{
464 if (!rgfInOut || !cidl || !apidl)
465 return E_INVALIDARG;
466
467 *rgfInOut = 0;
468
469 //static DWORD dwFileAttrs = SFGAO_STREAM | SFGAO_HASPROPSHEET | SFGAO_CANDELETE | SFGAO_CANCOPY | SFGAO_CANMOVE;
470 //static DWORD dwFolderAttrs = SFGAO_FOLDER | SFGAO_DROPTARGET | SFGAO_HASPROPSHEET | SFGAO_CANDELETE | SFGAO_STORAGE | SFGAO_CANCOPY | SFGAO_CANMOVE;
471 static DWORD dwFileAttrs = SFGAO_CANDELETE | SFGAO_STREAM;
472 static DWORD dwFolderAttrs = SFGAO_CANDELETE | SFGAO_FOLDER | SFGAO_HASSUBFOLDER | SFGAO_BROWSABLE | SFGAO_DROPTARGET;
473
474 while (cidl > 0 && *apidl)
475 {
476 const ZipPidlEntry* zipEntry = _ZipFromIL(*apidl);
477
478 if (zipEntry)
479 {
480 if (zipEntry->ZipType == ZIP_PIDL_FILE)
481 *rgfInOut |= dwFileAttrs;
482 else
483 *rgfInOut |= dwFolderAttrs;
484 }
485 else
486 {
487 *rgfInOut = 0;
488 }
489
490 apidl++;
491 cidl--;
492 }
493
494 *rgfInOut &= ~SFGAO_FILESYSTEM;
495 *rgfInOut &= ~SFGAO_VALIDATE;
496 return S_OK;
497}
498
500 IShellFolder *psf, HWND hwnd, IDataObject *pdtobj,
502{
503 CZipFolder* pThis = static_cast<CZipFolder*>(psf);
504 if (!pThis)
505 return E_FAIL;
506
507 pThis->m_pDataObj = pdtobj;
508
509 switch (uMsg)
510 {
512 {
513 CComQIIDPtr<I_ID(IContextMenu)> spContextMenu(psf);
514 if (!spContextMenu)
515 {
516 DPRINT1("E_NOINTERFACE\n");
517 return E_NOINTERFACE;
518 }
519
520 QCMINFO *pqcminfo = (QCMINFO *)lParam;
521 HRESULT hr = spContextMenu->QueryContextMenu(pqcminfo->hmenu,
522 pqcminfo->indexMenu,
523 pqcminfo->idCmdFirst,
524 pqcminfo->idCmdLast,
525 CMF_NORMAL);
527 return hr;
528
529 pqcminfo->idCmdFirst += HRESULT_CODE(hr);
530 return S_OK;
531 }
533 return E_NOTIMPL;
535 {
536 if (wParam == DFM_CMD_DELETE)
537 return pThis->DoDeleteItems(pdtobj);
538
539 CComQIIDPtr<I_ID(IContextMenu)> spContextMenu(psf);
540 if (!spContextMenu)
541 {
542 DPRINT1("E_NOINTERFACE\n");
543 return E_NOINTERFACE;
544 }
545
546 CMINVOKECOMMANDINFO ici = { sizeof(ici) };
547 ici.hwnd = hwnd;
548 ici.lpVerb = (LPSTR)wParam;
549 ici.nShow = SW_SHOWNORMAL;
550
551 return spContextMenu->InvokeCommand(&ici);
552 }
553 case DFM_GETDEFSTATICID: // Required for Windows 7 to pick a default
554 return S_FALSE;
555 case DFM_WM_INITMENUPOPUP: // FIXME: Make it effective in `CDefViewBckgrndMenu`
556 {
557 // Disable [Paste] / [Paste link] menu items
560 break;
561 }
562 }
563 return E_NOTIMPL;
564}
565
567{
568 m_hwnd = hwndOwner ? hwndOwner : m_hwnd;
569 if ((riid == IID_IExtractIconA || riid == IID_IExtractIconW) && cidl == 1)
570 {
571 const ZipPidlEntry* zipEntry = _ZipFromIL(*apidl);
572 if (zipEntry)
573 {
575 return SHCreateFileExtractIconW(zipEntry->Name, dwAttributes, riid, ppvOut);
576 }
577 }
578 else if (riid == IID_IContextMenu && cidl >= 0)
579 {
580 // Context menu of an object inside the zip
581 const ZipPidlEntry* zipEntry = _ZipFromIL(*apidl);
582 if (zipEntry)
583 {
584 HKEY keys[1] = {0};
585 int nkeys = 0;
586 if (zipEntry->ZipType == ZIP_PIDL_DIRECTORY)
587 {
589 if (res != ERROR_SUCCESS)
590 return E_FAIL;
591 nkeys++;
592 }
593 return CDefFolderMenu_Create2(NULL, hwndOwner, cidl, apidl, this, ZipFolderMenuCallback, nkeys, keys, (IContextMenu**)ppvOut);
594 }
595 }
596 else if (riid == IID_IDataObject && cidl >= 1)
597 {
598 return CIDLData_CreateFromIDArray(m_CurDir, cidl, apidl, (IDataObject**)ppvOut);
599 }
600 else if (riid == IID_IDropTarget)
601 {
602 AddRef();
603 *ppvOut = static_cast<IDropTarget*>(this);
604 return S_OK;
605 }
606
607 DbgPrint("%s(%S) UNHANDLED\n", __FUNCTION__ , guid2string(riid));
608 return E_NOINTERFACE;
609}
610
612{
613 if (!pidl)
614 return S_FALSE;
615
616 PCUIDLIST_RELATIVE curpidl = ILGetNext(pidl);
617 if (curpidl->mkid.cb != 0)
618 {
619 DPRINT1("ERROR, unhandled PIDL!\n");
620 return E_FAIL;
621 }
622
623 const ZipPidlEntry* zipEntry = _ZipFromIL(pidl);
624 if (!zipEntry)
625 return E_FAIL;
626
627 return SHSetStrRet(strRet, zipEntry->Name);
628}
629
631{
632 if (idCmd != 0)
633 return E_INVALIDARG;
634
635 switch (uFlags)
636 {
637 case GCS_VERBA:
638 return StringCchCopyA(pszName, cchMax, EXTRACT_VERBA);
639 case GCS_VERBW:
640 return StringCchCopyW((PWSTR)pszName, cchMax, EXTRACT_VERBW);
641 case GCS_HELPTEXTA:
642 {
644 return StringCchCopyA(pszName, cchMax, helpText);
645 }
646 case GCS_HELPTEXTW:
647 {
649 return StringCchCopyW((PWSTR)pszName, cchMax, helpText);
650 }
651 case GCS_VALIDATEA:
652 case GCS_VALIDATEW:
653 return S_OK;
654 }
655
656 return E_INVALIDARG;
657}
658
660{
661 if (!pici || (pici->cbSize != sizeof(CMINVOKECOMMANDINFO) && pici->cbSize != sizeof(CMINVOKECOMMANDINFOEX)))
662 return E_INVALIDARG;
663
664 if (pici->lpVerb == MAKEINTRESOURCEA(0) ||
665 (!IS_INTRESOURCE(pici->lpVerb) && !strcmp(pici->lpVerb, EXTRACT_VERBA)))
666 {
667 BSTR ZipFile = m_ZipFile.AllocSysString();
669
670 DWORD tid;
672 if (hThread)
673 {
675 return S_OK;
676 }
677 }
678
679 if (pici->lpVerb == MAKEINTRESOURCEA(DFM_CMD_DELETE) ||
680 (!IS_INTRESOURCE(pici->lpVerb) && !strcmp(pici->lpVerb, "delete")))
681 {
683 }
684
685 return E_INVALIDARG;
686}
687
689{
690 UINT idCmd = idCmdFirst;
691
692 if (!(uFlags & CMF_DEFAULTONLY))
693 {
695
696 if (indexMenu)
697 InsertMenuW(hmenu, indexMenu++, MF_BYPOSITION | MF_SEPARATOR, 0, NULL);
698 InsertMenuW(hmenu, indexMenu++, MF_BYPOSITION | MF_STRING, idCmd++, menuText); // Command 0
699 }
700
701 return MAKE_HRESULT(SEVERITY_SUCCESS, FACILITY_NULL, idCmd - idCmdFirst);
702}
703
705{
706 FORMATETC etc = { CF_HDROP, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL };
707 STGMEDIUM stg;
708
709 HRESULT hr = pDataObj->GetData(&etc, &stg);
711 return hr;
712
713 hr = E_FAIL;
714 HDROP hdrop = (HDROP)GlobalLock(stg.hGlobal);
715 if (hdrop)
716 {
717 UINT uNumFiles = DragQueryFileW(hdrop, 0xFFFFFFFF, NULL, 0);
718 if (uNumFiles == 1)
719 {
720 WCHAR szFile[MAX_PATH * 2];
721 if (DragQueryFileW(hdrop, 0, szFile, _countof(szFile)))
722 {
724 hr = SHParseDisplayName(szFile, NULL, &pidl, 0, NULL);
726 {
727 hr = Initialize(pidl);
728 }
729 }
730 else
731 {
732 DbgPrint("Failed to query the file.\r\n");
733 }
734 }
735 else
736 {
737 DbgPrint("Invalid number of files: %d\r\n", uNumFiles);
738 }
739 GlobalUnlock(stg.hGlobal);
740 }
741 else
742 {
743 DbgPrint("Could not lock stg.hGlobal\r\n");
744 }
745 ReleaseStgMedium(&stg);
746 return hr;
747}
748
750{
751 WCHAR tmpPath[MAX_PATH];
752
753 if (SHGetPathFromIDListW(pidl, tmpPath))
754 {
755 m_ZipFile = tmpPath;
756 m_CurDir.Attach(ILClone(pidl));
757 return S_OK;
758 }
759 DbgPrint("%s() => Unable to parse pidl\n", __FUNCTION__);
760 return E_INVALIDARG;
761}
762
764{
765 return S_FALSE;
766}
767
769{
771
774 if (SUCCEEDED(hr))
775 {
776 m_CurDir.Attach(pidl.Detach());
777 }
778
779 return S_OK;
780}
781
783{
784 return E_NOTIMPL;
785}
786
788{
789 return S_OK;
790}
791
793{
794 if (!ppszFileName)
795 return E_INVALIDARG;
796
797 *ppszFileName = NULL;
798
799 if (m_ZipFile.IsEmpty())
800 return S_FALSE;
801
802 *ppszFileName = (LPOLESTR)CoTaskMemAlloc((m_ZipFile.GetLength() + 1) * sizeof(WCHAR));
803 if (!*ppszFileName)
804 return E_OUTOFMEMORY;
805
806 wcscpy(*ppszFileName, m_ZipFile);
807 return S_OK;
808}
809
811{
812 *pdwEffect &= DROPEFFECT_COPY;
813 return S_OK;
814}
815
817{
818 *pdwEffect &= DROPEFFECT_COPY;
819 return S_OK;
820}
821
823{
824 return S_OK;
825}
826
827STDMETHODIMP CZipFolder::Drop(IDataObject* pDataObj, DWORD grfKeyState, POINTL pt, DWORD* pdwEffect)
828{
829 STGMEDIUM sm;
830 FORMATETC fe = { CF_HDROP, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL };
831 HRESULT hr = pDataObj->GetData(&fe, &sm);
833 return hr;
834
835 HDROP hDrop = (HDROP)GlobalLock(sm.hGlobal);
836 if (hDrop)
837 {
838 // Close the ZIP file before appending (it will be automatically
839 // reopened next time getZip() is called)
840 Close();
841
842 // Create creator
844
845 pCreator->SetNotifyPidl(m_CurDir);
846
847 // Add dropped files
848 UINT fileCount = DragQueryFileW(hDrop, 0xFFFFFFFF, NULL, 0);
849 for (UINT i = 0; i < fileCount; i++)
850 {
853 pCreator->DoAddItem(szFilePath);
854 }
855
856 CZipCreator::runThread(pCreator);
857
858 GlobalUnlock(sm.hGlobal);
859 *pdwEffect = DROPEFFECT_COPY;
860 }
861 ReleaseStgMedium(&sm);
862
863 return S_OK;
864}
LONG g_ModuleRefCnt
Definition: ACPPage.cpp:13
HRESULT WINAPI SHCreateShellFolderView(const SFV_CREATE *pcsfv, IShellView **ppsv)
Definition: CDefView.cpp:4823
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)
HRESULT _CExplorerCommandProvider_CreateInstance(IContextMenu *zipObject, REFIID riid, LPVOID *ppvOut)
EXTERN_C HRESULT WINAPI SHCreateFileExtractIconW(_In_ LPCWSTR pszFile, _In_ DWORD dwFileAttributes, _In_ REFIID riid, _Outptr_ void **ppv)
HRESULT _CFolderViewCB_CreateInstance(REFIID riid, LPVOID *ppvOut)
static FolderViewColumns g_ColumnDefs[]
Definition: CFontExt.cpp:34
void _CZipExtract_runWizard(PCWSTR Filename)
static FolderViewColumns g_ColumnDefs[]
Definition: CZipFolder.cpp:11
@ COL_COMPRSIZE
Definition: CZipFolder.hpp:15
@ COL_PASSWORD
Definition: CZipFolder.hpp:16
@ COL_RATIO
Definition: CZipFolder.hpp:18
@ COL_NAME
Definition: CZipFolder.hpp:13
@ COL_DATE_MOD
Definition: CZipFolder.hpp:19
@ COL_TYPE
Definition: CZipFolder.hpp:14
@ COL_SIZE
Definition: CZipFolder.hpp:17
WCHAR * guid2string(REFCLSID iid)
Definition: Debug.cpp:21
UINT cchMax
#define read
Definition: acwin.h:96
#define InterlockedIncrement
Definition: armddk.h:53
#define InterlockedDecrement
Definition: armddk.h:52
#define I_ID(Itype)
Definition: atlcomcli.h:215
#define IDS_YES
Definition: resource.h:16
#define IDS_NO
Definition: resource.h:17
#define IDS_COL_TYPE
Definition: resource.h:9
#define CF_HDROP
Definition: constants.h:410
#define DPRINT1
Definition: precomp.h:8
#define STDMETHODIMP
Definition: basetyps.h:43
#define STDMETHODIMP_(t)
Definition: basetyps.h:44
#define UNIMPLEMENTED
Definition: ntoskrnl.c:15
EXTERN_C void WINAPI SHChangeNotify(LONG wEventId, UINT uFlags, LPCVOID dwItem1, LPCVOID dwItem2)
POSITION AddTail(INARGTYPE element)
Definition: atlcoll.h:629
POSITION GetHeadPosition() const
Definition: atlcoll.h:554
E & GetNext(_Inout_ POSITION &pos)
Definition: atlcoll.h:566
void Attach(BSTR bstr)
Definition: atlcomcli.h:379
bool IsEmpty() const noexcept
Definition: atlsimpstr.h:394
int GetLength() const noexcept
Definition: atlsimpstr.h:362
CStringT Right(int nCount) const
Definition: cstringt.h:788
int Replace(PCXSTR pszOld, PCXSTR pszNew)
Definition: cstringt.h:886
CStringT Left(int nCount) const
Definition: cstringt.h:776
BSTR AllocSysString() const
Definition: cstringt.h:1063
Definition: bufpool.h:45
T * Detach()
Definition: atlalloc.h:168
static BOOL runThread(CZipCreator *pCreator)
static CZipCreator * DoCreate(PCWSTR pszExistingZip=NULL, PCWSTR pszTargetDir=NULL)
void SetNotifyPidl(PCIDLIST_ABSOLUTE pidl)
Definition: CZipCreator.hpp:26
virtual void DoAddItem(PCWSTR pszFile)
HRESULT DeleteItems(CComPtr< IDataObject > pDataObj)
Definition: CZipFolder.cpp:111
CStringW m_ZipFile
Definition: CZipFolder.hpp:42
STDMETHODIMP Save(LPCOLESTR pszFileName, BOOL fRemember) override
Definition: CZipFolder.cpp:782
STDMETHODIMP DragOver(DWORD grfKeyState, POINTL pt, DWORD *pdwEffect) override
Definition: CZipFolder.cpp:816
STDMETHODIMP CompareIDs(LPARAM lParam, PCUIDLIST_RELATIVE pidl1, PCUIDLIST_RELATIVE pidl2) override
Definition: CZipFolder.cpp:392
HRESULT CopyZipEntry(unzFile uf, zipFile zf, unz_file_info64 *info, LPCSTR nameA)
Definition: CZipFolder.cpp:230
STDMETHODIMP GetDetailsOf(PCUITEMID_CHILD pidl, UINT iColumn, SHELLDETAILS *psd) override
Definition: CZipFolder.cpp:287
STDMETHODIMP IsDirty() override
Definition: CZipFolder.cpp:763
STDMETHODIMP DragEnter(IDataObject *pDataObj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect) override
Definition: CZipFolder.cpp:810
STDMETHODIMP SaveCompleted(LPCOLESTR pszFileName) override
Definition: CZipFolder.cpp:787
STDMETHODIMP DragLeave() override
Definition: CZipFolder.cpp:822
STDMETHODIMP GetCurFile(LPOLESTR *ppszFileName) override
Definition: CZipFolder.cpp:792
static HRESULT CALLBACK ZipFolderMenuCallback(IShellFolder *psf, HWND hwnd, IDataObject *pdtobj, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: CZipFolder.cpp:499
STDMETHODIMP QueryContextMenu(HMENU hmenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags) override
Definition: CZipFolder.cpp:688
HRESULT DoDeleteItems(CComPtr< IDataObject > pDataObj)
Definition: CZipFolder.cpp:94
void Close()
Definition: CZipFolder.cpp:31
STDMETHODIMP Load(LPCOLESTR pszFileName, DWORD dwMode) override
Definition: CZipFolder.cpp:768
STDMETHODIMP GetAttributesOf(UINT cidl, PCUITEMID_CHILD_ARRAY apidl, DWORD *rgfInOut) override
Definition: CZipFolder.cpp:462
STDMETHODIMP GetDisplayNameOf(PCUITEMID_CHILD pidl, DWORD dwFlags, LPSTRRET strRet) override
Definition: CZipFolder.cpp:611
STDMETHODIMP InvokeCommand(LPCMINVOKECOMMANDINFO pici) override
Definition: CZipFolder.cpp:659
CComHeapPtr< ITEMIDLIST > m_CurDir
Definition: CZipFolder.hpp:44
unzFile m_UnzipFile
Definition: CZipFolder.hpp:45
STDMETHODIMP GetCommandString(UINT_PTR idCmd, UINT uFlags, UINT *pwReserved, LPSTR pszName, UINT cchMax) override
Definition: CZipFolder.cpp:630
CComPtr< IDataObject > m_pDataObj
Definition: CZipFolder.hpp:46
HRESULT Initialize(PCWSTR zipFile, PCWSTR zipDir, PCUIDLIST_ABSOLUTE curDir, PCUIDLIST_RELATIVE pidl)
Definition: CZipFolder.cpp:45
STDMETHODIMP CreateViewObject(HWND hwndOwner, REFIID riid, LPVOID *ppvOut) override
Definition: CZipFolder.cpp:422
STDMETHODIMP GetUIObjectOf(HWND hwndOwner, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, REFIID riid, UINT *prgfInOut, LPVOID *ppvOut) override
Definition: CZipFolder.cpp:566
CStringW m_ZipDir
Definition: CZipFolder.hpp:43
STDMETHODIMP BindToObject(PCUIDLIST_RELATIVE pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut) override
Definition: CZipFolder.cpp:368
static DWORD WINAPI s_ExtractProc(LPVOID arg)
Definition: CZipFolder.cpp:54
STDMETHODIMP Drop(IDataObject *pDataObj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect) override
Definition: CZipFolder.cpp:827
BOOL _GetFileTimeString(LPFILETIME lpFileTime, PWSTR pwszResult, UINT cchResult)
Definition: CZipFolder.cpp:66
STDMETHODIMP GetDefaultColumnState(UINT iColumn, DWORD *pcsFlags) override
Definition: CZipFolder.cpp:279
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 ERROR_SUCCESS
Definition: deptool.c:10
static LSTATUS(WINAPI *pRegDeleteTreeW)(HKEY
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define IDS_COL_NAME
Definition: resource.h:17
#define IDS_COL_SIZE
Definition: resource.h:18
#define DFM_GETDEFSTATICID
Definition: precomp.h:47
#define DFM_INVOKECOMMANDEX
Definition: precomp.h:46
#define DFM_MERGECONTEXTMENU
Definition: precomp.h:44
#define DFM_INVOKECOMMAND
Definition: precomp.h:45
zlib_filefunc64_def g_FFunc
Definition: zipfldr.cpp:45
#define EXTRACT_VERBA
Definition: precomp.h:25
#define EXTRACT_VERBW
Definition: precomp.h:26
#define MINIZIP_UTF8_FLAG
Definition: precomp.h:43
#define IDS_COL_DATE_MOD
Definition: resource.h:44
#define IDS_COL_RATIO
Definition: resource.h:43
#define IDS_CONFIRMDELETE_TEXT
Definition: resource.h:71
#define IDS_MENUITEM
Definition: resource.h:74
#define IDS_FRIENDLYNAME
Definition: resource.h:76
#define IDS_COL_COMPRSIZE
Definition: resource.h:40
#define IDS_CANTDELETEFILE
Definition: resource.h:56
#define IDS_COL_PASSWORD
Definition: resource.h:41
#define IDS_HELPTEXT
Definition: resource.h:75
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
Definition: reg.c:3333
UINT uFlags
Definition: api.c:59
#define CloseHandle
Definition: compat.h:739
#define CP_ACP
Definition: compat.h:109
OLECHAR * BSTR
Definition: compat.h:2293
#define MAX_PATH
Definition: compat.h:34
#define FILE_ATTRIBUTE_NORMAL
Definition: compat.h:137
#define CALLBACK
Definition: compat.h:35
#define Z_DEFLATED
Definition: zlib.h:146
#define Z_DEFAULT_STRATEGY
Definition: zlib.h:137
#define MAX_WBITS
Definition: zlib.h:151
#define Z_DEFAULT_COMPRESSION
Definition: zlib.h:130
BOOL WINAPI DeleteFileW(IN LPCWSTR lpFileName)
Definition: delete.c:39
BOOL WINAPI ReplaceFileW(LPCWSTR lpReplacedFileName, LPCWSTR lpReplacementFileName, LPCWSTR lpBackupFileName, DWORD dwReplaceFlags, LPVOID lpExclude, LPVOID lpReserved)
Definition: move.c:1090
DWORD WINAPI GetTempPathW(IN DWORD count, OUT LPWSTR path)
Definition: path.c:1999
HANDLE WINAPI DECLSPEC_HOTPATCH CreateThread(IN LPSECURITY_ATTRIBUTES lpThreadAttributes, IN DWORD dwStackSize, IN LPTHREAD_START_ROUTINE lpStartAddress, IN LPVOID lpParameter, IN DWORD dwCreationFlags, OUT LPDWORD lpThreadId)
Definition: thread.c:137
BOOL WINAPI FileTimeToSystemTime(IN CONST FILETIME *lpFileTime, OUT LPSYSTEMTIME lpSystemTime)
Definition: time.c:188
BOOL WINAPI DosDateTimeToFileTime(IN WORD wFatDate, IN WORD wFatTime, OUT LPFILETIME lpFileTime)
Definition: time.c:75
#define IS_INTRESOURCE(x)
Definition: loader.c:613
const UINT * keys
Definition: locale.c:416
int WINAPI StrCmpIW(const WCHAR *str, const WCHAR *comp)
Definition: string.c:456
_ACRTIMP int __cdecl strcmp(const char *, const char *)
Definition: string.c:3319
void WINAPI ReleaseStgMedium(STGMEDIUM *pmedium)
Definition: ole2.c:2033
UINT WINAPI DragQueryFileW(HDROP hDrop, UINT lFile, LPWSTR lpszwFile, UINT lLength)
Definition: shellole.c:666
LPWSTR WINAPI StrFormatByteSizeW(LONGLONG llBytes, LPWSTR lpszDest, UINT cchMax)
Definition: string.c:2524
#define FAILED_UNEXPECTEDLY
Definition: utils.cpp:30
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31
#define MAKE_HRESULT(sev, fac, code)
Definition: dmerror.h:29
#define pt(x, y)
Definition: drawing.c:79
#define L(x)
Definition: resources.c:13
#define __FUNCTION__
Definition: types.h:116
UINT WINAPI GetTempFileNameW(IN LPCWSTR lpPathName, IN LPCWSTR lpPrefixString, IN UINT uUnique, OUT LPWSTR lpTempFileName)
Definition: filename.c:84
unsigned short WORD
Definition: ntddk_ex.h:93
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
#define DEF_MEM_LEVEL
Definition: zutil.h:53
PLIST_ENTRY pEntry
Definition: fxioqueue.cpp:4484
GLuint res
Definition: glext.h:9613
GLuint buffer
Definition: glext.h:5915
GLuint64EXT * result
Definition: glext.h:11304
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
#define DbgPrint
Definition: hal.h:12
BOOL NTAPI GlobalUnlock(HGLOBAL hMem)
Definition: heapmem.c:1190
@ extra
Definition: id3.c:95
LPVOID WINAPI CoTaskMemAlloc(SIZE_T size)
Definition: ifs.c:426
REFIID riid
Definition: atlbase.h:39
static TfClientId tid
HRESULT GetData([in, unique] FORMATETC *pformatetcIn, [out] STGMEDIUM *pmedium)
const DWORD DROPEFFECT_COPY
Definition: oleidl.idl:930
ULONG AddRef()
HRESULT QueryInterface([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
void fill_win32_filefunc64W(zlib_filefunc64_def *pzlib_filefunc_def)
Definition: iowin32.c:457
static ERESOURCE GlobalLock
Definition: sys_arch.c:8
INT WINAPI GetTimeFormatW(LCID lcid, DWORD dwFlags, const SYSTEMTIME *lpTime, LPCWSTR lpFormat, LPWSTR lpTimeStr, INT cchOut)
Definition: lcformat.c:1101
INT WINAPI GetDateFormatW(LCID lcid, DWORD dwFlags, const SYSTEMTIME *lpTime, LPCWSTR lpFormat, LPWSTR lpDateStr, INT cchOut)
Definition: lcformat.c:1001
LONG_PTR LPARAM
Definition: minwindef.h:175
UINT_PTR WPARAM
Definition: minwindef.h:174
unsigned __int64 ULONG64
Definition: imports.h:198
static char szTempPath[MAX_PATH]
Definition: data.c:16
static LPOLESTR
Definition: stg_prop.c:27
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:60
static HMENU hmenu
Definition: win.c:66
unsigned __int3264 UINT_PTR
Definition: mstsclib_h.h:274
unsigned int UINT
Definition: ndis.h:50
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
Definition: netsh.h:141
HANDLE hThread
Definition: wizard.c:28
#define KEY_READ
Definition: nt_native.h:1026
#define KEY_QUERY_VALUE
Definition: nt_native.h:1019
#define FILE_ATTRIBUTE_DIRECTORY
Definition: nt_native.h:705
#define LOCALE_USER_DEFAULT
interface IBindCtx * LPBC
Definition: objfwd.h:18
interface IDataObject * LPDATAOBJECT
Definition: objfwd.h:21
const GUID IID_IDataObject
LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl)
Definition: pidl.c:238
HRESULT WINAPI SHParseDisplayName(LPCWSTR pszName, IBindCtx *pbc, LPITEMIDLIST *ppidl, SFGAOF sfgaoIn, SFGAOF *psfgaoOut)
Definition: pidl.c:1548
LPITEMIDLIST WINAPI ILCombine(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
Definition: pidl.c:817
BOOL WINAPI SHGetPathFromIDListW(LPCITEMIDLIST pidl, LPWSTR pszPath)
Definition: pidl.c:1496
LPITEMIDLIST WINAPI ILGetNext(LPCITEMIDLIST pidl)
Definition: pidl.c:977
static char title[]
Definition: ps.c:92
#define LVCFMT_LEFT
Definition: commctrl.h:2603
#define LVCFMT_RIGHT
Definition: commctrl.h:2604
#define REFIID
Definition: guiddef.h:118
static WCHAR szFilePath[]
Definition: qotd.c:14
#define err(...)
#define CP_UTF8
Definition: nls.h:20
wcscpy
DWORD_PTR WINAPI SHGetFileInfoW(LPCWSTR path, DWORD dwFileAttributes, SHFILEINFOW *psfi, UINT sizeofpsfi, UINT flags)
Definition: shell32_main.c:430
#define SHGFI_TYPENAME
Definition: shellapi.h:167
#define SHGFI_USEFILEATTRIBUTES
Definition: shellapi.h:181
HRESULT WINAPI CIDLData_CreateFromIDArray(PCIDLIST_ABSOLUTE pidlFolder, UINT cpidlFiles, PCUIDLIST_RELATIVE_ARRAY lppidlFiles, LPDATAOBJECT *ppdataObject)
Definition: shellord.c:2419
static PCUIDLIST_RELATIVE HIDA_GetPIDLItem(CIDA const *pida, SIZE_T i)
Definition: shellutils.h:713
#define MAKE_COMPARE_HRESULT(x)
Definition: shellutils.h:678
HRESULT hr
Definition: shlfolder.c:183
#define DFM_CMD_DELETE
Definition: shlobj.h:2616
#define DFM_WM_INITMENUPOPUP
Definition: shlobj.h:2605
#define SHCNE_UPDATEDIR
Definition: shlobj.h:1909
struct _SFV_CREATE SFV_CREATE
#define SHCNF_IDLIST
Definition: shlobj.h:1929
#define FCIDM_SHVIEW_INSERTLINK
Definition: shresdef.h:875
#define FCIDM_SHVIEW_INSERT
Definition: shresdef.h:873
const ITEMIDLIST_ABSOLUTE UNALIGNED * PCUIDLIST_ABSOLUTE
Definition: shtypes.idl:63
const PCUITEMID_CHILD * PCUITEMID_CHILD_ARRAY
Definition: shtypes.idl:71
const ITEMID_CHILD UNALIGNED * PCUITEMID_CHILD
Definition: shtypes.idl:70
@ 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
#define _countof(array)
Definition: sndvol32.h:70
STRSAFEAPI StringCchPrintfW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszFormat,...)
Definition: strsafe.h:530
STRSAFEAPI StringCchCopyExW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc, STRSAFE_LPWSTR *ppszDestEnd, size_t *pcchRemaining, STRSAFE_DWORD dwFlags)
Definition: strsafe.h:184
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:149
STRSAFEAPI StringCchCopyA(STRSAFE_LPSTR pszDest, size_t cchDest, STRSAFE_LPCSTR pszSrc)
Definition: strsafe.h:145
static CStringA GetUtf8Name(PCSTR originalName, const BYTE *extraField, DWORD extraFieldLen)
DWORD dwDefaultState
Definition: CFontExt.cpp:20
STRRET str
Definition: shtypes.idl:108
WCHAR Name[1]
Definition: zippidl.hpp:28
ULONG64 UncompressedSize
Definition: zippidl.hpp:25
BOOLEAN Password
Definition: zippidl.hpp:21
ZipPidlType ZipType
Definition: zippidl.hpp:22
ULONG DosDate
Definition: zippidl.hpp:26
ULONG64 CompressedSize
Definition: zippidl.hpp:24
HMENU hmenu
Definition: shlobj.h:1397
UINT idCmdLast
Definition: shlobj.h:1400
UINT idCmdFirst
Definition: shlobj.h:1399
UINT indexMenu
Definition: shlobj.h:1398
IShellFolderViewCB * psfvcb
Definition: shlobj.h:1367
WCHAR szTypeName[80]
Definition: shellapi.h:388
Definition: tftpd.h:60
Definition: tools.h:99
uLong dosDate
Definition: zip.h:102
uLong internal_fa
Definition: zip.h:105
uLong external_fa
Definition: zip.h:106
uint16_t * PWSTR
Definition: typedefs.h:56
const uint16_t * PCWSTR
Definition: typedefs.h:57
int32_t INT
Definition: typedefs.h:58
uint32_t ULONG_PTR
Definition: typedefs.h:65
unzFile ZEXPORT unzOpen2_64(const void *path, zlib_filefunc64_def *pzlib_filefunc_def)
Definition: unzip.c:783
int ZEXPORT unzGetCurrentFileInfo64(unzFile file, unz_file_info64 *pfile_info, char *szFileName, uLong fileNameBufferSize, void *extraField, uLong extraFieldBufferSize, char *szComment, uLong commentBufferSize)
Definition: unzip.c:1129
int ZEXPORT unzGoToFirstFile(unzFile file)
Definition: unzip.c:1183
int ZEXPORT unzOpenCurrentFile(unzFile file)
Definition: unzip.c:1648
int ZEXPORT unzReadCurrentFile(unzFile file, voidp buf, unsigned len)
Definition: unzip.c:1691
int ZEXPORT unzCloseCurrentFile(unzFile file)
Definition: unzip.c:2014
int ZEXPORT unzGoToNextFile(unzFile file)
Definition: unzip.c:1204
int ZEXPORT unzClose(unzFile file)
Definition: unzip.c:813
voidp unzFile
Definition: unzip.h:70
#define UNZ_OK
Definition: unzip.h:74
DWORD dwAttributes
Definition: vdmdbg.h:34
WORD WORD PSZ PSZ pszFileName
Definition: vdmdbg.h:44
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
Definition: wdfdevice.h:4539
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
_In_ ULONG_PTR iFile
Definition: winddi.h:3835
#define WINAPI
Definition: msvc.h:6
#define FACILITY_NULL
Definition: winerror.h:24
#define S_FALSE
Definition: winerror.h:3451
#define E_NOINTERFACE
Definition: winerror.h:3479
#define SEVERITY_SUCCESS
Definition: winerror.h:177
#define HRESULT_CODE(hr)
Definition: winerror.h:188
#define DATE_SHORTDATE
Definition: winnls.h:209
#define HKEY_CLASSES_ROOT
Definition: winreg.h:10
#define SW_SHOWNORMAL
Definition: winuser.h:781
#define MF_BYCOMMAND
Definition: winuser.h:202
BOOL WINAPI InsertMenuW(_In_ HMENU, _In_ UINT, _In_ UINT, _In_ UINT_PTR, _In_opt_ LPCWSTR)
#define MF_STRING
Definition: winuser.h:138
int WINAPI MessageBoxW(_In_opt_ HWND hWnd, _In_opt_ LPCWSTR lpText, _In_opt_ LPCWSTR lpCaption, _In_ UINT uType)
#define MB_ICONERROR
Definition: winuser.h:798
#define MF_SEPARATOR
Definition: winuser.h:137
#define MF_BYPOSITION
Definition: winuser.h:203
#define MB_ICONWARNING
Definition: winuser.h:797
#define MAKEINTRESOURCEA(i)
Definition: winuser.h:581
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
#define IDYES
Definition: winuser.h:846
BOOL WINAPI EnableMenuItem(_In_ HMENU, _In_ UINT, _In_ UINT)
#define MB_YESNOCANCEL
Definition: winuser.h:829
#define MF_GRAYED
Definition: winuser.h:129
static void Initialize()
Definition: xlate.c:212
#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
char * LPSTR
Definition: xmlstorage.h:182
unsigned char BYTE
Definition: xxhash.c:193
int ZEXPORT zipClose(zipFile file, const char *global_comment)
Definition: zip.c:1883
zipFile ZEXPORT zipOpen2_64(const void *pathname, int append, zipcharpc *globalcomment, zlib_filefunc64_def *pzlib_filefunc_def)
Definition: zip.c:938
int ZEXPORT zipWriteInFileInZip(zipFile file, const void *buf, unsigned int len)
Definition: zip.c:1408
int ZEXPORT zipOpenNewFileInZip3_64(zipFile file, const char *filename, const zip_fileinfo *zipfi, const void *extrafield_local, uInt size_extrafield_local, const void *extrafield_global, uInt size_extrafield_global, const char *comment, int method, int level, int raw, int windowBits, int memLevel, int strategy, const char *password, uLong crcForCrypting, int zip64)
Definition: zip.c:1302
int ZEXPORT zipCloseFileInZip(zipFile file)
Definition: zip.c:1751
#define APPEND_STATUS_CREATE
Definition: zip.h:112
voidp zipFile
Definition: zip.h:69
const ZipPidlEntry * _ZipFromIL(LPCITEMIDLIST pidl)
Definition: zippidl.cpp:41
@ ZIP_PIDL_FILE
Definition: zippidl.hpp:13
@ ZIP_PIDL_DIRECTORY
Definition: zippidl.hpp:12