ReactOS 0.4.17-dev-243-g1369312
CDownloadManager Class Reference
Inheritance diagram for CDownloadManager:
Collaboration diagram for CDownloadManager:

Public Types

enum  { WM_ISCANCELLED = WM_APP , WM_SETSTATUS , WM_GETINSTANCE , WM_GETNEXT }
 
- Public Types inherited from IUnknown
typedef IUnknownLPUNKNOWN
 

Public Member Functions

 CDownloadManager ()
 
BOOL IsCancelled ()
 
BOOL IsSilentDialog ()
 
void StartWorkerThread ()
 
void Add (const DownloadInfo &Info)
 
void Show ()
 
INT_PTR RealDlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
 
void UpdateProgress (ULONG ulProgress, ULONG ulProgressMax)
 
void PerformDownloadAndInstall (const DownloadInfo &Info)
 
- Public Member Functions inherited from ATL::CComObjectRootEx< CComMultiThreadModelNoCS >
 ~CComObjectRootEx ()
 
ULONG InternalAddRef ()
 
ULONG InternalRelease ()
 
void Lock ()
 
void Unlock ()
 
HRESULT _AtlInitialConstruct ()
 
- Public Member Functions inherited from ATL::CComObjectRootBase
 CComObjectRootBase ()
 
 ~CComObjectRootBase ()
 
void SetVoid (void *)
 
HRESULT _AtlFinalConstruct ()
 
HRESULT FinalConstruct ()
 
void InternalFinalConstructAddRef ()
 
void InternalFinalConstructRelease ()
 
void FinalRelease ()
 
