ReactOS  0.4.15-dev-3297-g037c744
CZipExtract.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: Zip extraction
5  * COPYRIGHT: Copyright 2017-2019 Mark Jansen (mark.jansen@reactos.org)
6  */
7 
8 #include "precomp.h"
9 
10 class CZipExtract :
11  public IZip
12 {
18 public:
21  ,uf(NULL)
22  {
25  PWSTR Dir = m_Directory.GetBuffer();
28  }
29 
31  {
32  if (uf)
33  {
34  DPRINT1("WARNING: uf not closed!\n");
35  Close();
36  }
37  }
38 
39  void Close()
40  {
41  if (uf)
42  unzClose(uf);
43  uf = NULL;
44  }
45 
46  // *** IZip methods ***
48  {
49  if (riid == IID_IUnknown)
50  {
51  *ppvObject = this;
52  AddRef();
53  return S_OK;
54  }
55  return E_NOINTERFACE;
56  }
58  {
59  return 2;
60  }
62  {
63  return 1;
64  }
66  {
67  return uf;
68  }
69 
70  class CExtractSettingsPage : public CPropertyPageImpl<CExtractSettingsPage>
71  {
72  private:
75 
79 
80  public:
87  {
88  m_psp.pszHeaderTitle = MAKEINTRESOURCE(IDS_WIZ_DEST_TITLE);
89  m_psp.pszHeaderSubTitle = MAKEINTRESOURCE(IDS_WIZ_DEST_SUBTITLE);
90  m_psp.dwFlags |= PSP_USETITLE | PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE;
91  }
92 
94  {
99  return 0;
100  }
101 
103  {
104  if (m_hExtractionThread != NULL)
105  {
106  /* We enter here when extraction has finished, and go to next page if it succeeded */
110  m_pExtract->Release();
112  {
113  return 0;
114  }
115  else
116  {
118  return TRUE;
119  }
120  }
121 
122  /* We end up here if the user manually clicks Next: start extraction */
124 
125  /* Grey out every control during extraction to prevent user interaction */
129  SetWizardButtons(0);
130 
133  CStringW strExtracting(MAKEINTRESOURCEW(IDS_EXTRACTING));
134  SetDlgItemTextW(IDC_STATUSTEXT, strExtracting);
135 
137  UpdateDirectory();
138 
139  m_pExtract->AddRef();
140 
143  this,
144  0, NULL);
145  if (!m_hExtractionThread)
146  {
147  /* Extraction thread creation failed, do not go to the next page */
148  DWORD err = GetLastError();
149  DPRINT1("ERROR, m_hExtractionThread: CreateThread failed: 0x%x\n", err);
150  m_pExtract->Release();
151 
153 
158  }
159  return TRUE;
160  }
161 
162  void WizardReset()
163  {
165  }
166 
167  static DWORD WINAPI ExtractEntry(LPVOID lpParam)
168  {
169  CExtractSettingsPage* pPage = (CExtractSettingsPage*)lpParam;
170  bool res = pPage->m_pExtract->Extract(pPage->m_hWnd, pPage->GetDlgItem(IDC_PROGRESS), &(pPage->m_bExtractionThreadCancel));
171  /* Failing and cancelling extraction both mean we stay on the same property page */
172  pPage->m_bExtractionThreadCancel = !res;
173 
175  if (!res)
176  {
177  /* Extraction failed/cancelled: the page becomes interactive again */
181 
182  /* Reset the progress bar's appearance */
183  CWindow Progress(pPage->GetDlgItem(IDC_PROGRESS));
184  Progress.SendMessage(PBM_SETRANGE32, 0, 1);
185  Progress.SendMessage(PBM_SETPOS, 0, 0);
186  pPage->WizardReset();
187  }
189 
190  return 0;
191  }
192 
194  {
195  if (m_hExtractionThread != NULL)
196  {
197  /* Extraction will check the value of m_bExtractionThreadCancel between each file in the archive */
199  return TRUE;
200  }
201  return FALSE;
202  }
203 
204  struct browse_info
205  {
208  };
209 
211  {
212  if (uMsg == BFFM_INITIALIZED)
213  {
215  CWindow dlg(hWnd);
216  dlg.SendMessage(BFFM_SETSELECTION, TRUE, (LPARAM)info->Directory);
217  dlg.CenterWindow(info->hWnd);
218  }
219  return 0;
220  }
221 
222  LRESULT OnBrowse(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
223  {
224  BROWSEINFOW bi = { m_hWnd };
226  bi.pszDisplayName = path;
230  bi.lpszTitle = title;
231 
233  UpdateDirectory();
234 
236  bi.lParam = (LPARAM)&info;
237 
239  pidl.Attach(SHBrowseForFolderW(&bi));
240 
241  WCHAR tmpPath[MAX_PATH];
242  if (pidl && SHGetPathFromIDListW(pidl, tmpPath))
243  {
244  m_pExtract->m_Directory = tmpPath;
247  }
248  return 0;
249  }
250 
251  LRESULT OnEnChangeDirectory(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
252  {
254  return 0;
255  }
256 
257  LRESULT OnPassword(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
258  {
261  {
263  }
264  return 0;
265  }
266 
268  {
271  }
272 
273  public:
275 
281  END_MSG_MAP()
282  };
283 
284 
285  class CCompleteSettingsPage : public CPropertyPageImpl<CCompleteSettingsPage>
286  {
287  private:
289 
290  public:
294  {
295  m_psp.pszHeaderTitle = MAKEINTRESOURCE(IDS_WIZ_COMPL_TITLE);
296  m_psp.pszHeaderSubTitle = MAKEINTRESOURCE(IDS_WIZ_COMPL_SUBTITLE);
297  m_psp.dwFlags |= PSP_USETITLE | PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE;
298  }
299 
300 
302  {
305  PWSTR Ptr = Path.GetBuffer(MAX_PATH);
306  RECT rc;
308  HDC dc = GetDC();
309  PathCompactPathW(dc, Ptr, rc.right - rc.left);
310  ReleaseDC(dc);
311  Path.ReleaseBuffer();
314  return 0;
315  }
317  {
319  {
321  }
322  return FALSE;
323  }
324 
325  public:
327 
330  END_MSG_MAP()
331  };
332 
333 
334  void runWizard()
335  {
336  PROPSHEETHEADERW psh = { sizeof(psh), 0 };
337  psh.dwFlags = PSH_WIZARD97 | PSH_HEADER;
338  psh.hInstance = _AtlBaseModule.GetResourceInstance();
339 
340  CExtractSettingsPage extractPage(this, &m_Password);
341  CCompleteSettingsPage completePage(this);
342  HPROPSHEETPAGE hpsp[] =
343  {
344  extractPage.Create(),
345  completePage.Create()
346  };
347 
348  psh.phpage = hpsp;
349  psh.nPages = _countof(hpsp);
350  psh.pszbmWatermark = MAKEINTRESOURCE(IDB_WATERMARK);
351  psh.pszbmHeader = MAKEINTRESOURCE(IDB_HEADER);
352 
353  PropertySheetW(&psh);
354  }
355 
357  HWND hDlg,
358  LPCSTR FullPath,
359  bool is_dir,
361  CStringA Name,
363  bool* bOverwriteAll,
364  const bool* bCancel,
365  int* ErrorCode
366  )
367  {
368  int err;
369  BYTE Buffer[2048];
371  HRESULT hr = SHPathPrepareForWriteA(hDlg, NULL, FullPath, dwFlags);
372  if (FAILED_UNEXPECTEDLY(hr))
373  {
374  *ErrorCode = hr;
375  return eDirectoryError;
376  }
377  if (is_dir)
378  return eNoError;
379 
380  if (Info->flag & MINIZIP_PASSWORD_FLAG)
381  {
383  do
384  {
385  /* If there is a password set, try it */
386  if (!Password.IsEmpty())
387  {
389  if (err == UNZ_OK)
390  {
391  /* Try to read some bytes, because unzOpenCurrentFilePassword does not return failure */
392  char Buf[10];
393  err = unzReadCurrentFile(uf, Buf, sizeof(Buf));
395  if (err >= UNZ_OK)
396  {
397  /* 're'-open the file so that we can begin to extract */
399  break;
400  }
401  }
402  }
404  } while (Response == eAccept);
405 
406  if (Response == eSkip)
407  {
408  return eNoError;
409  }
410  else if (Response == eAbort)
411  {
412  return eExtractAbort;
413  }
414  }
415  else
416  {
418  }
419 
420  if (err != UNZ_OK)
421  {
422  DPRINT1("ERROR, unzOpenCurrentFilePassword: 0x%x\n", err);
423  *ErrorCode = err;
424  return eOpenError;
425  }
426 
429  {
431  if (dwErr == ERROR_FILE_EXISTS)
432  {
433  bool bOverwrite = *bOverwriteAll;
434  if (!*bOverwriteAll)
435  {
436  eZipConfirmResponse Result = _CZipAskReplace(hDlg, FullPath);
437  switch (Result)
438  {
439  case eYesToAll:
440  *bOverwriteAll = true;
441  /* fall through */
442  case eYes:
443  bOverwrite = true;
444  break;
445  case eNo:
446  break;
447  case eCancel:
449  return eExtractAbort;
450  }
451  }
452 
453  if (bOverwrite)
454  {
457  {
458  dwErr = GetLastError();
459  }
460  }
461  else
462  {
464  return eNoError;
465  }
466  }
468  {
470  DPRINT1("ERROR, CreateFileA: 0x%x (%s)\n", dwErr, *bOverwriteAll ? "Y" : "N");
471  *ErrorCode = dwErr;
472  return eFileError;
473  }
474  }
475 
476  do
477  {
478  if (*bCancel)
479  {
481  BOOL deleteResult = DeleteFileA(FullPath);
482  if (!deleteResult)
483  DPRINT1("ERROR, DeleteFileA: 0x%x\n", GetLastError());
484  return eExtractAbort;
485  }
486 
487  err = unzReadCurrentFile(uf, Buffer, sizeof(Buffer));
488 
489  if (err < 0)
490  {
491  DPRINT1("ERROR, unzReadCurrentFile: 0x%x\n", err);
492  break;
493  }
494  else if (err > 0)
495  {
496  DWORD dwWritten;
497  if (!WriteFile(hFile, Buffer, err, &dwWritten, NULL))
498  {
499  DPRINT1("ERROR, WriteFile: 0x%x\n", GetLastError());
500  break;
501  }
502  if (dwWritten != (DWORD)err)
503  {
504  DPRINT1("ERROR, WriteFile: dwWritten:%d err:%d\n", dwWritten, err);
505  break;
506  }
507  }
508 
509  } while (err > 0);
510 
511  /* Update Filetime */
512  FILETIME LocalFileTime;
513  DosDateTimeToFileTime((WORD)(Info->dosDate >> 16), (WORD)Info->dosDate, &LocalFileTime);
514  FILETIME FileTime;
515  LocalFileTimeToFileTime(&LocalFileTime, &FileTime);
516  SetFileTime(hFile, &FileTime, &FileTime, &FileTime);
517 
518  /* Done */
520 
521  if (err)
522  {
524  DPRINT1("ERROR, unzReadCurrentFile2: 0x%x\n", err);
525  *ErrorCode = err;
526  return eUnpackError;
527  }
528  else
529  {
531  if (err != UNZ_OK)
532  {
533  DPRINT1("ERROR(non-fatal), unzCloseCurrentFile: 0x%x\n", err);
534  }
535  }
536  return eNoError;
537  }
538 
539  bool Extract(HWND hDlg, HWND hProgress, const bool* bCancel)
540  {
543  int err = unzGetGlobalInfo64(uf, &gi);
544  if (err != UNZ_OK)
545  {
546  DPRINT1("ERROR, unzGetGlobalInfo64: 0x%x\n", err);
547  Close();
548  return false;
549  }
550 
551  CZipEnumerator zipEnum;
552  if (!zipEnum.initialize(this))
553  {
554  DPRINT1("ERROR, zipEnum.initialize\n");
555  Close();
556  return false;
557  }
558 
559  CWindow Progress(hProgress);
560  Progress.SendMessage(PBM_SETRANGE32, 0, gi.number_entry);
561  Progress.SendMessage(PBM_SETPOS, 0, 0);
562 
563  CStringA BaseDirectory = m_Directory;
564  CStringA Name;
567  int CurrentFile = 0;
568  bool bOverwriteAll = false;
569  while (zipEnum.next(Name, Info))
570  {
571  if (*bCancel)
572  {
573  Close();
574  return false;
575  }
576 
577  bool is_dir = Name.GetLength() > 0 && Name[Name.GetLength()-1] == '/';
578 
579  char CombinedPath[MAX_PATH * 2] = { 0 };
580  PathCombineA(CombinedPath, BaseDirectory, Name);
581  CStringA FullPath = CombinedPath;
582  FullPath.Replace('/', '\\'); /* SHPathPrepareForWriteA does not handle '/' */
583  Retry:
584  eZipExtractError Result = ExtractSingle(hDlg, FullPath, is_dir, &Info, Name, Password, &bOverwriteAll, bCancel, &err);
585  if (Result != eDirectoryError)
586  CurrentFile++;
587  switch (Result)
588  {
589  case eNoError:
590  break;
591 
592  case eExtractAbort:
593  case eUnpackError:
594  {
595  Close();
596  return false;
597  }
598 
599  case eDirectoryError:
600  {
601  char StrippedPath[MAX_PATH] = { 0 };
602 
603  StrCpyNA(StrippedPath, FullPath, _countof(StrippedPath));
604  if (!is_dir)
605  PathRemoveFileSpecA(StrippedPath);
606  PathStripPathA(StrippedPath);
607  if (ShowExtractError(hDlg, (LPCSTR)&StrippedPath, err, eDirectoryError) == IDRETRY)
608  goto Retry;
609  Close();
610  return false;
611  }
612 
613  case eFileError:
614  {
615  int Result = ShowExtractError(hDlg, FullPath, err, eFileError);
616  switch (Result)
617  {
618  case IDABORT:
619  Close();
620  return false;
621  case IDRETRY:
622  CurrentFile--;
623  goto Retry;
624  case IDIGNORE:
625  break;
626  }
627  break;
628  }
629 
630  case eOpenError:
631  {
632  if (err == UNZ_BADZIPFILE &&
633  Info.compression_method != 0 &&
634  Info.compression_method != Z_DEFLATED &&
635  Info.compression_method != Z_BZIP2ED)
636  {
637  if (ShowExtractError(hDlg, FullPath, Info.compression_method, eOpenError) == IDYES)
638  break;
639  }
640  Close();
641  return false;
642  }
643  }
644  if (Result == eNoError && is_dir)
645  continue;
646  Progress.SendMessage(PBM_SETPOS, CurrentFile, 0);
647  }
648 
649  Close();
650  return true;
651  }
652 
654  {
656  CStringA strErr, strText;
657  PSTR Win32ErrorString;
658 
659  if (ErrorType == eFileError || ErrorType == eOpenError)
661  else
662  strText.LoadString(GetModuleHandleA("shell32.dll"), 128); // IDS_CREATEFOLDER_DENIED
663 
664  strText.FormatMessage(strText.GetString(), path);
665 
666  if (ErrorType == eFileError || HRESULT_FACILITY(Error) == FACILITY_WIN32)
667  {
669  NULL, ErrorType == eFileError ? Error : HRESULT_CODE(Error), 0,
670  (PSTR)&Win32ErrorString, 0, NULL) != 0)
671  {
672  strErr.SetString(Win32ErrorString);
673  LocalFree(Win32ErrorString);
674  }
675  }
676  if (ErrorType == eOpenError)
678  else if (strErr.GetLength() == 0)
679  strErr.Format(IDS_UNKNOWNERROR, Error);
680 
681  strText.Append("\r\n\r\n" + strErr);
682 
683  UINT mbFlags = MB_ICONWARNING;
684  if (ErrorType == eDirectoryError)
685  mbFlags |= MB_RETRYCANCEL;
686  else if (ErrorType == eFileError)
687  mbFlags |= MB_ABORTRETRYIGNORE;
688  else if (ErrorType == eOpenError)
689  mbFlags |= MB_YESNO;
690 
691  return MessageBoxA(hDlg, strText, strTitle, mbFlags);
692  }
693 };
694 
695 
697 {
698  CZipExtract extractor(Filename);
699  extractor.runWizard();
700 }
701 
int GetLength() const
Definition: atlsimpstr.h:356
HPROPSHEETPAGE Create()
Definition: rosdlgs.h:57
CCompleteSettingsPage(CZipExtract *extract)
BOOL WINAPI WriteFile(IN HANDLE hFile, IN LPCVOID lpBuffer, IN DWORD nNumberOfBytesToWrite OPTIONAL, OUT LPDWORD lpNumberOfBytesWritten, IN LPOVERLAPPED lpOverlapped OPTIONAL)
Definition: rw.c:24
#define MAKEINTRESOURCE
Definition: winuser.h:591
const uint16_t * PCWSTR
Definition: typedefs.h:57
#define ERROR_FILE_EXISTS
Definition: winerror.h:165
#define PBM_SETRANGE32
Definition: commctrl.h:2188
#define REFIID
Definition: guiddef.h:118
#define CloseHandle
Definition: compat.h:598
#define E_NOINTERFACE
Definition: winerror.h:2364
_In_ NDIS_ERROR_CODE ErrorCode
Definition: ndis.h:4436
#define IDABORT
Definition: winuser.h:826
UINT IsDlgButtonChecked(int nIDButton) const
Definition: atlwin.h:861
HRESULT hr
Definition: shlfolder.c:183
#define IDYES
Definition: winuser.h:829
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
CStringW m_Filename
Definition: CZipExtract.cpp:13
eZipPasswordResponse _CZipAskPassword(HWND hDlg, const char *filename, CStringA &Password)
#define TRUE
Definition: types.h:120
#define COMMAND_HANDLER(id, code, func)
Definition: atlwin.h:1875
Definition: precomp.h:71
GLsizei const GLchar ** path
Definition: glext.h:7234
REFIID riid
Definition: precomp.h:44
#define IDC_BROWSE
Definition: resource.h:21
int ShowExtractError(HWND hDlg, LPCSTR path, int Error, eZipExtractError ErrorType)
uint16_t * PWSTR
Definition: typedefs.h:56
#define IDS_DECOMPRESSERROR
Definition: resource.h:51
voidp unzFile
Definition: unzip.h:70
DWORD WINAPI FormatMessageA(DWORD dwFlags, LPCVOID lpSource, DWORD dwMessageId, DWORD dwLanguageId, LPSTR lpBuffer, DWORD nSize, __ms_va_list *args)
Definition: format_msg.c:483
LRESULT OnEnChangeDirectory(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
#define UNZ_OK
Definition: unzip.h:74
_Must_inspect_result_ _In_ PFSRTL_PER_STREAM_CONTEXT Ptr
Definition: fsrtlfuncs.h:898
BOOL EnableWindow(BOOL bEnable=TRUE)
Definition: atlwin.h:489
CZipExtract(PCWSTR Filename)
Definition: CZipExtract.cpp:19
BOOL WINAPI SHGetPathFromIDListW(LPCITEMIDLIST pidl, LPWSTR pszPath)
Definition: pidl.c:1294
static HDC
Definition: imagelist.c:92
#define CALLBACK
Definition: compat.h:35
HWND hWnd
Definition: settings.c:17
#define IDC_STATUSTEXT
Definition: resource.h:40
#define BFFM_INITIALIZED
Definition: shlobj.h:1163
#define PSWIZB_NEXT
Definition: prsht.h:154
#define INVALID_HANDLE_VALUE
Definition: compat.h:590
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1040
CStringA m_Password
Definition: CZipExtract.cpp:15
void __cdecl Format(UINT nFormatID,...)
Definition: cstringt.h:753
#define UNZ_BADZIPFILE
Definition: unzip.h:79
#define PBM_SETPOS
Definition: commctrl.h:2184
bool initialize(IZip *zip)
LONG left
Definition: windef.h:306
void Close()
Definition: CZipExtract.cpp:39
LONG right
Definition: windef.h:308
#define IDC_DIRECTORY
Definition: resource.h:15
#define IDS_ERRORTITLE
Definition: resource.h:44
#define IDB_HEADER
Definition: resource.h:30
int32_t INT
Definition: typedefs.h:58
BOOL WINAPI PathRemoveFileSpecA(LPSTR lpszPath)
Definition: path.c:586
LRESULT OnPassword(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
int ZEXPORT unzClose(unzFile file)
Definition: unzip.c:808
#define IDS_WIZ_DEST_TITLE
Definition: resource.h:56
#define SendMessageCallback
Definition: winuser.h:5820
#define DWLP_MSGRESULT
Definition: winuser.h:864
IN PVCB IN PBCB OUT PDIRENT IN USHORT IN POEM_STRING Filename
Definition: fatprocs.h:934
BOOL extract(char *filename, const bin_file *bin)
Definition: mspatcha.c:158
bool m_DirectoryChanged
Definition: CZipExtract.cpp:16
#define MB_ICONWARNING
Definition: winuser.h:780
CStringW m_Directory
Definition: CZipExtract.cpp:14
BOOL WINAPI SetFileTime(IN HANDLE hFile, CONST FILETIME *lpCreationTime OPTIONAL, CONST FILETIME *lpLastAccessTime OPTIONAL, CONST FILETIME *lpLastWriteTime OPTIONAL)
Definition: fileinfo.c:948
STDMETHODIMP QueryInterface(REFIID riid, void **ppvObject)
Definition: CZipExtract.cpp:47
BOOL WINAPI SetDlgItemTextW(_In_ HWND, _In_ int, _In_ LPCWSTR)
_Must_inspect_result_ _In_ WDFCHILDLIST _In_ PWDF_CHILD_LIST_ITERATOR _Out_ WDFDEVICE _Inout_opt_ PWDF_CHILD_RETRIEVE_INFO Info
Definition: wdfchildlist.h:683
int WINAPI MessageBoxA(_In_opt_ HWND, _In_opt_ LPCSTR, _In_opt_ LPCSTR, _In_ UINT)
#define IDC_PROGRESS
Definition: resource.h:18
#define IDS_UNKNOWNERROR
Definition: resource.h:52
BOOL WINAPI LocalFileTimeToFileTime(IN CONST FILETIME *lpLocalFileTime, OUT LPFILETIME lpFileTime)
Definition: time.c:253
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
Definition: synch.c:82
int ZEXPORT unzOpenCurrentFile(unzFile file)
Definition: unzip.c:1641
void ReleaseBuffer(_In_ int nNewLength=-1)
Definition: atlsimpstr.h:372
int ZEXPORT unzGetGlobalInfo64(unzFile file, unz_global_info64 *pglobal_info)
Definition: unzip.c:828
#define FALSE
Definition: types.h:117
#define MB_YESNO
Definition: winuser.h:811
void WINAPI PathRemoveExtensionW(LPWSTR lpszPath)
Definition: path.c:823
#define BFFM_SETSELECTION
Definition: shlobj.h:1183
#define SHPPFW_DIRCREATE
Definition: shlobj.h:303
unsigned int BOOL
Definition: ntddk_ex.h:94
LPWSTR pszDisplayName
Definition: shlobj.h:1129
Definition: IZip.hpp:8
#define HRESULT_FACILITY(hr)
Definition: winerror.h:79
#define GENERIC_WRITE
Definition: nt_native.h:90
struct _PSP * HPROPSHEETPAGE
Definition: mstask.idl:90
eZipConfirmResponse _CZipAskReplace(HWND hDlg, PCSTR FullPath)
BOOL CheckDlgButton(int nIDButton, UINT nCheck)
Definition: atlwin.h:335
LONG_PTR SetWindowLongPtr(int nIndex, LONG_PTR dwNewLong)
Definition: atlwin.h:1211
BOOL WINAPI PathCompactPathW(HDC hDC, LPWSTR lpszPath, UINT dx)
Definition: path.c:2890
#define BIF_RETURNFSANCESTORS
Definition: shlobj.h:1147
#define STDMETHODIMP
Definition: basetyps.h:43
#define FORMAT_MESSAGE_ALLOCATE_BUFFER
Definition: winbase.h:416
struct NameRec_ * Name
Definition: cdprocs.h:459
ULONG Release()
BOOL GetWindowRect(LPRECT lpRect) const
Definition: atlwin.h:764
Definition: precomp.h:63
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:136
eZipConfirmResponse
Definition: precomp.h:69
HWND WINAPI GetDesktopWindow(void)
Definition: window.c:656
int ZEXPORT unzReadCurrentFile(unzFile file, voidp buf, unsigned len)
Definition: unzip.c:1684
void SetString(_In_opt_z_ PCXSTR pszSrc)
Definition: atlsimpstr.h:303
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
Definition: wsk.h:426
LONG_PTR LPARAM
Definition: windef.h:208
BOOL WINAPI DeleteFileA(IN LPCSTR lpFileName)
Definition: delete.c:24
#define IDS_WIZ_BROWSE_TITLE
Definition: resource.h:61
Definition: precomp.h:73
#define COMMAND_ID_HANDLER(id, func)
Definition: atlwin.h:1884
Definition: bufpool.h:45
STDMETHODIMP_(unzFile) getZip()
Definition: CZipExtract.cpp:65
#define IDS_CANTEXTRACTFILE
Definition: resource.h:50
#define Z_BZIP2ED
Definition: unzip.h:62
INT_PTR WINAPI PropertySheetW(LPCPROPSHEETHEADERW lppsh)
Definition: propsheet.c:2905
Definition: stddef.h:5
const char * LPCSTR
Definition: xmlstorage.h:183
#define SW_SHOW
Definition: winuser.h:769
#define FORMAT_MESSAGE_FROM_SYSTEM
Definition: winbase.h:420
HWND GetDlgItem(int nID)
Definition: atlwin.h:571
#define PSWIZB_FINISH
Definition: prsht.h:155
LPCWSTR lpszTitle
Definition: shlobj.h:1130
DWORD dwErr
Definition: service.c:36
#define IDC_SHOW_EXTRACTED
Definition: resource.h:23
#define StrCpyNA
Definition: shlwapi.h:1514
unzFile uf
Definition: CZipExtract.cpp:17
int ZEXPORT unzCloseCurrentFile(unzFile file)
Definition: unzip.c:2004
#define BIF_NEWDIALOGSTYLE
Definition: shlobj.h:1150
__wchar_t WCHAR
Definition: xmlstorage.h:180
BOOL WINAPI DosDateTimeToFileTime(IN WORD wFatDate, IN WORD wFatTime, OUT LPFILETIME lpFileTime)
Definition: time.c:75
LONG HRESULT
Definition: typedefs.h:79
#define END_MSG_MAP()
Definition: atlwin.h:1848
HINSTANCE hInstance
Definition: prsht.h:296
#define _countof(array)
Definition: sndvol32.h:68
const GUID IID_IUnknown
#define FAILED_UNEXPECTEDLY(hr)
Definition: shellutils.h:82
unzFile ZEXPORT unzOpen2_64(const void *path, zlib_filefunc64_def *pzlib_filefunc_def)
Definition: unzip.c:778
#define MAX_PATH
Definition: compat.h:34
zlib_filefunc64_def g_FFunc
Definition: zipfldr.cpp:43
#define WINAPI
Definition: msvc.h:6
#define IDS_WIZ_COMPL_TITLE
Definition: resource.h:58
PCXSTR GetString() const
Definition: atlsimpstr.h:361
BOOL CenterWindow(HWND hWndCenter=NULL)
Definition: atlwin.h:309
unsigned short WORD
Definition: ntddk_ex.h:93
unsigned long DWORD
Definition: ntddk_ex.h:95
STDMETHODIMP_(ULONG) AddRef(void)
Definition: CZipExtract.cpp:57
LPSTR WINAPI PathCombineA(LPSTR lpszDest, LPCSTR lpszDir, LPCSTR lpszFile)
Definition: path.c:159
BOOL Error
Definition: chkdsk.c:66
#define IDRETRY
Definition: winuser.h:827
DWORD dwFlags
Definition: prsht.h:294
#define IDD_PROPPAGECOMPLETE
Definition: resource.h:21
int ZEXPORT unzOpenCurrentFilePassword(unzFile file, const char *password)
Definition: unzip.c:1646
Definition: ncftp.h:89
ULONG AddRef()
void WINAPI PathStripPathA(LPSTR lpszPath)
Definition: path.c:677
void runWizard()
#define FILE_ATTRIBUTE_NORMAL
Definition: compat.h:137
static const WCHAR L[]
Definition: oid.c:1250
_In_ PSCSI_REQUEST_BLOCK _Out_ NTSTATUS _Inout_ BOOLEAN * Retry
Definition: classpnp.h:310
T1_FIELD_DICT_PRIVATE password
Definition: t1tokens.h:64
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1175
CExtractSettingsPage(CZipExtract *extract, CStringA *password)
Definition: CZipExtract.cpp:81
#define CHAIN_MSG_MAP(theChainClass)
Definition: atlwin.h:1929
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
Definition: loader.c:812
HWND m_hWnd
Definition: atlwin.h:268
REFIID LPVOID * ppvObject
Definition: precomp.h:44
#define MINIZIP_PASSWORD_FLAG
Definition: precomp.h:43
#define err(...)
UINT GetDlgItemText(int nID, LPTSTR lpStr, int nMaxCount) const
Definition: atlwin.h:583
#define PSP_USETITLE
Definition: prsht.h:26
_In_ HANDLE hFile
Definition: mswsock.h:90
#define PSBTN_NEXT
Definition: prsht.h:147
static INT CALLBACK s_BrowseCallbackProc(HWND hWnd, UINT uMsg, LPARAM lp, LPARAM pData)
unsigned char BYTE
Definition: xxhash.c:193
EXTERN_C HRESULT WINAPI SHPathPrepareForWriteA(HWND hwnd, IUnknown *modless, LPCSTR path, DWORD flags)
Definition: shlfileop.cpp:2227
int ReleaseDC(HDC hDC)
Definition: atlwin.h:1009
#define Z_DEFLATED
Definition: zlib.h:146
HPROPSHEETPAGE * phpage
Definition: prsht.h:309
LPITEMIDLIST WINAPI SHBrowseForFolderW(LPBROWSEINFOW lpbi)
Definition: brsfolder.c:1411
void Append(_In_count_(nLength) PCXSTR pszSrc, _In_ int nLength)
Definition: atlsimpstr.h:265
#define FACILITY_WIN32
Definition: winerror.h:27
eZipExtractError ExtractSingle(HWND hDlg, LPCSTR FullPath, bool is_dir, unz_file_info64 *Info, CStringA Name, CStringA Password, bool *bOverwriteAll, const bool *bCancel, int *ErrorCode)
int Replace(PCXSTR pszOld, PCXSTR pszNew)
Definition: cstringt.h:811
void __cdecl FormatMessage(UINT nFormatID,...)
Definition: cstringt.h:780
#define S_OK
Definition: intsafe.h:52
#define CREATE_ALWAYS
Definition: disk.h:72
UINT ulFlags
Definition: shlobj.h:1131
#define MB_ABORTRETRYIGNORE
Definition: winuser.h:785
PRTL_UNICODE_STRING_BUFFER Path
bool next(CStringA &name, unz_file_info64 &info)
#define BIF_RETURNONLYFSDIRS
Definition: shlobj.h:1144
int WINAPI GetWindowTextW(HWND hWnd, LPWSTR lpString, int nMaxCount)
Definition: window.c:1412
LPARAM lParam
Definition: shlobj.h:1133
HLOCAL NTAPI LocalFree(HLOCAL hMem)
Definition: heapmem.c:1577
STDMETHODIMP_(ULONG) Release(void)
Definition: CZipExtract.cpp:61
void _CZipExtract_runWizard(PCWSTR Filename)
eZipExtractError
Definition: precomp.h:79
signed char * PSTR
Definition: retypes.h:7
BFFCALLBACK lpfn
Definition: shlobj.h:1132
#define IDB_WATERMARK
Definition: resource.h:4
unsigned int UINT
Definition: ndis.h:50
#define NULL
Definition: types.h:112
eZipPasswordResponse
Definition: precomp.h:60
#define IDC_DESTDIR
Definition: resource.h:22
#define BST_CHECKED
Definition: winuser.h:197
#define BEGIN_MSG_MAP(theClass)
Definition: atlwin.h:1829
#define DPRINT1
Definition: precomp.h:8
Definition: precomp.h:62
#define IDS_WIZ_TITLE
Definition: resource.h:55
#define HRESULT_CODE(hr)
Definition: winerror.h:76
LRESULT OnBrowse(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
GLuint res
Definition: glext.h:9613
#define SHPPFW_NONE
Definition: shlobj.h:302
HINSTANCE WINAPI ShellExecuteW(HWND hwnd, LPCWSTR lpVerb, LPCWSTR lpFile, LPCWSTR lpParameters, LPCWSTR lpDirectory, INT nShowCmd)
Definition: shlexec.cpp:2274
LRESULT SendMessage(UINT message, WPARAM wParam=0, LPARAM lParam=0)
Definition: atlwin.h:1051
unsigned int ULONG
Definition: retypes.h:1
BOOL LoadString(_In_ UINT nID)
Definition: cstringt.h:591
#define MB_RETRYCANCEL
Definition: winuser.h:799
static const WCHAR dc[]
#define SHPPFW_IGNOREFILENAME
Definition: shlobj.h:306
#define CREATE_NEW
Definition: disk.h:69
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
CWindow GetParent() const
Definition: atlwin.h:654
#define IDS_WIZ_DEST_SUBTITLE
Definition: resource.h:57
#define CreateFileA(a, b, c, d, e, f, g)
Definition: compat.h:599
#define IDS_WIZ_COMPL_SUBTITLE
Definition: resource.h:59
#define PSM_PRESSBUTTON
Definition: prsht.h:100
TW_UINT32 TW_UINT16 TW_UINT16 TW_MEMREF pData
Definition: twain.h:1827
LONG_PTR LRESULT
Definition: windef.h:209
#define INFINITE
Definition: serial.h:102
#define IDD_PROPPAGEDESTINATION
Definition: resource.h:14
static DWORD WINAPI ExtractEntry(LPVOID lpParam)
static char title[]
Definition: ps.c:92
bool Extract(HWND hDlg, HWND hProgress, const bool *bCancel)
HDC GetDC()
Definition: atlwin.h:513
#define IDIGNORE
Definition: winuser.h:828
#define IDS_EXTRACTING
Definition: resource.h:49
#define IDC_PASSWORD
Definition: resource.h:17
ZPOS64_T number_entry
Definition: unzip.h:98
#define EN_CHANGE
Definition: winuser.h:2005