ReactOS 0.4.15-dev-6068-g8061a6f
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
11 public IZip
12{
18public:
21 ,uf(NULL)
22 {
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 {
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 {
105 {
106 /* We enter here when extraction has finished, and go to next page if it succeeded */
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 */
130
134 SetDlgItemTextW(IDC_STATUSTEXT, strExtracting);
135
138
140
143 this,
144 0, NULL);
146 {
147 /* Extraction thread creation failed, do not go to the next page */
149 DPRINT1("ERROR, m_hExtractionThread: CreateThread failed: 0x%x\n", err);
151
153
158 }
159 return TRUE;
160 }
161
163 {
165 }
166
168 {
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 */
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 {
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
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
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
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
331 };
332
333
334 /* NOTE: This callback is needed to set large icon correctly. */
336 {
337 if (uMsg == PSCB_INITIALIZED)
338 {
339 HICON hIcon = LoadIconW(_AtlBaseModule.GetResourceInstance(), MAKEINTRESOURCEW(IDI_ZIPFLDR));
340 CWindow dlg(hwndDlg);
341 dlg.SetIcon(hIcon, TRUE);
342 }
343
344 return 0;
345 }
346
348 {
349 PROPSHEETHEADERW psh = { sizeof(psh), 0 };
350 psh.dwFlags = PSH_WIZARD97 | PSH_HEADER | PSH_USEICONID | PSH_USECALLBACK;
351 psh.hInstance = _AtlBaseModule.GetResourceInstance();
352
353 CExtractSettingsPage extractPage(this, &m_Password);
354 CCompleteSettingsPage completePage(this);
355 HPROPSHEETPAGE hpsp[] =
356 {
357 extractPage.Create(),
358 completePage.Create()
359 };
360
361 psh.phpage = hpsp;
362 psh.nPages = _countof(hpsp);
364 psh.pszbmWatermark = MAKEINTRESOURCE(IDB_WATERMARK);
365 psh.pszbmHeader = MAKEINTRESOURCE(IDB_HEADER);
367
368 PropertySheetW(&psh);
369 }
370
372 HWND hDlg,
373 LPCSTR FullPath,
374 bool is_dir,
378 bool* bOverwriteAll,
379 const bool* bCancel,
380 int* ErrorCode
381 )
382 {
383 int err;
384 BYTE Buffer[2048];
386 HRESULT hr = SHPathPrepareForWriteA(hDlg, NULL, FullPath, dwFlags);
388 {
389 *ErrorCode = hr;
390 return eDirectoryError;
391 }
392 if (is_dir)
393 return eNoError;
394
395 if (Info->flag & MINIZIP_PASSWORD_FLAG)
396 {
398 do
399 {
400 /* If there is a password set, try it */
401 if (!Password.IsEmpty())
402 {
404 if (err == UNZ_OK)
405 {
406 /* Try to read some bytes, because unzOpenCurrentFilePassword does not return failure */
407 char Buf[10];
408 err = unzReadCurrentFile(uf, Buf, sizeof(Buf));
410 if (err >= UNZ_OK)
411 {
412 /* 're'-open the file so that we can begin to extract */
414 break;
415 }
416 }
417 }
419 } while (Response == eAccept);
420
421 if (Response == eSkip)
422 {
423 return eNoError;
424 }
425 else if (Response == eAbort)
426 {
427 return eExtractAbort;
428 }
429 }
430 else
431 {
433 }
434
435 if (err != UNZ_OK)
436 {
437 DPRINT1("ERROR, unzOpenCurrentFilePassword: 0x%x\n", err);
438 *ErrorCode = err;
439 return eOpenError;
440 }
441
444 {
447 {
448 bool bOverwrite = *bOverwriteAll;
449 if (!*bOverwriteAll)
450 {
452 switch (Result)
453 {
454 case eYesToAll:
455 *bOverwriteAll = true;
456 /* fall through */
457 case eYes:
458 bOverwrite = true;
459 break;
460 case eNo:
461 break;
462 case eCancel:
464 return eExtractAbort;
465 }
466 }
467
468 if (bOverwrite)
469 {
472 {
474 }
475 }
476 else
477 {
479 return eNoError;
480 }
481 }
483 {
485 DPRINT1("ERROR, CreateFileA: 0x%x (%s)\n", dwErr, *bOverwriteAll ? "Y" : "N");
486 *ErrorCode = dwErr;
487 return eFileError;
488 }
489 }
490
491 do
492 {
493 if (*bCancel)
494 {
496 BOOL deleteResult = DeleteFileA(FullPath);
497 if (!deleteResult)
498 DPRINT1("ERROR, DeleteFileA: 0x%x\n", GetLastError());
499 return eExtractAbort;
500 }
501
503
504 if (err < 0)
505 {
506 DPRINT1("ERROR, unzReadCurrentFile: 0x%x\n", err);
507 break;
508 }
509 else if (err > 0)
510 {
511 DWORD dwWritten;
512 if (!WriteFile(hFile, Buffer, err, &dwWritten, NULL))
513 {
514 DPRINT1("ERROR, WriteFile: 0x%x\n", GetLastError());
515 break;
516 }
517 if (dwWritten != (DWORD)err)
518 {
519 DPRINT1("ERROR, WriteFile: dwWritten:%d err:%d\n", dwWritten, err);
520 break;
521 }
522 }
523
524 } while (err > 0);
525
526 /* Update Filetime */
527 FILETIME LocalFileTime;
528 DosDateTimeToFileTime((WORD)(Info->dosDate >> 16), (WORD)Info->dosDate, &LocalFileTime);
529 FILETIME FileTime;
530 LocalFileTimeToFileTime(&LocalFileTime, &FileTime);
531 SetFileTime(hFile, &FileTime, &FileTime, &FileTime);
532
533 /* Done */
535
536 if (err)
537 {
539 DPRINT1("ERROR, unzReadCurrentFile2: 0x%x\n", err);
540 *ErrorCode = err;
541 return eUnpackError;
542 }
543 else
544 {
546 if (err != UNZ_OK)
547 {
548 DPRINT1("ERROR(non-fatal), unzCloseCurrentFile: 0x%x\n", err);
549 }
550 }
551 return eNoError;
552 }
553
554 bool Extract(HWND hDlg, HWND hProgress, const bool* bCancel)
555 {
558 int err = unzGetGlobalInfo64(uf, &gi);
559 if (err != UNZ_OK)
560 {
561 DPRINT1("ERROR, unzGetGlobalInfo64: 0x%x\n", err);
562 Close();
563 return false;
564 }
565
566 CZipEnumerator zipEnum;
567 if (!zipEnum.initialize(this))
568 {
569 DPRINT1("ERROR, zipEnum.initialize\n");
570 Close();
571 return false;
572 }
573
574 CWindow Progress(hProgress);
575 Progress.SendMessage(PBM_SETRANGE32, 0, gi.number_entry);
576 Progress.SendMessage(PBM_SETPOS, 0, 0);
577
578 CStringA BaseDirectory = m_Directory;
582 int CurrentFile = 0;
583 bool bOverwriteAll = false;
584 while (zipEnum.next(Name, Info))
585 {
586 if (*bCancel)
587 {
588 Close();
589 return false;
590 }
591
592 bool is_dir = Name.GetLength() > 0 && Name[Name.GetLength()-1] == '/';
593
594 char CombinedPath[MAX_PATH * 2] = { 0 };
595 PathCombineA(CombinedPath, BaseDirectory, Name);
596 CStringA FullPath = CombinedPath;
597 FullPath.Replace('/', '\\'); /* SHPathPrepareForWriteA does not handle '/' */
598 Retry:
599 eZipExtractError Result = ExtractSingle(hDlg, FullPath, is_dir, &Info, Name, Password, &bOverwriteAll, bCancel, &err);
600 if (Result != eDirectoryError)
601 CurrentFile++;
602 switch (Result)
603 {
604 case eNoError:
605 break;
606
607 case eExtractAbort:
608 case eUnpackError:
609 {
610 Close();
611 return false;
612 }
613
614 case eDirectoryError:
615 {
616 char StrippedPath[MAX_PATH] = { 0 };
617
618 StrCpyNA(StrippedPath, FullPath, _countof(StrippedPath));
619 if (!is_dir)
620 PathRemoveFileSpecA(StrippedPath);
621 PathStripPathA(StrippedPath);
622 if (ShowExtractError(hDlg, (LPCSTR)&StrippedPath, err, eDirectoryError) == IDRETRY)
623 goto Retry;
624 Close();
625 return false;
626 }
627
628 case eFileError:
629 {
630 int Result = ShowExtractError(hDlg, FullPath, err, eFileError);
631 switch (Result)
632 {
633 case IDABORT:
634 Close();
635 return false;
636 case IDRETRY:
637 CurrentFile--;
638 goto Retry;
639 case IDIGNORE:
640 break;
641 }
642 break;
643 }
644
645 case eOpenError:
646 {
647 if (err == UNZ_BADZIPFILE &&
648 Info.compression_method != 0 &&
649 Info.compression_method != Z_DEFLATED &&
650 Info.compression_method != Z_BZIP2ED)
651 {
652 if (ShowExtractError(hDlg, FullPath, Info.compression_method, eOpenError) == IDYES)
653 break;
654 }
655 Close();
656 return false;
657 }
658 }
659 if (Result == eNoError && is_dir)
660 continue;
661 Progress.SendMessage(PBM_SETPOS, CurrentFile, 0);
662 }
663
664 Close();
665 return true;
666 }
667
669 {
671 CStringA strErr, strText;
672 PSTR Win32ErrorString;
673
674 if (ErrorType == eFileError || ErrorType == eOpenError)
676 else
677 strText.LoadString(GetModuleHandleA("shell32.dll"), 128); // IDS_CREATEFOLDER_DENIED
678
679 strText.FormatMessage(strText.GetString(), path);
680
681 if (ErrorType == eFileError || HRESULT_FACILITY(Error) == FACILITY_WIN32)
682 {
684 NULL, ErrorType == eFileError ? Error : HRESULT_CODE(Error), 0,
685 (PSTR)&Win32ErrorString, 0, NULL) != 0)
686 {
687 strErr.SetString(Win32ErrorString);
688 LocalFree(Win32ErrorString);
689 }
690 }
691 if (ErrorType == eOpenError)
693 else if (strErr.GetLength() == 0)
695
696 strText.Append("\r\n\r\n" + strErr);
697
698 UINT mbFlags = MB_ICONWARNING;
699 if (ErrorType == eDirectoryError)
700 mbFlags |= MB_RETRYCANCEL;
701 else if (ErrorType == eFileError)
702 mbFlags |= MB_ABORTRETRYIGNORE;
703 else if (ErrorType == eOpenError)
704 mbFlags |= MB_YESNO;
705
706 return MessageBoxA(hDlg, strText, strTitle, mbFlags);
707 }
708};
709
710
712{
713 CZipExtract extractor(Filename);
714 extractor.runWizard();
715}
716
eZipConfirmResponse _CZipAskReplace(HWND hDlg, PCSTR FullPath)
void _CZipExtract_runWizard(PCWSTR Filename)
eZipPasswordResponse _CZipAskPassword(HWND hDlg, const char *filename, CStringA &Password)
PRTL_UNICODE_STRING_BUFFER Path
struct NameRec_ * Name
Definition: cdprocs.h:460
HWND hWnd
Definition: settings.c:17
#define IDB_HEADER
Definition: resource.h:30
#define DPRINT1
Definition: precomp.h:8
DWORD dwErr
Definition: service.c:36
#define IDB_WATERMARK
Definition: resource.h:4
BOOL Error
Definition: chkdsk.c:66
#define STDMETHODIMP
Definition: basetyps.h:43
const GUID IID_IUnknown
#define IDC_BROWSE
Definition: resource.h:21
HPROPSHEETPAGE Create()
Definition: rosdlgs.h:57
void Append(_In_count_(nLength) PCXSTR pszSrc, _In_ int nLength)
Definition: atlsimpstr.h:265
int GetLength() const
Definition: atlsimpstr.h:356
PCXSTR GetString() const
Definition: atlsimpstr.h:361
void SetString(_In_opt_z_ PCXSTR pszSrc)
Definition: atlsimpstr.h:303
void ReleaseBuffer(_In_ int nNewLength=-1)
Definition: atlsimpstr.h:372
int Replace(PCXSTR pszOld, PCXSTR pszNew)
Definition: cstringt.h:838
BOOL LoadString(_In_ UINT nID)
Definition: cstringt.h:591
void __cdecl Format(UINT nFormatID,...)
Definition: cstringt.h:770
void __cdecl FormatMessage(UINT nFormatID,...)
Definition: cstringt.h:807
UINT IsDlgButtonChecked(int nIDButton) const
Definition: atlwin.h:920
HDC GetDC()
Definition: atlwin.h:541
BOOL CheckDlgButton(int nIDButton, UINT nCheck)
Definition: atlwin.h:363
BOOL CenterWindow(HWND hWndCenter=NULL)
Definition: atlwin.h:309
HWND GetDlgItem(_In_ int nID) const
Definition: atlwin.h:599
LRESULT SendMessage(UINT message, WPARAM wParam=0, LPARAM lParam=0)
Definition: atlwin.h:1110
HICON SetIcon(HICON hIcon, BOOL bBigIcon=TRUE)
Definition: atlwin.h:1210
BOOL GetWindowRect(LPRECT lpRect) const
Definition: atlwin.h:810
CWindow GetParent() const
Definition: atlwin.h:694
int ReleaseDC(HDC hDC)
Definition: atlwin.h:1068
HWND m_hWnd
Definition: atlwin.h:267
BOOL EnableWindow(BOOL bEnable=TRUE)
Definition: atlwin.h:517
Definition: bufpool.h:45
void Attach(T *lp)
Definition: atlalloc.h:162
CCompleteSettingsPage(CZipExtract *extract)
CExtractSettingsPage(CZipExtract *extract, CStringA *password)
Definition: CZipExtract.cpp:81
LRESULT OnEnChangeDirectory(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
LRESULT OnBrowse(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
LRESULT OnPassword(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
static INT CALLBACK s_BrowseCallbackProc(HWND hWnd, UINT uMsg, LPARAM lp, LPARAM pData)
static DWORD WINAPI ExtractEntry(LPVOID lpParam)
void runWizard()
STDMETHODIMP_(ULONG) Release(void)
Definition: CZipExtract.cpp:61
void Close()
Definition: CZipExtract.cpp:39
int ShowExtractError(HWND hDlg, LPCSTR path, int Error, eZipExtractError ErrorType)
static INT CALLBACK s_PropSheetCallbackProc(HWND hwndDlg, UINT uMsg, LPARAM lParam)
bool m_DirectoryChanged
Definition: CZipExtract.cpp:16
STDMETHODIMP_(ULONG) AddRef(void)
Definition: CZipExtract.cpp:57
CStringW m_Filename
Definition: CZipExtract.cpp:13
CZipExtract(PCWSTR Filename)
Definition: CZipExtract.cpp:19
eZipExtractError ExtractSingle(HWND hDlg, LPCSTR FullPath, bool is_dir, unz_file_info64 *Info, CStringA Name, CStringA Password, bool *bOverwriteAll, const bool *bCancel, int *ErrorCode)
STDMETHODIMP_(unzFile) getZip()
Definition: CZipExtract.cpp:65
STDMETHODIMP QueryInterface(REFIID riid, void **ppvObject)
Definition: CZipExtract.cpp:47
CStringW m_Directory
Definition: CZipExtract.cpp:14
CStringA m_Password
Definition: CZipExtract.cpp:15
unzFile uf
Definition: CZipExtract.cpp:17
bool Extract(HWND hDlg, HWND hProgress, const bool *bCancel)
_In_ PSCSI_REQUEST_BLOCK _Out_ NTSTATUS _Inout_ BOOLEAN * Retry
Definition: classpnp.h:312
LPARAM lParam
Definition: combotst.c:139
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define IDC_STATUSTEXT
Definition: resource.h:40
zlib_filefunc64_def g_FFunc
Definition: zipfldr.cpp:43
#define MINIZIP_PASSWORD_FLAG
Definition: precomp.h:43
eZipExtractError
Definition: precomp.h:80
@ eUnpackError
Definition: precomp.h:86
@ eNoError
Definition: precomp.h:81
@ eExtractAbort
Definition: precomp.h:82
@ eOpenError
Definition: precomp.h:85
@ eFileError
Definition: precomp.h:84
@ eDirectoryError
Definition: precomp.h:83
eZipPasswordResponse
Definition: precomp.h:61
@ eAccept
Definition: precomp.h:64
@ eSkip
Definition: precomp.h:63
@ eAbort
Definition: precomp.h:62
eZipConfirmResponse
Definition: precomp.h:70
@ eCancel
Definition: precomp.h:74
@ eNo
Definition: precomp.h:73
@ eYes
Definition: precomp.h:71
@ eYesToAll
Definition: precomp.h:72
#define IDS_EXTRACTING
Definition: resource.h:52
#define IDC_DIRECTORY
Definition: resource.h:18
#define IDS_WIZ_BROWSE_TITLE
Definition: resource.h:64
#define IDS_CANTEXTRACTFILE
Definition: resource.h:53
#define IDS_WIZ_COMPL_SUBTITLE
Definition: resource.h:62
#define IDS_WIZ_COMPL_TITLE
Definition: resource.h:61
#define IDC_DESTDIR
Definition: resource.h:25
#define IDC_SHOW_EXTRACTED
Definition: resource.h:26
#define IDC_PASSWORD
Definition: resource.h:20
#define IDD_PROPPAGEDESTINATION
Definition: resource.h:17
#define IDS_ERRORTITLE
Definition: resource.h:47
#define IDS_WIZ_DEST_TITLE
Definition: resource.h:59
#define IDS_DECOMPRESSERROR
Definition: resource.h:54
#define IDC_PROGRESS
Definition: resource.h:21
#define IDS_WIZ_DEST_SUBTITLE
Definition: resource.h:60
#define IDI_ZIPFLDR
Definition: resource.h:4
#define IDD_PROPPAGECOMPLETE
Definition: resource.h:24
#define IDS_UNKNOWNERROR
Definition: resource.h:55
#define IDS_WIZ_TITLE
Definition: resource.h:58
INT_PTR WINAPI PropertySheetW(LPCPROPSHEETHEADERW lppsh)
Definition: propsheet.c:2905
#define CloseHandle
Definition: compat.h:739
#define INVALID_HANDLE_VALUE
Definition: compat.h:731
#define CreateFileA(a, b, c, d, e, f, g)
Definition: compat.h:740
#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
BOOL WINAPI DeleteFileA(IN LPCSTR lpFileName)
Definition: delete.c:24
BOOL WINAPI SetFileTime(IN HANDLE hFile, CONST FILETIME *lpCreationTime OPTIONAL, CONST FILETIME *lpLastAccessTime OPTIONAL, CONST FILETIME *lpLastWriteTime OPTIONAL)
Definition: fileinfo.c:948
BOOL WINAPI WriteFile(IN HANDLE hFile, IN LPCVOID lpBuffer, IN DWORD nNumberOfBytesToWrite OPTIONAL, OUT LPDWORD lpNumberOfBytesWritten, IN LPOVERLAPPED lpOverlapped OPTIONAL)
Definition: rw.c:24
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
Definition: loader.c:812
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 DosDateTimeToFileTime(IN WORD wFatDate, IN WORD wFatTime, OUT LPFILETIME lpFileTime)
Definition: time.c:75
BOOL WINAPI LocalFileTimeToFileTime(IN CONST FILETIME *lpLocalFileTime, OUT LPFILETIME lpFileTime)
Definition: time.c:253
DWORD WINAPI FormatMessageA(DWORD dwFlags, LPCVOID lpSource, DWORD dwMessageId, DWORD dwLanguageId, LPSTR lpBuffer, DWORD nSize, __ms_va_list *args)
Definition: format_msg.c:483
LPITEMIDLIST WINAPI SHBrowseForFolderW(LPBROWSEINFOW lpbi)
Definition: brsfolder.c:1406
LPSTR WINAPI PathCombineA(LPSTR lpszDest, LPCSTR lpszDir, LPCSTR lpszFile)
Definition: path.c:159
void WINAPI PathStripPathA(LPSTR lpszPath)
Definition: path.c:677
BOOL WINAPI PathRemoveFileSpecA(LPSTR lpszPath)
Definition: path.c:586
void WINAPI PathRemoveExtensionW(LPWSTR lpszPath)
Definition: path.c:823
BOOL WINAPI PathCompactPathW(HDC hDC, LPWSTR lpszPath, UINT dx)
Definition: path.c:2891
#define INFINITE
Definition: serial.h:102
static void extract(LPCWSTR cabfile, LPWSTR destdir)
Definition: extrac32.c:99
IN PVCB IN PBCB OUT PDIRENT IN USHORT IN POEM_STRING Filename
Definition: fatprocs.h:939
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
unsigned short WORD
Definition: ntddk_ex.h:93
_Must_inspect_result_ _In_ PFSRTL_PER_STREAM_CONTEXT Ptr
Definition: fsrtlfuncs.h:898
GLuint res
Definition: glext.h:9613
HLOCAL NTAPI LocalFree(HLOCAL hMem)
Definition: heapmem.c:1594
REFIID riid
Definition: atlbase.h:39
ULONG AddRef()
ULONG Release()
#define S_OK
Definition: intsafe.h:52
#define CHAIN_MSG_MAP(theChainClass)
Definition: atlwin.h:1992
#define BEGIN_MSG_MAP(theClass)
Definition: atlwin.h:1892
#define COMMAND_ID_HANDLER(id, func)
Definition: atlwin.h:1947
#define END_MSG_MAP()
Definition: atlwin.h:1911
#define COMMAND_HANDLER(id, code, func)
Definition: atlwin.h:1938
static const WCHAR dc[]
#define CREATE_ALWAYS
Definition: disk.h:72
#define CREATE_NEW
Definition: disk.h:69
static HDC
Definition: imagelist.c:92
static HICON
Definition: imagelist.c:84
static WCHAR password[]
Definition: url.c:33
HICON hIcon
Definition: msconfig.c:44
struct _PSP * HPROPSHEETPAGE
Definition: mstask.idl:90
_In_ HANDLE hFile
Definition: mswsock.h:90
unsigned int UINT
Definition: ndis.h:50
_In_ NDIS_ERROR_CODE ErrorCode
Definition: ndis.h:4436
#define GENERIC_WRITE
Definition: nt_native.h:90
#define L(x)
Definition: ntvdm.h:50
#define false
Definition: osdep.h:35
BOOL WINAPI SHGetPathFromIDListW(LPCITEMIDLIST pidl, LPWSTR pszPath)
Definition: pidl.c:1298
#define PSH_USECALLBACK
Definition: prsht.h:48
#define PSP_USETITLE
Definition: prsht.h:26
#define PSWIZB_NEXT
Definition: prsht.h:154
#define PSWIZB_FINISH
Definition: prsht.h:155
#define PSBTN_NEXT
Definition: prsht.h:147
#define PSH_USEICONID
Definition: prsht.h:42
#define PSCB_INITIALIZED
Definition: prsht.h:75
#define PSM_PRESSBUTTON
Definition: prsht.h:100
static char title[]
Definition: ps.c:92
#define PBM_SETRANGE32
Definition: commctrl.h:2188
#define PBM_SETPOS
Definition: commctrl.h:2184
#define REFIID
Definition: guiddef.h:118
#define err(...)
#define FAILED_UNEXPECTEDLY(hr)
Definition: shellutils.h:82
HINSTANCE WINAPI ShellExecuteW(HWND hwnd, LPCWSTR lpVerb, LPCWSTR lpFile, LPCWSTR lpParameters, LPCWSTR lpDirectory, INT nShowCmd)
Definition: shlexec.cpp:2346
EXTERN_C HRESULT WINAPI SHPathPrepareForWriteA(HWND hwnd, IUnknown *modless, LPCSTR path, DWORD flags)
Definition: shlfileop.cpp:2291
HRESULT hr
Definition: shlfolder.c:183
#define BIF_RETURNONLYFSDIRS
Definition: shlobj.h:1144
#define BIF_RETURNFSANCESTORS
Definition: shlobj.h:1147
#define SHPPFW_IGNOREFILENAME
Definition: shlobj.h:306
#define BFFM_SETSELECTION
Definition: shlobj.h:1183
#define SHPPFW_DIRCREATE
Definition: shlobj.h:303
#define BFFM_INITIALIZED
Definition: shlobj.h:1163
#define SHPPFW_NONE
Definition: shlobj.h:302
#define BIF_NEWDIALOGSTYLE
Definition: shlobj.h:1150
#define StrCpyNA
Definition: shlwapi.h:1514
#define _countof(array)
Definition: sndvol32.h:68
bool next(CStringA &name, unz_file_info64 &info)
bool initialize(IZip *zip)
Definition: IZip.hpp:9
Definition: ncftp.h:89
HINSTANCE hInstance
Definition: prsht.h:296
DWORD dwFlags
Definition: prsht.h:294
LPCWSTR pszIcon
Definition: prsht.h:299
PFNPROPSHEETCALLBACK pfnCallback
Definition: prsht.h:311
HPROPSHEETPAGE * phpage
Definition: prsht.h:309
BFFCALLBACK lpfn
Definition: shlobj.h:1132
UINT ulFlags
Definition: shlobj.h:1131
LPWSTR pszDisplayName
Definition: shlobj.h:1129
LPCWSTR lpszTitle
Definition: shlobj.h:1130
LPARAM lParam
Definition: shlobj.h:1133
LONG right
Definition: windef.h:308
LONG left
Definition: windef.h:306
ZPOS64_T number_entry
Definition: unzip.h:98
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
Definition: synch.c:82
@ Password
Definition: telnetd.h:65
#define SetWindowLongPtr
Definition: treelist.c:70
TW_UINT32 TW_UINT16 TW_UINT16 TW_MEMREF pData
Definition: twain.h:1830
uint16_t * PWSTR
Definition: typedefs.h:56
char * PSTR
Definition: typedefs.h:51
const uint16_t * PCWSTR
Definition: typedefs.h:57
int32_t INT
Definition: typedefs.h:58
uint32_t ULONG
Definition: typedefs.h:59
int ZEXPORT unzOpenCurrentFilePassword(unzFile file, const char *password)
Definition: unzip.c:1653
unzFile ZEXPORT unzOpen2_64(const void *path, zlib_filefunc64_def *pzlib_filefunc_def)
Definition: unzip.c:783
int ZEXPORT unzOpenCurrentFile(unzFile file)
Definition: unzip.c:1648
int ZEXPORT unzReadCurrentFile(unzFile file, voidp buf, unsigned len)
Definition: unzip.c:1691
int ZEXPORT unzGetGlobalInfo64(unzFile file, unz_global_info64 *pglobal_info)
Definition: unzip.c:833
int ZEXPORT unzCloseCurrentFile(unzFile file)
Definition: unzip.c:2014
int ZEXPORT unzClose(unzFile file)
Definition: unzip.c:813
#define UNZ_BADZIPFILE
Definition: unzip.h:79
voidp unzFile
Definition: unzip.h:70
#define UNZ_OK
Definition: unzip.h:74
#define Z_BZIP2ED
Definition: unzip.h:62
_Must_inspect_result_ _In_ WDFCHILDLIST _In_ PWDF_CHILD_LIST_ITERATOR _Out_ WDFDEVICE _Inout_opt_ PWDF_CHILD_RETRIEVE_INFO Info
Definition: wdfchildlist.h:690
int WINAPI GetWindowTextW(HWND hWnd, LPWSTR lpString, int nMaxCount)
Definition: window.c:1412
DWORD WINAPI GetLastError(void)
Definition: except.c:1040
#define FORMAT_MESSAGE_FROM_SYSTEM
Definition: winbase.h:423
#define FORMAT_MESSAGE_ALLOCATE_BUFFER
Definition: winbase.h:419
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1176
_In_ void _In_ PCCERT_CONTEXT _In_opt_ LPFILETIME _In_ DWORD _In_ DWORD _Outptr_opt_ void ** ppvObject
Definition: wincrypt.h:6082
LONG_PTR LPARAM
Definition: windef.h:208
LONG_PTR LRESULT
Definition: windef.h:209
#define WINAPI
Definition: msvc.h:6
#define E_NOINTERFACE
Definition: winerror.h:2364
#define HRESULT_FACILITY(hr)
Definition: winerror.h:79
#define ERROR_FILE_EXISTS
Definition: winerror.h:165
#define FACILITY_WIN32
Definition: winerror.h:27
#define HRESULT_CODE(hr)
Definition: winerror.h:76
int WINAPI MessageBoxA(_In_opt_ HWND hWnd, _In_opt_ LPCSTR lpText, _In_opt_ LPCSTR lpCaption, _In_ UINT uType)
#define GetDlgItemText
Definition: winuser.h:5775
BOOL WINAPI SetDlgItemTextW(_In_ HWND, _In_ int, _In_ LPCWSTR)
#define MB_RETRYCANCEL
Definition: winuser.h:799
#define MB_YESNO
Definition: winuser.h:811
#define IDIGNORE
Definition: winuser.h:828
HWND WINAPI GetDesktopWindow(void)
Definition: window.c:656
#define MB_ABORTRETRYIGNORE
Definition: winuser.h:785
#define SendMessageCallback
Definition: winuser.h:5834
#define IDABORT
Definition: winuser.h:826
#define MB_ICONWARNING
Definition: winuser.h:780
#define DWLP_MSGRESULT
Definition: winuser.h:864
#define SW_SHOW
Definition: winuser.h:769
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
#define IDYES
Definition: winuser.h:829
#define IDRETRY
Definition: winuser.h:827
#define MAKEINTRESOURCE
Definition: winuser.h:591
HICON WINAPI LoadIconW(_In_opt_ HINSTANCE hInstance, _In_ LPCWSTR lpIconName)
Definition: cursoricon.c:2044
#define BST_CHECKED
Definition: winuser.h:197
#define EN_CHANGE
Definition: winuser.h:2012
_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
const char * LPCSTR
Definition: xmlstorage.h:183
__wchar_t WCHAR
Definition: xmlstorage.h:180
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
unsigned char BYTE
Definition: xxhash.c:193