- Public Member Functions inherited from IUnknown
HRESULT QueryInterface ([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
 
ULONG AddRef ()
 
ULONG Release ()
 

Static Public Member Functions

static CDownloadManagerCreateInstanceHelper (UINT Flags)
 
static BOOL CreateInstance (BOOL Modal, CComPtr< CDownloadManager > &Obj)
 
static CDownloadManagerFindInstance ()
 
static INT_PTR CALLBACK DlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
 
static unsigned int CALLBACK ThreadFunc (void *ThreadParam)
 
- Static Public Member Functions inherited from ATL::CComCoClass< CDownloadManager, &CLSID_NULL >
static LPCTSTR WINAPI GetObjectDescription ()
 
- Static Public Member Functions inherited from ATL::CComObjectRootBase
static void WINAPI ObjectMain (bool)
 
static const struct _ATL_CATMAP_ENTRYGetCategoryMap ()
 
static HRESULT WINAPI InternalQueryInterface (void *pThis, const _ATL_INTMAP_ENTRY *pEntries, REFIID iid, void **ppvObject)
 

Protected Attributes

HWND m_hDlg
 
UINT m_Threads
 
UINT m_Index
 
BOOL m_bCancelled
 
BOOL m_bModal
 
UINT m_fDaf = 0
 
WCHAR m_szCaptionFmt [100]
 
ATL::CSimpleArray< DownloadInfom_List
 
CDowloadingAppsListView m_ListView
 
CDownloaderProgress m_ProgressBar
 

Additional Inherited Members

- Public Attributes inherited from ATL::CComObjectRootBase
LONG m_dwRef
 

Detailed Description

Definition at line 473 of file loaddlg.cpp.

Member Enumeration Documentation

◆ anonymous enum

anonymous enum
Enumerator
WM_ISCANCELLED 
WM_SETSTATUS 
WM_GETINSTANCE 
WM_GETNEXT 

Definition at line 479 of file loaddlg.cpp.

479 {
480 WM_ISCANCELLED = WM_APP, // Return BOOL
481 WM_SETSTATUS, // wParam DownloadStatus
482 WM_GETINSTANCE, // Return CDownloadManager*
483 WM_GETNEXT, // Return DownloadInfo* or NULL
484 };
#define WM_APP
Definition: eventvwr.h:73

Constructor & Destructor Documentation

◆ CDownloadManager()

CDownloadManager::CDownloadManager ( )
inline

Definition at line 486 of file loaddlg.cpp.

#define NULL
Definition: types.h:112
#define FALSE
Definition: types.h:117

Member Function Documentation

◆ Add()

void CDownloadManager::Add ( const DownloadInfo Info)

Definition at line 578 of file loaddlg.cpp.

579{
580 const UINT count = m_List.GetSize(), start = count;
581 for (UINT i = 0; i < count; ++i)
582 {
583 if (Info.Equal(m_List[i]))
584 return; // Already in the list
585 }
586
587 if (!Info.szDependencies.IsEmpty())
588 {
589 CStringW deps = Info.szDependencies;
590 for (int pos = 1; pos > 0; deps = deps.Mid(pos + 1))
591 {
592 pos = deps.Find(L'|');
593 CStringW pkg = (pos > 0 ? deps.Left(pos) : deps).Trim();
594
595 // In the future a package might need to specify dependency version or WoW64
596 // information ("vcredist*x64" etc), for now, just remove possible modifiers.
597 int suffix = pkg.FindOneOf(L"*<=>:/\\?");
598 if (suffix > 0)
599 pkg = pkg.Left(suffix);
600
602 Deleter <CAvailableApplicationInfo*>del(pApp);
603 if (!pApp || pApp->IsInstalled())
604 continue;
605 // Add the dependency before the application in the list
606 Add(DownloadInfo(*pApp, DAF_SILENT));
607 }
608 }
609
610 m_List.Add(Info);
611 if (m_hDlg)
613}
static VOID del(LPHIST_ENTRY item)
Definition: history.c:199
int GetSize() const
Definition: atlsimpcoll.h:104
BOOL Add(const T &t)
Definition: atlsimpcoll.h:58
CStringT Left(int nCount) const
Definition: cstringt.h:776
int Find(_In_ PCXSTR pszSub, _In_opt_ int iStart=0) const noexcept
Definition: cstringt.h:696
CStringT Mid(int iFirst, int nCount) const
Definition: cstringt.h:748
int FindOneOf(_In_ PCXSTR pszCharSet) const noexcept
Definition: cstringt.h:722
static CAvailableApplicationInfo * CreateAvailableAppInstance(const CStringW &PkgName, PCWSTR DBPath=NULL)
Definition: appdb.cpp:110
bool IsInstalled(CStringW *pOutKeyName=NULL) const
Definition: appinfo.cpp:124
VOID LoadList(ATL::CSimpleArray< DownloadInfo > arrInfo, UINT Start=0)
Definition: loaddlg.cpp:346
ATL::CSimpleArray< DownloadInfo > m_List
Definition: loaddlg.cpp:560
CDowloadingAppsListView m_ListView
Definition: loaddlg.cpp:561
void Add(const DownloadInfo &Info)
Definition: loaddlg.cpp:578
#define L(x)
Definition: resources.c:13
GLuint start
Definition: gl.h:1545
GLuint GLuint GLsizei count
Definition: gl.h:1545
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
unsigned int UINT
Definition: ndis.h:50
@ DAF_SILENT
Definition: dialogs.h:13
_Must_inspect_result_ _In_ WDFCHILDLIST _In_ PWDF_CHILD_LIST_ITERATOR _Out_ WDFDEVICE _Inout_opt_ PWDF_CHILD_RETRIEVE_INFO Info
Definition: wdfchildlist.h:690

Referenced by Add().

◆ CreateInstance()

static BOOL CDownloadManager::CreateInstance ( BOOL  Modal,
CComPtr< CDownloadManager > &  Obj 
)
inlinestatic

Definition at line 509 of file loaddlg.cpp.

510 {
512 if (!p)
513 return FALSE;
514 Obj.Attach(p);
515 return TRUE;
516 }
static CDownloadManager * CreateInstanceHelper(UINT Flags)
Definition: loaddlg.cpp:489
#define TRUE
Definition: types.h:120
GLfloat GLfloat p
Definition: glext.h:8902

Referenced by DownloadApplicationsDB(), and DownloadListOfApplications().

◆ CreateInstanceHelper()

static CDownloadManager * CDownloadManager::CreateInstanceHelper ( UINT  Flags)
inlinestatic

Definition at line 489 of file loaddlg.cpp.

490 {
491 if (!(Flags & DAF_MODAL))
492 {
494 if (pExisting)
495 {
496 pExisting->AddRef();
497 return pExisting;
498 }
499 }
501 if (FAILED(ShellObjectCreator(obj)))
502 return NULL;
503 obj->m_fDaf = Flags;
504 obj->m_bModal = !!(Flags & DAF_MODAL);
505 return obj.Detach();
506 }
static CDownloadManager * FindInstance()
Definition: loaddlg.cpp:519
ULONG AddRef()
#define FAILED(hr)
Definition: intsafe.h:51
@ DAF_MODAL
Definition: dialogs.h:14
_Must_inspect_result_ _In_ ULONG Flags
Definition: wsk.h:170

Referenced by CreateInstance().

◆ DlgProc()

INT_PTR CALLBACK CDownloadManager::DlgProc ( HWND  hDlg,
UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam 
)
static

Definition at line 632 of file loaddlg.cpp.

633{
635 if (!pThis)
636 {
637 if (uMsg != WM_INITDIALOG)
638 return FALSE;
640 pThis = (CDownloadManager*)lParam;
641 }
642 return pThis->RealDlgProc(hDlg, uMsg, wParam, lParam);
643}
INT_PTR RealDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: loaddlg.cpp:646
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
#define DWLP_USER
Definition: winuser.h:883
#define GetWindowLongPtrW
Definition: winuser.h:4983
#define WM_INITDIALOG
Definition: winuser.h:1767
#define SetWindowLongPtrW
Definition: winuser.h:5512

◆ FindInstance()

static CDownloadManager * CDownloadManager::FindInstance ( )
inlinestatic

Definition at line 519 of file loaddlg.cpp.

520 {
523 return NULL;
524 }
HWND g_hDownloadWnd
Definition: loaddlg.cpp:471
BOOL WINAPI IsWindowVisible(_In_ HWND)
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)

Referenced by CreateInstanceHelper().

◆ IsCancelled()

BOOL CDownloadManager::IsCancelled ( )
inline

Definition at line 527 of file loaddlg.cpp.

528 {
530 }
BOOL WINAPI IsWindow(_In_opt_ HWND)

Referenced by PerformDownloadAndInstall().

◆ IsSilentDialog()

BOOL CDownloadManager::IsSilentDialog ( )
inline

Definition at line 533 of file loaddlg.cpp.

534 {
535 return m_fDaf & DAF_SILENT;
536 }

Referenced by RealDlgProc(), and Show().

◆ PerformDownloadAndInstall()

void CDownloadManager::PerformDownloadAndInstall ( const DownloadInfo Info)

Definition at line 767 of file loaddlg.cpp.

768{
769 const HWND hDlg = m_hDlg;
772
774 m_ProgressBar.SendMessageW(PBM_SETPOS, 0, 0);
775 m_ProgressBar.SetProgress(0, Info.SizeInBytes);
776
778 CPathW Path;
779 PCWSTR p;
780
781 ULONG dwContentLen, dwBytesWritten, dwBytesRead, dwStatus, dwStatusLen;
782 ULONG dwCurrentBytesRead = 0;
783 BOOL bTempfile = FALSE, bCancelled = FALSE;
784
785 HINTERNET hOpen = NULL;
788
789
790 LPCWSTR lpszAgent = L"RApps/1.1";
791 const DWORD dwUrlConnectFlags =
793 URL_COMPONENTSW urlComponents;
794 size_t urlLength;
795 unsigned char lpBuffer[4096];
796
797 // Change caption to show the currently downloaded app
798 switch (Info.DLType)
799 {
801 str.Format(m_szCaptionFmt, Info.szName.GetString());
802 break;
803 case DLTYPE_DBUPDATE:
805 break;
808 break;
809 }
810 SetWindowTextW(hDlg, str);
811
812 // is this URL an update package for RAPPS? if so store it in a different place
813 if (Info.DLType != DLTYPE_APPLICATION)
814 {
816 {
818 goto end;
819 }
820 }
821 else
822 {
824 }
825
826 // build the path for the download
827 p = wcsrchr(Info.szUrl.GetString(), L'/');
828
829 // do we have a final slash separator?
830 if (!p)
831 {
833 goto end;
834 }
835
836 // is the path valid? can we access it?
838 {
840 {
842 goto end;
843 }
844 }
845
846 switch (Info.DLType)
847 {
848 case DLTYPE_DBUPDATE:
851 break;
853 {
854 CStringW name = Info.szFileName;
855 if (name.IsEmpty())
856 name = p + 1; // use the filename retrieved from URL
858 Path += name;
859 break;
860 }
861 }
862
863 if ((Info.DLType == DLTYPE_APPLICATION) && Info.szSHA1[0] &&
865 {
866 // only open it in case of total correctness
867 if (VerifyInteg(Info.szSHA1.GetString(), Path))
868 goto run;
869 }
870
871 // Download it
873 /* FIXME: this should just be using the system-wide proxy settings */
874 switch (SettingsInfo.Proxy)
875 {
876 case 0: // preconfig
877 default:
878 hOpen = InternetOpenW(lpszAgent, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
879 break;
880 case 1: // direct (no proxy)
881 hOpen = InternetOpenW(lpszAgent, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
882 break;
883 case 2: // use proxy
884 hOpen = InternetOpenW(
886 break;
887 }
888
889 if (!hOpen)
890 {
892 goto end;
893 }
894
895 bTempfile = TRUE;
896 dwContentLen = 0;
897 dwStatusLen = sizeof(dwStatus);
898 ZeroMemory(&urlComponents, sizeof(urlComponents));
899 urlComponents.dwStructSize = sizeof(urlComponents);
900
901 urlLength = Info.szUrl.GetLength();
902 urlComponents.dwSchemeLength = urlLength + 1;
903 urlComponents.lpszScheme = (LPWSTR)malloc(urlComponents.dwSchemeLength * sizeof(WCHAR));
904
905 if (!InternetCrackUrlW(Info.szUrl, urlLength + 1, ICU_DECODE | ICU_ESCAPE, &urlComponents))
906 {
908 goto end;
909 }
910
911 if (urlComponents.nScheme == INTERNET_SCHEME_HTTP || urlComponents.nScheme == INTERNET_SCHEME_HTTPS)
912 {
913 hFile = InternetOpenUrlW(hOpen, Info.szUrl, NULL, 0, dwUrlConnectFlags, 0);
914 if (!hFile)
915 {
917 {
918 /* Workaround for CORE-17377 */
920 }
921 goto end;
922 }
923
924 // query connection
926 {
928 goto end;
929 }
930
932 {
934 goto end;
935 }
936
937 // query content length
939 }
940 else if (urlComponents.nScheme == INTERNET_SCHEME_FTP)
941 {
942 // force passive mode on FTP
943 hFile =
944 InternetOpenUrlW(hOpen, Info.szUrl, NULL, 0, dwUrlConnectFlags | INTERNET_FLAG_PASSIVE, 0);
945 if (!hFile)
946 {
948 {
949 /* Workaround for CORE-17377 */
951 }
952 goto end;
953 }
954
955 dwContentLen = FtpGetFileSize(hFile, &dwStatus);
956 }
957 else if (urlComponents.nScheme == INTERNET_SCHEME_FILE)
958 {
959 // Add support for the file scheme so testing locally is simpler
960 WCHAR LocalFilePath[MAX_PATH];
961 DWORD cchPath = _countof(LocalFilePath);
962 // Ideally we would use PathCreateFromUrlAlloc here, but that is not exported (yet)
963 HRESULT hr = PathCreateFromUrlW(Info.szUrl, LocalFilePath, &cchPath, 0);
964 if (SUCCEEDED(hr))
965 {
966 if (CopyFileW(LocalFilePath, Path, FALSE))
967 {
968 goto run;
969 }
970 else
971 {
973 goto end;
974 }
975 }
976 else
977 {
979 goto end;
980 }
981 }
982
983 if (!dwContentLen)
984 {
985 // Someone was nice enough to add this, let's use it
986 if (Info.SizeInBytes)
987 {
988 dwContentLen = Info.SizeInBytes;
989 }
990 else
991 {
992 // content-length is not known, enable marquee mode
994 }
995 }
996
997 free(urlComponents.lpszScheme);
998
999#ifdef USE_CERT_PINNING
1000 // are we using HTTPS to download the RAPPS update package? check if the certificate is original
1001 if ((urlComponents.nScheme == INTERNET_SCHEME_HTTPS) && (Info.DLType == DLTYPE_DBUPDATE))
1002 {
1003 CLocalPtr<char> subjectName, issuerName;
1004 CStringA szMsgText;
1005 bool bAskQuestion = false;
1006 if (!CertGetSubjectAndIssuer(hFile, subjectName, issuerName))
1007 {
1008 szMsgText.LoadStringW(IDS_UNABLE_TO_QUERY_CERT);
1009 bAskQuestion = true;
1010 }
1011 else if (!IsTrustedPinnedCert(subjectName, issuerName))
1012 {
1013 szMsgText.Format(IDS_MISMATCH_CERT_INFO, (LPCSTR)subjectName, (LPCSTR)issuerName);
1014 bAskQuestion = true;
1015 }
1016
1017 if (bAskQuestion)
1018 {
1019 if (MessageBoxA(hDlg, szMsgText, NULL, MB_YESNO | MB_ICONERROR) != IDYES)
1020 {
1021 goto end;
1022 }
1023 }
1024 }
1025#endif
1026
1028 if (hOut == INVALID_HANDLE_VALUE)
1029 {
1031 goto end;
1032 }
1033
1034 dwCurrentBytesRead = 0;
1035 do
1036 {
1037 bCancelled = IsCancelled();
1038 if (bCancelled)
1039 break;
1040
1041 if (!InternetReadFile(hFile, lpBuffer, _countof(lpBuffer), &dwBytesRead))
1042 {
1044 goto end;
1045 }
1046
1047 if (!WriteFile(hOut, &lpBuffer[0], dwBytesRead, &dwBytesWritten, NULL))
1048 {
1050 goto end;
1051 }
1052
1053 dwCurrentBytesRead += dwBytesRead;
1054 UpdateProgress(dwCurrentBytesRead, dwContentLen);
1055
1056 } while (dwBytesRead);
1057
1058 CloseHandle(hOut);
1059 hOut = INVALID_HANDLE_VALUE;
1060
1061 if (bCancelled)
1062 {
1063 DPRINT1("Operation cancelled\n");
1064 goto end;
1065 }
1066
1067 if (!dwContentLen)
1068 {
1069 // set progress bar to 100%
1071
1072 dwContentLen = dwCurrentBytesRead;
1073 UpdateProgress(dwCurrentBytesRead, dwContentLen);
1074 }
1075
1076 /* if this thing isn't a RAPPS update and it has a SHA-1 checksum
1077 verify its integrity by using the native advapi32.A_SHA1 functions */
1078 if ((Info.DLType == DLTYPE_APPLICATION) && Info.szSHA1[0] != 0)
1079 {
1080 CStringW szMsgText;
1081
1082 // change a few strings in the download dialog to reflect the verification process
1083 if (!szMsgText.LoadStringW(IDS_INTEG_CHECK_TITLE))
1084 {
1085 DPRINT1("Unable to load string\n");
1086 goto end;
1087 }
1088
1089 SetWindowTextW(hDlg, szMsgText);
1091
1092 // this may take a while, depending on the file size
1093 if (!VerifyInteg(Info.szSHA1, Path))
1094 {
1095 if (!szMsgText.LoadStringW(IDS_INTEG_CHECK_FAIL))
1096 {
1097 DPRINT1("Unable to load string\n");
1098 goto end;
1099 }
1100
1101 MessageBoxW(hDlg, szMsgText, NULL, MB_OK | MB_ICONERROR);
1102 goto end;
1103 }
1104 }
1105
1106run:
1108
1109 // run it
1110 if (Info.DLType == DLTYPE_APPLICATION)
1111 {
1112 BOOL bSilentInstall = Info.Flags & DAF_SILENT;
1113 CStringW app, params, tempdir;
1114 SHELLEXECUTEINFOW shExInfo = { sizeof(shExInfo), SEE_MASK_NOCLOSEPROCESS, hDlg };
1115 shExInfo.lpVerb = L"open";
1116 shExInfo.lpFile = Path;
1117 shExInfo.lpParameters = L"";
1118 shExInfo.nShow = SW_SHOW;
1119
1120 if (Info.IType == INSTALLER_GENERATE)
1121 {
1122 params = L"/" CMD_KEY_GENINST + CStringW(bSilentInstall ? L" /S" : L"") +
1123 L" \"" + Info.szPackageName + L"\" \"" + shExInfo.lpFile + L"\"";
1124 shExInfo.lpParameters = params;
1125 shExInfo.lpFile = app.GetBuffer(MAX_PATH);
1126 GetModuleFileNameW(NULL, const_cast<LPWSTR>(shExInfo.lpFile), MAX_PATH);
1127 app.ReleaseBuffer();
1128 }
1129 else if (Info.IType == INSTALLER_EXEINZIP)
1130 {
1131 HRESULT hr = ExtractArchiveForExecution(Path, Info.szPackageName, tempdir, app);
1132 if (FAILED(hr))
1133 {
1134 ShowLastError(hDlg, FALSE, hr);
1135 goto end;
1136 }
1137 shExInfo.lpFile = app;
1138 }
1139
1140 if (bSilentInstall)
1141 {
1142 if (!Info.szSilentInstallArgs.IsEmpty())
1143 {
1144 // The package wants to force specific parameters
1145 shExInfo.lpParameters = Info.szSilentInstallArgs.GetString();
1146 }
1147 else
1148 {
1149 UINT extrainfo = 0;
1150 InstallerType it = Info.IExecType;
1151
1152 if (it == INSTALLER_UNKNOWN || it == INSTALLER_EXEINZIP)
1153 it = GuessInstallerType(shExInfo.lpFile, extrainfo);
1154
1155 if (GetSilentInstallParameters(it, extrainfo, shExInfo.lpFile, params))
1156 {
1157 shExInfo.lpParameters = params;
1158 if (it == INSTALLER_MSI)
1159 shExInfo.lpFile = L"msiexec.exe"; // params contains the .msi path
1160 }
1161 }
1162 }
1163
1164 /* FIXME: Do we want to log installer status? */
1165 WriteLogMessage(EVENTLOG_SUCCESS, MSG_SUCCESS_INSTALL, Info.szName);
1166
1167 if (ShellExecuteExW(&shExInfo))
1168 {
1169 // reflect installation progress in the titlebar
1170 // TODO: make a separate string with a placeholder to include app name?
1172 SetWindowTextW(hDlg, szMsgText);
1173
1175
1176 // TODO: issue an install operation separately so that the apps could be downloaded in the background
1177 if (shExInfo.hProcess)
1178 {
1180 CloseHandle(shExInfo.hProcess);
1182 }
1183 }
1184 else
1185 {
1187 }
1188
1189 if (!tempdir.IsEmpty())
1190 {
1191 DeleteDirectoryTree(tempdir, hDlg);
1192 }
1193 }
1194
1195end:
1196 if (hOut != INVALID_HANDLE_VALUE)
1197 CloseHandle(hOut);
1198
1199 if (hFile)
1201 InternetCloseHandle(hOpen);
1202
1203 if (bTempfile)
1204 {
1205 if (bCancelled || (SettingsInfo.bDelInstaller && Info.DLType == DLTYPE_APPLICATION))
1206 {
1207 // Don't delete .zip/.cab files so the user can extract from them
1208 if (bCancelled || Info.IType == INSTALLER_GENERATE || Info.IType == INSTALLER_EXEINZIP ||
1210 {
1212 }
1213 }
1214 }
1215
1217}
PRTL_UNICODE_STRING_BUFFER Path
InstallerType
Definition: appinfo.h:82
@ INSTALLER_UNKNOWN
Definition: appinfo.h:83
@ INSTALLER_EXEINZIP
Definition: appinfo.h:84
@ INSTALLER_GENERATE
Definition: appinfo.h:85
@ INSTALLER_MSI
Definition: appinfo.h:86
#define APPLICATION_DATABASE_NAME
Definition: defines.h:41
BOOL WriteLogMessage(WORD wType, DWORD dwEventID, LPCWSTR lpMsg)
Definition: misc.cpp:323
BOOL GetStorageDirectory(CStringW &lpDirectory)
Definition: misc.cpp:241
BOOL OpensWithExplorer(PCWSTR Path)
Definition: misc.cpp:164
BOOL GetSilentInstallParameters(InstallerType InstallerType, UINT ExtraInfo, LPCWSTR Installer, CStringW &Parameters)
Definition: misc.cpp:714
BOOL DeleteDirectoryTree(LPCWSTR Dir, HWND hwnd=NULL)
Definition: misc.cpp:553
UINT ClassifyFile(PCWSTR Path)
Definition: misc.cpp:127
InstallerType GuessInstallerType(LPCWSTR Installer, UINT &ExtraInfo)
Definition: misc.cpp:637
#define IDS_UNABLE_TO_DOWNLOAD
Definition: resource.h:115
#define IDS_MISMATCH_CERT_INFO
Definition: resource.h:125
#define IDS_UNABLE_TO_DOWNLOAD2
Definition: resource.h:116
#define IDS_UNABLE_PATH
Definition: resource.h:126
#define IDS_UNABLE_TO_QUERY_CERT
Definition: resource.h:117
#define IDC_DOWNLOAD_STATUS
Definition: resource.h:43
#define IDS_INTEG_CHECK_TITLE
Definition: resource.h:118
#define IDS_DL_DIALOG_DB_DOWNLOAD_DISP
Definition: resource.h:228
#define IDS_INTEG_CHECK_FAIL
Definition: resource.h:119
#define IDS_DL_DIALOG_DB_UNOFFICIAL_DOWNLOAD_DISP
Definition: resource.h:229
SETTINGS_INFO SettingsInfo
Definition: winmain.cpp:21
#define DPRINT1
Definition: precomp.h:8
bool IsEmpty() const noexcept
Definition: atlsimpstr.h:394
void ReleaseBuffer(_In_ int nNewLength=-1)
Definition: atlsimpstr.h:387
void __cdecl Format(UINT nFormatID,...)
Definition: cstringt.h:818
void UpdateProgress(ULONG ulProgress, ULONG ulProgressMax)
Definition: loaddlg.cpp:745
WCHAR m_szCaptionFmt[100]
Definition: loaddlg.cpp:559
CDownloaderProgress m_ProgressBar
Definition: loaddlg.cpp:562
BOOL IsCancelled()
Definition: loaddlg.cpp:527
VOID SetMarquee(BOOL Enable)
Definition: loaddlg.cpp:187
VOID SetProgress(ULONG ulProgress, ULONG ulProgressMax)
Definition: loaddlg.cpp:198
#define free
Definition: debug_ros.c:5
#define malloc
Definition: debug_ros.c:4
HRESULT hr
Definition: delayimp.cpp:582
#define CloseHandle
Definition: compat.h:739
#define wcsrchr
Definition: compat.h:16
#define INVALID_HANDLE_VALUE
Definition: compat.h:731
#define MAX_PATH
Definition: compat.h:34
#define CreateFileW
Definition: compat.h:741
#define FILE_SHARE_READ
Definition: compat.h:136
BOOL WINAPI CopyFileW(IN LPCWSTR lpExistingFileName, IN LPCWSTR lpNewFileName, IN BOOL bFailIfExists)
Definition: copy.c:365
BOOL WINAPI DeleteFileW(IN LPCWSTR lpFileName)
Definition: delete.c:39
BOOL WINAPI CreateDirectoryW(IN LPCWSTR lpPathName, IN LPSECURITY_ATTRIBUTES lpSecurityAttributes)
Definition: dir.c:58
DWORD WINAPI GetFileAttributesW(LPCWSTR lpFileName)
Definition: fileinfo.c:636
BOOL WINAPI WriteFile(_In_ HANDLE hFile, _In_reads_bytes_opt_(nNumberOfBytesToWrite) LPCVOID lpBuffer, _In_ DWORD nNumberOfBytesToWrite, _Out_opt_ LPDWORD lpNumberOfBytesWritten, _Inout_opt_ LPOVERLAPPED lpOverlapped)
Definition: rw.c:25
DWORD WINAPI GetModuleFileNameW(HINSTANCE hModule, LPWSTR lpFilename, DWORD nSize)
Definition: loader.c:600
HRESULT WINAPI PathCreateFromUrlW(const WCHAR *url, WCHAR *path, DWORD *pcchPath, DWORD dwReserved)
Definition: path.c:3073
DWORD WINAPI FtpGetFileSize(HINTERNET hFile, LPDWORD lpdwFileSizeHigh)
Definition: ftp.c:1757
BOOL WINAPI HttpQueryInfoW(HINTERNET hHttpRequest, DWORD dwInfoLevel, LPVOID lpBuffer, LPDWORD lpdwBufferLength, LPDWORD lpdwIndex)
Definition: http.c:3870
BOOL WINAPI InternetCrackUrlW(const WCHAR *lpszUrl, DWORD dwUrlLength, DWORD dwFlags, URL_COMPONENTSW *lpUC)
Definition: internet.c:1625
BOOL WINAPI InternetReadFile(HINTERNET hFile, LPVOID lpBuffer, DWORD dwNumOfBytesToRead, LPDWORD pdwNumOfBytesRead)
Definition: internet.c:2154
HINTERNET WINAPI InternetOpenUrlW(HINTERNET hInternet, LPCWSTR lpszUrl, LPCWSTR lpszHeaders, DWORD dwHeadersLength, DWORD dwFlags, DWORD_PTR dwContext)
Definition: internet.c:3723
BOOL WINAPI InternetCloseHandle(HINTERNET hInternet)
Definition: internet.c:1414
HINTERNET WINAPI InternetOpenW(LPCWSTR lpszAgent, DWORD dwAccessType, LPCWSTR lpszProxy, LPCWSTR lpszProxyBypass, DWORD dwFlags)
Definition: internet.c:979
#define INFINITE
Definition: serial.h:102
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
HRESULT ExtractArchiveForExecution(PCWSTR pszArchive, const CStringW &PackageName, CStringW &TempDir, CStringW &App)
Definition: geninst.cpp:850
GLuint GLuint end
Definition: gl.h:1545
GLenum const GLfloat * params
Definition: glext.h:5645
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define HIBYTE(W)
Definition: jmemdos.c:486
static void SetFriendlyUrl(HWND hWnd, LPCWSTR pszUrl)
Definition: loaddlg.cpp:123
VOID UrlUnescapeAndMakeFileNameValid(CStringW &str)
Definition: loaddlg.cpp:107
static VOID MessageBox_LoadString(HWND hOwnerWnd, INT StringID)
Definition: loaddlg.cpp:440
@ DLSTATUS_DOWNLOADING
Definition: loaddlg.cpp:83
@ DLSTATUS_FINISHED
Definition: loaddlg.cpp:87
@ DLSTATUS_WAITING_INSTALL
Definition: loaddlg.cpp:84
@ DLSTATUS_INSTALLING
Definition: loaddlg.cpp:85
static BOOL ShowLastError(HWND hWndOwner, BOOL bInetError, DWORD dwLastError)
Definition: loaddlg.cpp:450
CStringW LoadStatusString(DownloadStatus StatusParam)
Definition: loaddlg.cpp:91
@ DLTYPE_DBUPDATE_UNOFFICIAL
Definition: loaddlg.cpp:77
@ DLTYPE_DBUPDATE
Definition: loaddlg.cpp:76
@ DLTYPE_APPLICATION
Definition: loaddlg.cpp:75
HWND hMainWnd
Definition: magnifier.c:32
#define ZeroMemory
Definition: minwinbase.h:31
LONG_PTR LPARAM
Definition: minwindef.h:175
#define CREATE_ALWAYS
Definition: disk.h:72
static BYTE subjectName[]
Definition: cert.c:35
_In_ HANDLE hFile
Definition: mswsock.h:90
CAtlStringW CStringW
Definition: atlstr.h:130
_Out_ LPWSTR lpBuffer
Definition: netsh.h:68
#define FILE_SHARE_WRITE
Definition: nt_native.h:681
#define GENERIC_WRITE
Definition: nt_native.h:90
short WCHAR
Definition: pedump.c:58
#define PBM_SETPOS
Definition: commctrl.h:2189
DWORD dwStatus
Definition: mediaobj.idl:95
#define WM_NOTIFY_INSTALLERFINISHED
Definition: rapps.h:20
const WCHAR * str
#define SEE_MASK_NOCLOSEPROCESS
Definition: shellapi.h:33
BOOL WINAPI DECLSPEC_HOTPATCH ShellExecuteExW(LPSHELLEXECUTEINFOW sei)
Definition: shlexec.cpp:2723
@ PERCEIVED_TYPE_COMPRESSED
Definition: shtypes.idl:177
#define _countof(array)
Definition: sndvol32.h:70
WCHAR szDownloadDir[MAX_PATH]
Definition: settings.h:10
BOOL bDelInstaller
Definition: settings.h:11
WCHAR szNoProxyFor[MAX_PATH]
Definition: settings.h:22
WCHAR szProxyServer[MAX_PATH]
Definition: settings.h:21
DWORD dwStructSize
Definition: wininet.h:211
INTERNET_SCHEME nScheme
Definition: wininet.h:214
LPWSTR lpszScheme
Definition: wininet.h:212
DWORD dwSchemeLength
Definition: wininet.h:213
LPCWSTR lpParameters
Definition: shellapi.h:339
Definition: name.c:39
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
Definition: synch.c:82
const char * LPCSTR
Definition: typedefs.h:52
const uint16_t * PCWSTR
Definition: typedefs.h:57
const uint16_t * LPCWSTR
Definition: typedefs.h:57
uint16_t * LPWSTR
Definition: typedefs.h:56
uint32_t ULONG
Definition: typedefs.h:59
#define CMD_KEY_GENINST
Definition: unattended.h:4
#define INVALID_FILE_ATTRIBUTES
Definition: vfdcmd.c:23
SERVICE_STATUS_HANDLE hStatus
Definition: w32time.c:14
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
#define HTTP_STATUS_OK
Definition: winhttp.h:301
#define INTERNET_SCHEME_FTP
Definition: winhttp.h:49
#define ICU_DECODE
Definition: winhttp.h:353
#define INTERNET_SCHEME_HTTP
Definition: winhttp.h:47
#define INTERNET_SCHEME_HTTPS
Definition: winhttp.h:48
#define ICU_ESCAPE
Definition: winhttp.h:53
#define INTERNET_FLAG_PRAGMA_NOCACHE
Definition: wininet.h:85
#define INTERNET_FLAG_DONT_CACHE
Definition: wininet.h:67
#define INTERNET_FLAG_KEEP_CONNECTION
Definition: wininet.h:72
#define INTERNET_FLAG_PASSIVE
Definition: wininet.h:65
#define HTTP_QUERY_FLAG_NUMBER
Definition: wininet.h:1606
#define INTERNET_OPEN_TYPE_DIRECT
Definition: wininet.h:522
@ INTERNET_SCHEME_FILE
Definition: wininet.h:143
#define INTERNET_OPEN_TYPE_PROXY
Definition: wininet.h:523
#define HTTP_QUERY_STATUS_CODE
Definition: wininet.h:1542
#define INTERNET_OPEN_TYPE_PRECONFIG
Definition: wininet.h:521
#define HTTP_QUERY_CONTENT_LENGTH
Definition: wininet.h:1528
BOOL VerifyInteg(LPCWSTR lpSHA1Hash, LPCWSTR lpFileName)
Definition: integrity.cpp:14
#define EVENTLOG_SUCCESS
Definition: winnt_old.h:3074
int WINAPI MessageBoxA(_In_opt_ HWND hWnd, _In_opt_ LPCSTR lpText, _In_opt_ LPCSTR lpCaption, _In_ UINT uType)
#define MB_YESNO
Definition: winuser.h:828
int WINAPI MessageBoxW(_In_opt_ HWND hWnd, _In_opt_ LPCWSTR lpText, _In_opt_ LPCWSTR lpCaption, _In_ UINT uType)
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
#define MB_ICONERROR
Definition: winuser.h:798
BOOL WINAPI SetWindowTextW(_In_ HWND, _In_opt_ LPCWSTR)
#define MB_OK
Definition: winuser.h:801
#define SW_SHOW
Definition: winuser.h:786
#define IDYES
Definition: winuser.h:846

Referenced by ThreadFunc().

◆ RealDlgProc()

INT_PTR CDownloadManager::RealDlgProc ( HWND  hDlg,
UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam 
)

Definition at line 646 of file loaddlg.cpp.

647{
648 switch (uMsg)
649 {
650 case WM_INITDIALOG:
651 {
652 g_Busy++;
653 AddRef();
654 m_hDlg = hDlg;
655 if (!m_bModal)
656 g_hDownloadWnd = hDlg;
657
658 HICON hIconSm, hIconBg;
659 if (hMainWnd)
660 {
663 }
664 if (!hMainWnd || (!hIconBg || !hIconSm))
665 {
667 }
668 SendMessageW(hDlg, WM_SETICON, ICON_BIG, (LPARAM)hIconBg);
669 SendMessageW(hDlg, WM_SETICON, ICON_SMALL, (LPARAM)hIconSm);
670
674 buf.Replace(L"%ls", L"");
675 SetWindowTextW(hDlg, buf); // "Downloading..."
676
678 if (hItem)
679 {
680 // initialize the default values for our nifty progress bar
681 // and subclass it so that it learns to print a status text
683 m_ProgressBar.SendMessageW(PBM_SETRANGE, 0, MAKELPARAM(0, 100));
684 m_ProgressBar.SendMessageW(PBM_SETPOS, 0, 0);
685 if (m_List.GetSize() > 0)
686 m_ProgressBar.SetProgress(0, m_List[0].SizeInBytes);
687 }
688
689 if (!m_ListView.Create(hDlg))
690 return FALSE;
692
695 return TRUE;
696 }
697
698 case WM_COMMAND:
699 if (LOWORD(wParam) == IDCANCEL)
700 {
702 PostMessageW(hDlg, WM_CLOSE, 0, 0);
703 }
704 return FALSE;
705
706 case WM_CLOSE:
708 if (m_ProgressBar)
710 return m_bModal && !IsSilentDialog() ? ::EndDialog(hDlg, 0) : ::DestroyWindow(hDlg);
711
712 case WM_DESTROY:
713 if (g_hDownloadWnd == hDlg)
715 g_Busy--;
716 if (hMainWnd)
718 if (m_bModal && IsSilentDialog())
720 Release();
721 break;
722
723 case WM_ISCANCELLED:
724 return SetDlgMsgResult(hDlg, uMsg, m_bCancelled);
725
726 case WM_SETSTATUS:
728 break;
729
730 case WM_GETINSTANCE:
731 return SetDlgMsgResult(hDlg, uMsg, (INT_PTR)this);
732
733 case WM_GETNEXT:
734 {
735 DownloadInfo *pItem = NULL;
737 pItem = &m_List[m_Index++];
738 return SetDlgMsgResult(hDlg, uMsg, (INT_PTR)pItem);
739 }
740 }
741 return FALSE;
742}
#define IDI_MAIN
Definition: resource.h:4
#define IDC_DOWNLOAD_PROGRESS
Definition: resource.h:42
BOOL SubclassWindow(HWND hWnd)
Definition: atlwin.h:1552
HWND UnsubclassWindow(BOOL bForce=FALSE)
Definition: atlwin.h:1575
HWND Create(HWND hwndParent)
Definition: loaddlg.cpp:326
VOID SetDownloadStatus(INT ItemIndex, DownloadStatus Status)
Definition: loaddlg.cpp:356
BOOL IsSilentDialog()
Definition: loaddlg.cpp:533
void StartWorkerThread()
Definition: loaddlg.cpp:566
HINSTANCE hInst
Definition: dxdiag.c:13
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
ULONG Release()
DownloadStatus
Definition: loaddlg.cpp:81
static HICON
Definition: imagelist.c:80
HICON hIconSm
Definition: msconfig.c:44
#define LOWORD(l)
Definition: pedump.c:82
#define PBM_SETRANGE
Definition: commctrl.h:2188
#define WM_NOTIFY_OPERATIONCOMPLETED
Definition: rapps.h:19
LONG g_Busy
Definition: winmain.cpp:17
#define ICON_BIG
Definition: tnclass.cpp:51
#define ICON_SMALL
Definition: tnclass.cpp:48
int32_t INT_PTR
Definition: typedefs.h:64
ULONG_PTR SIZE_T
Definition: typedefs.h:80
int WINAPI GetWindowTextW(HWND hWnd, LPWSTR lpString, int nMaxCount)
Definition: window.c:1382
#define SetDlgMsgResult(hwnd, msg, result)
Definition: windowsx.h:518
#define SW_HIDE
Definition: winuser.h:779
#define WM_CLOSE
Definition: winuser.h:1649
#define GCLP_HICONSM
Definition: winuser.h:683
#define MAKELPARAM(l, h)
Definition: winuser.h:4116
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
#define IDCANCEL
Definition: winuser.h:842
BOOL WINAPI PostMessageW(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define GCLP_HICON
Definition: winuser.h:682
__analysis_noreturn void WINAPI PostQuitMessage(_In_ int)
#define WM_COMMAND
Definition: winuser.h:1768
#define PostMessage
Definition: winuser.h:5998
#define GetClassLongPtrW
Definition: winuser.h:4718
#define WM_DESTROY
Definition: winuser.h:1637
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
BOOL WINAPI DestroyWindow(_In_ HWND)
HICON WINAPI LoadIconW(_In_opt_ HINSTANCE hInstance, _In_ LPCWSTR lpIconName)
Definition: cursoricon.c:2444
BOOL WINAPI EndDialog(_In_ HWND, _In_ INT_PTR)

Referenced by DlgProc().

◆ Show()

void CDownloadManager::Show ( )

Definition at line 616 of file loaddlg.cpp.

617{
618 HWND hDlg = NULL;
619 const BOOL bSilent = IsSilentDialog(), bModal = m_bModal;
620 if (bModal && !bSilent)
622 else if (!m_hDlg || !IsWindow(m_hDlg))
624
625 // A DialogBox dialog cannot be invisible, it is forced visible after WM_INITDIALOG returns.
626 // We therefore use a modeless dialog when we are both modal and silent.
627 for (MSG msg; bModal && bSilent && hDlg && GetMessageW(&msg, NULL, 0, 0);)
629}
#define msg(x)
Definition: auth_time.c:54
#define IDD_DOWNLOAD_DIALOG
Definition: resource.h:66
DLGPROC DlgProc
Definition: desk.c:122
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1829
HWND WINAPI CreateDialogParamW(_In_opt_ HINSTANCE, _In_ LPCWSTR, _In_opt_ HWND, _In_opt_ DLGPROC, _In_ LPARAM)
BOOL WINAPI GetMessageW(_Out_ LPMSG, _In_opt_ HWND, _In_ UINT, _In_ UINT)
#define DispatchMessage
Definition: winuser.h:5931
INT_PTR WINAPI DialogBoxParamW(_In_opt_ HINSTANCE, _In_ LPCWSTR, _In_opt_ HWND, _In_opt_ DLGPROC, _In_ LPARAM)

◆ StartWorkerThread()

void CDownloadManager::StartWorkerThread ( )

Definition at line 566 of file loaddlg.cpp.

567{
568 AddRef(); // To keep m_List alive in thread
569 unsigned int ThreadId;
570 HANDLE Thread = (HANDLE)_beginthreadex(NULL, 0, ThreadFunc, this, 0, &ThreadId);
571 if (Thread)
573 else
574 Release();
575}
static unsigned int CALLBACK ThreadFunc(void *ThreadParam)
Definition: loaddlg.cpp:751
_ACRTIMP uintptr_t __cdecl _beginthreadex(void *, unsigned int, _beginthreadex_start_routine_t, void *, unsigned int, unsigned int *)
Definition: thread.c:207
_In_opt_ PFILE_OBJECT _In_opt_ PETHREAD Thread
Definition: fltkernel.h:2653
PVOID HANDLE
Definition: typedefs.h:73

Referenced by RealDlgProc().

◆ ThreadFunc()

unsigned int CALLBACK CDownloadManager::ThreadFunc ( void ThreadParam)
static

Definition at line 751 of file loaddlg.cpp.

752{
753 CDownloadManager *pThis = (CDownloadManager*)ThreadParam;
754 HWND hDlg = pThis->m_hDlg;
755 for (;;)
756 {
757 DownloadInfo *pItem = (DownloadInfo*)SendMessageW(hDlg, WM_GETNEXT, 0, 0);
758 if (!pItem)
759 break;
760 pThis->PerformDownloadAndInstall(*pItem);
761 }
762 SendMessageW(hDlg, WM_CLOSE, 0, 0);
763 return pThis->Release();
764}
void PerformDownloadAndInstall(const DownloadInfo &Info)
Definition: loaddlg.cpp:767

Referenced by StartWorkerThread().

◆ UpdateProgress()

void CDownloadManager::UpdateProgress ( ULONG  ulProgress,
ULONG  ulProgressMax 
)

Definition at line 745 of file loaddlg.cpp.

746{
747 m_ProgressBar.SetProgress(ulProgress, ulProgressMax);
748}

Referenced by PerformDownloadAndInstall().

Member Data Documentation

◆ m_bCancelled

BOOL CDownloadManager::m_bCancelled
protected

Definition at line 556 of file loaddlg.cpp.

Referenced by RealDlgProc().

◆ m_bModal

BOOL CDownloadManager::m_bModal
protected

Definition at line 557 of file loaddlg.cpp.

Referenced by RealDlgProc(), and Show().

◆ m_fDaf

UINT CDownloadManager::m_fDaf = 0
protected

Definition at line 558 of file loaddlg.cpp.

Referenced by IsSilentDialog().

◆ m_hDlg

HWND CDownloadManager::m_hDlg
protected

Definition at line 553 of file loaddlg.cpp.

Referenced by Add(), IsCancelled(), PerformDownloadAndInstall(), RealDlgProc(), Show(), and ThreadFunc().

◆ m_Index

UINT CDownloadManager::m_Index
protected

Definition at line 555 of file loaddlg.cpp.

Referenced by RealDlgProc().

◆ m_List

ATL::CSimpleArray<DownloadInfo> CDownloadManager::m_List
protected

Definition at line 560 of file loaddlg.cpp.

Referenced by Add(), and RealDlgProc().

◆ m_ListView

CDowloadingAppsListView CDownloadManager::m_ListView
protected

Definition at line 561 of file loaddlg.cpp.

Referenced by Add(), and RealDlgProc().

◆ m_ProgressBar

CDownloaderProgress CDownloadManager::m_ProgressBar
protected

Definition at line 562 of file loaddlg.cpp.

Referenced by PerformDownloadAndInstall(), RealDlgProc(), and UpdateProgress().

◆ m_szCaptionFmt

WCHAR CDownloadManager::m_szCaptionFmt[100]
protected

Definition at line 559 of file loaddlg.cpp.

Referenced by PerformDownloadAndInstall(), and RealDlgProc().

◆ m_Threads

UINT CDownloadManager::m_Threads
protected

Definition at line 554 of file loaddlg.cpp.


The documentation for this class was generated from the following file: