54#ifdef USE_CERT_PINNING
55#define CERT_ISSUER_INFO_PREFIX "US\r\nLet's Encrypt\r\nR"
56#define CERT_ISSUER_INFO_OLD "US\r\nLet's Encrypt\r\nR3"
57#define CERT_ISSUER_INFO_NEW "US\r\nLet's Encrypt\r\nR11"
58#define CERT_SUBJECT_INFO "rapps.reactos.org"
63 if (
strcmp(Subject, CERT_SUBJECT_INFO))
65#ifdef CERT_ISSUER_INFO_PREFIX
66 return Issuer ==
StrStrA(Issuer, CERT_ISSUER_INFO_PREFIX);
68 return !
strcmp(Issuer, CERT_ISSUER_INFO_OLD) || !
strcmp(Issuer, CERT_ISSUER_INFO_NEW);
94 szString.LoadStringW(StatusParam);
98#define FILENAME_VALID_CHAR ( \
99 PATH_CHAR_CLASS_LETTER | \
100 PATH_CHAR_CLASS_DOT | \
101 PATH_CHAR_CLASS_SEMICOLON | \
102 PATH_CHAR_CLASS_COMMA | \
103 PATH_CHAR_CLASS_SPACE | \
104 PATH_CHAR_CLASS_OTHER_VALID)
190 WCHAR szProgress[100];
201 WCHAR szProgressMax[100];
202 UINT uiPercentage = ((
ULONGLONG)ulProgress * 100) / ulProgressMax;
213 ProgressText.
Format(
L"%u%% \x2014 %ls / %ls", uiPercentage, szProgress, szProgressMax);
223 ProgressText.
Format(
L"%ls...", szProgress);
246 UINT win_width, win_height;
320 r.top = (2 *
r.top + 1 *
r.bottom) / 3;
321 const INT MARGIN = 10;
360 Item.pszText = lpText;
361 Item.iItem = ItemIndex;
389#ifdef USE_CERT_PINNING
393 DWORD certInfoLength;
409 certInfoLength =
sizeof(certInfo);
433 if (szMsgText.LoadStringW(StringID))
493 obj->m_bModal = Modal;
551 unsigned int ThreadId;
625 buf.Replace(
L"%ls",
L"");
730 ULONG dwContentLen, dwBytesWritten, dwBytesRead,
dwStatus, dwStatusLen;
731 ULONG dwCurrentBytesRead = 0;
740 const DWORD dwUrlConnectFlags =
847 ZeroMemory(&urlComponents,
sizeof(urlComponents));
850 urlLength =
Info.szUrl.GetLength();
935 if (
Info.SizeInBytes)
937 dwContentLen =
Info.SizeInBytes;
948#ifdef USE_CERT_PINNING
954 bool bAskQuestion =
false;
960 else if (!IsTrustedPinnedCert(
subjectName, issuerName))
983 dwCurrentBytesRead = 0;
1002 dwCurrentBytesRead += dwBytesRead;
1005 }
while (dwBytesRead);
1012 DPRINT1(
"Operation cancelled\n");
1021 dwContentLen = dwCurrentBytesRead;
1034 DPRINT1(
"Unable to load string\n");
1046 DPRINT1(
"Unable to load string\n");
1063 shExInfo.
cbSize =
sizeof(shExInfo);
1073 Info.szPackageName +
L"\" \"" +
1146 const bool bModal =
false;
1151 list.AddTail(pAppInfo);
1158 const bool bModal =
true;
1164 DatabaseDLInfo.
szUrl = lpUrl;
1168 pDM->Add(DatabaseDLInfo);
PRTL_UNICODE_STRING_BUFFER Path
int strcmp(const char *String1, const char *String2)
#define APPLICATION_DATABASE_NAME
BOOL WriteLogMessage(WORD wType, DWORD dwEventID, LPCWSTR lpMsg)
BOOL GetStorageDirectory(CStringW &lpDirectory)
#define IDD_DOWNLOAD_DIALOG
#define IDS_UNABLE_TO_DOWNLOAD
#define IDS_MISMATCH_CERT_INFO
#define IDS_STATUS_FINISHED
#define IDS_STATUS_WAITING
#define IDS_DL_DIALOG_DB_DISP
#define IDS_STATUS_INSTALLING
#define IDS_UNABLE_TO_DOWNLOAD2
#define IDC_DOWNLOAD_PROGRESS
#define IDS_STATUS_DOWNLOADED
#define IDS_STATUS_DOWNLOADING
#define IDS_UNABLE_TO_QUERY_CERT
#define IDC_DOWNLOAD_STATUS
#define IDS_STATUS_INSTALLED
#define IDS_INTEG_CHECK_TITLE
#define IDS_DL_DIALOG_DB_DOWNLOAD_DISP
#define IDS_INTEG_CHECK_FAIL
#define IDS_DL_DIALOG_DB_UNOFFICIAL_DOWNLOAD_DISP
SETTINGS_INFO SettingsInfo
POSITION GetHeadPosition() const
E & GetNext(_Inout_ POSITION &pos)
bool IsEmpty() const noexcept
void ReleaseBuffer(_In_ int nNewLength=-1)
PXSTR GetString() noexcept
int GetLength() const noexcept
void __cdecl Format(UINT nFormatID,...)
BOOL SubclassWindow(HWND hWnd)
HWND UnsubclassWindow(BOOL bForce=FALSE)
BOOL ModifyStyle(DWORD dwRemove, DWORD dwAdd, UINT nFlags=0)
virtual VOID GetDownloadInfo(CStringW &Url, CStringW &Sha1, ULONG &SizeInBytes) const =0
virtual InstallerType GetInstallerType() const
const CStringW szIdentifier
BOOL GetString(const CStringW &KeyName, CStringW &ResultString)
HWND Create(HWND hwndParent)
VOID SetDownloadStatus(INT ItemIndex, DownloadStatus Status)
VOID AddRow(INT RowIndex, LPCWSTR szAppName, const DownloadStatus Status)
BOOL AddColumn(INT Index, INT Width, INT Format)
VOID LoadList(ATL::CSimpleArray< DownloadInfo > arrInfo, UINT Start=0)
BOOL AddItem(INT ItemIndex, LPWSTR lpText)
static INT_PTR CALLBACK DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
void PerformDownloadAndInstall(const DownloadInfo &Info)
static CDownloadManager * FindInstance()
void UpdateProgress(ULONG ulProgress, ULONG ulProgressMax)
static unsigned int CALLBACK ThreadFunc(void *ThreadParam)
WCHAR m_szCaptionFmt[100]
CDownloaderProgress m_ProgressBar
ATL::CSimpleArray< DownloadInfo > m_List
CDowloadingAppsListView m_ListView
INT_PTR RealDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
static BOOL CreateInstance(BOOL Modal, CComPtr< CDownloadManager > &Obj)
static CDownloadManager * CreateInstanceHelper(BOOL Modal)
void Add(const DownloadInfo &Info)
VOID SetMarquee(BOOL Enable)
VOID SetProgress(ULONG ulProgress, ULONG ulProgressMax)
CStringW m_szProgressText
LRESULT OnEraseBkgnd(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
LRESULT OnSetText(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
LRESULT OnPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
int InsertItem(const LV_ITEM *pitem)
int InsertColumn(int iCol, LV_COLUMN *pcol)
BOOL SetItemText(int i, int subItem, LPCWSTR text)
HWND Create(HWND hWndParent, _U_RECT rect, LPCTSTR szWindowName=NULL, DWORD dwStyle=0, DWORD dwExStyle=0, _U_MENUorID MenuOrID=0U, LPVOID lpCreateParam=NULL)
int WINAPI DrawShadowText(HDC hdc, LPCWSTR pszText, UINT cch, RECT *prc, DWORD dwFlags, COLORREF crText, COLORREF crShadow, int ixOffset, int iyOffset)
static TAGREF LPCWSTR LPDWORD LPVOID lpBuffer
LPSTR WINAPI StrStrA(LPCSTR lpszStr, LPCSTR lpszSearch)
#define INVALID_HANDLE_VALUE
BOOL WINAPI CopyFileW(IN LPCWSTR lpExistingFileName, IN LPCWSTR lpNewFileName, IN BOOL bFailIfExists)
BOOL WINAPI DeleteFileW(IN LPCWSTR lpFileName)
BOOL WINAPI CreateDirectoryW(IN LPCWSTR lpPathName, IN LPSECURITY_ATTRIBUTES lpSecurityAttributes)
DWORD WINAPI GetFileAttributesW(LPCWSTR lpFileName)
BOOL WINAPI WriteFile(IN HANDLE hFile, IN LPCVOID lpBuffer, IN DWORD nNumberOfBytesToWrite OPTIONAL, OUT LPDWORD lpNumberOfBytesWritten, IN LPOVERLAPPED lpOverlapped OPTIONAL)
DWORD WINAPI GetModuleFileNameW(HINSTANCE hModule, LPWSTR lpFilename, DWORD nSize)
HMODULE WINAPI GetModuleHandleW(LPCWSTR lpModuleName)
int WINAPI lstrcmpW(LPCWSTR str1, LPCWSTR str2)
HRESULT WINAPI PathCreateFromUrlW(LPCWSTR pszUrl, LPWSTR pszPath, LPDWORD pcchPath, DWORD dwReserved)
BOOL WINAPI PathIsValidCharW(WCHAR c, DWORD class)
LPWSTR WINAPI StrFormatByteSizeW(LONGLONG llBytes, LPWSTR lpszDest, UINT cchMax)
HRESULT WINAPI UrlUnescapeW(LPWSTR pszUrl, LPWSTR pszUnescaped, LPDWORD pcchUnescaped, DWORD dwFlags)
DWORD WINAPI FtpGetFileSize(HINTERNET hFile, LPDWORD lpdwFileSizeHigh)
BOOL WINAPI HttpQueryInfoW(HINTERNET hHttpRequest, DWORD dwInfoLevel, LPVOID lpBuffer, LPDWORD lpdwBufferLength, LPDWORD lpdwIndex)
BOOL WINAPI InternetQueryOptionA(HINTERNET hInternet, DWORD dwOption, LPVOID lpBuffer, LPDWORD lpdwBufferLength)
BOOL WINAPI InternetCrackUrlW(const WCHAR *lpszUrl, DWORD dwUrlLength, DWORD dwFlags, URL_COMPONENTSW *lpUC)
BOOL WINAPI InternetCanonicalizeUrlW(LPCWSTR lpszUrl, LPWSTR lpszBuffer, LPDWORD lpdwBufferLength, DWORD dwFlags)
BOOL WINAPI InternetReadFile(HINTERNET hFile, LPVOID lpBuffer, DWORD dwNumOfBytesToRead, LPDWORD pdwNumOfBytesRead)
HINTERNET WINAPI InternetOpenUrlW(HINTERNET hInternet, LPCWSTR lpszUrl, LPCWSTR lpszHeaders, DWORD dwHeadersLength, DWORD dwFlags, DWORD_PTR dwContext)
BOOL WINAPI InternetCloseHandle(HINTERNET hInternet)
HINTERNET WINAPI InternetOpenW(LPCWSTR lpszAgent, DWORD dwAccessType, LPCWSTR lpszProxy, LPCWSTR lpszProxyBypass, DWORD dwFlags)
static VOID BitBlt(_In_ ULONG Left, _In_ ULONG Top, _In_ ULONG Width, _In_ ULONG Height, _In_reads_bytes_(Delta *Height) PUCHAR Buffer, _In_ ULONG BitsPerPixel, _In_ ULONG Delta)
_In_opt_ PFILE_OBJECT _In_opt_ PETHREAD Thread
GLuint GLuint GLsizei count
GLdouble GLdouble GLdouble r
GLenum const GLfloat * params
GLenum GLuint GLenum GLsizei const GLchar * buf
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
HLOCAL NTAPI LocalFree(HLOCAL hMem)
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define DECLARE_NOT_AGGREGATABLE(x)
#define DECLARE_NO_REGISTRY()
#define MESSAGE_HANDLER(msg, func)
#define BEGIN_MSG_MAP(theClass)
BOOL DownloadApplication(CAppInfo *pAppInfo)
static void SetFriendlyUrl(HWND hWnd, LPCWSTR pszUrl)
VOID UrlUnescapeAndMakeFileNameValid(CStringW &str)
BOOL DownloadListOfApplications(const CAtlList< CAppInfo * > &AppsList, BOOL bIsModal)
static VOID MessageBox_LoadString(HWND hOwnerWnd, INT StringID)
@ DLSTATUS_WAITING_INSTALL
static BOOL ShowLastError(HWND hWndOwner, BOOL bInetError, DWORD dwLastError)
CStringW LoadStatusString(DownloadStatus StatusParam)
#define FILENAME_VALID_CHAR
@ DLTYPE_DBUPDATE_UNOFFICIAL
VOID DownloadApplicationsDB(LPCWSTR lpUrl, BOOL IsOfficial)
static BYTE subjectName[]
static DWORD DWORD void LPSTR DWORD cch
_In_ ULONGLONG _In_ ULONGLONG _In_ BOOLEAN Enable
static const WCHAR szName[]
#define LVS_NOCOLUMNHEADER
#define LVS_SHOWSELALWAYS
#define WM_NOTIFY_OPERATIONCOMPLETED
#define WM_NOTIFY_INSTALLERFINISHED
_CRTIMP uintptr_t __cdecl _beginthreadex(_In_opt_ void *_Security, _In_ unsigned _StackSize, _In_ unsigned(__stdcall *_StartAddress)(void *), _In_opt_ void *_ArgList, _In_ unsigned _InitFlag, _Out_opt_ unsigned *_ThrdAddr)
#define SEE_MASK_NOCLOSEPROCESS
BOOL WINAPI DECLSPEC_HOTPATCH ShellExecuteExW(LPSHELLEXECUTEINFOW sei)
bool Equal(const DownloadInfo &other) const
DownloadInfo(const CAppInfo &AppInfo)
LPSTR lpszSignatureAlgName
LPSTR lpszEncryptionAlgName
WCHAR szDownloadDir[MAX_PATH]
WCHAR szNoProxyFor[MAX_PATH]
WCHAR szProxyServer[MAX_PATH]
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
#define LANG_USER_DEFAULT
_In_ HFONT _Out_ PUINT _Out_ PUINT Width
#define INVALID_FILE_ATTRIBUTES
SERVICE_STATUS_HANDLE hStatus
_Must_inspect_result_ _In_ WDFCHILDLIST _In_ PWDF_CHILD_LIST_ITERATOR _Out_ WDFDEVICE _Inout_opt_ PWDF_CHILD_RETRIEVE_INFO Info
_In_ WDFCOLLECTION _In_ ULONG Index
_In_ WDFCOLLECTION _In_ WDFOBJECT Item
int WINAPI GetWindowTextW(HWND hWnd, LPWSTR lpString, int nMaxCount)
DWORD WINAPI GetLastError(void)
#define FORMAT_MESSAGE_IGNORE_INSERTS
#define FORMAT_MESSAGE_FROM_SYSTEM
#define FORMAT_MESSAGE_ALLOCATE_BUFFER
#define FORMAT_MESSAGE_FROM_HMODULE
#define SelectFont(hdc, hfont)
#define SetDlgMsgResult(hwnd, msg, result)
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
HBITMAP WINAPI CreateCompatibleBitmap(_In_ HDC hdc, _In_ INT cx, _In_ INT cy)
BOOL WINAPI DeleteDC(_In_ HDC)
#define INTERNET_SCHEME_FTP
#define INTERNET_SCHEME_HTTP
#define SECURITY_FLAG_SECURE
#define INTERNET_SCHEME_HTTPS
#define INTERNET_FLAG_PRAGMA_NOCACHE
#define INTERNET_OPTION_SECURITY_FLAGS
#define INTERNET_FLAG_DONT_CACHE
#define INTERNET_FLAG_KEEP_CONNECTION
#define INTERNET_FLAG_PASSIVE
#define HTTP_QUERY_FLAG_NUMBER
#define INTERNET_OPEN_TYPE_DIRECT
#define INTERNET_OPEN_TYPE_PROXY
#define HTTP_QUERY_STATUS_CODE
#define INTERNET_OPEN_TYPE_PRECONFIG
#define INTERNET_OPTION_SECURITY_CERTIFICATE_STRUCT
#define HTTP_QUERY_CONTENT_LENGTH
BOOL VerifyInteg(LPCWSTR lpSHA1Hash, LPCWSTR lpFileName)
HWND WINAPI CreateDialogParamW(_In_opt_ HINSTANCE, _In_ LPCWSTR, _In_opt_ HWND, _In_opt_ DLGPROC, _In_ LPARAM)
DWORD WINAPI GetSysColor(_In_ int)
BOOL WINAPI IsWindow(_In_opt_ HWND)
#define GetWindowLongPtrW
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
BOOL WINAPI PostMessageW(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
int WINAPI MessageBoxA(_In_opt_ HWND hWnd, _In_opt_ LPCSTR lpText, _In_opt_ LPCSTR lpCaption, _In_ UINT uType)
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)
BOOL WINAPI SetWindowTextW(_In_ HWND, _In_opt_ LPCWSTR)
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
BOOL WINAPI EndPaint(_In_ HWND, _In_ const PAINTSTRUCT *)
BOOL WINAPI InvalidateRect(_In_opt_ HWND, _In_opt_ LPCRECT, _In_ BOOL)
#define MAKEINTRESOURCEW(i)
HDC WINAPI BeginPaint(_In_ HWND, _Out_ LPPAINTSTRUCT)
#define SetWindowLongPtrW
BOOL WINAPI InflateRect(_Inout_ LPRECT, _In_ int, _In_ int)
#define COLOR_CAPTIONTEXT
BOOL WINAPI IsWindowVisible(_In_ HWND)
BOOL WINAPI DestroyWindow(_In_ HWND)
HICON WINAPI LoadIconW(_In_opt_ HINSTANCE hInstance, _In_ LPCWSTR lpIconName)
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
INT_PTR WINAPI DialogBoxParamW(_In_opt_ HINSTANCE, _In_ LPCWSTR, _In_opt_ HWND, _In_opt_ DLGPROC, _In_ LPARAM)
BOOL WINAPI EndDialog(_In_ HWND, _In_ INT_PTR)