ReactOS 0.4.15-dev-6694-g4ba8af9
appinfo.cpp
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS Applications Manager
3 * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
4 * PURPOSE: Classes for working with available applications
5 * COPYRIGHT: Copyright 2017 Alexander Shaposhnikov (sanchaez@reactos.org)
6 * Copyright 2020 He Yang (1160386205@qq.com)
7 * Copyright 2021-2023 Mark Jansen <mark.jansen@reactos.org>
8 */
9
10#include "rapps.h"
11#include "appview.h"
12
14 : szIdentifier(Identifier), iCategory(Category)
15{
16}
17
19{
20}
21
23 CConfigParser *Parser,
24 const CStringW &PkgName,
25 AppsCategories Category,
26 const CPathW &BasePath)
27 : CAppInfo(PkgName, Category), m_Parser(Parser), m_ScrnshotRetrieved(false), m_LanguagesLoaded(false)
28{
31 m_Parser->GetString(L"URLDownload", m_szUrlDownload);
32 m_Parser->GetString(L"Description", szComments);
33
34 CPathW IconPath = BasePath;
35 IconPath += L"icons";
36
38 if (m_Parser->GetString(L"Icon", IconName))
39 {
41 }
42 else
43 {
44 // inifile.ico
45 IconPath += (szIdentifier + L".ico");
46 }
47
49 {
51 }
52
53 INT iSizeBytes;
54
55 if (m_Parser->GetInt(L"SizeBytes", iSizeBytes))
56 {
59 }
60
61 m_Parser->GetString(L"URLSite", m_szUrlSite);
62}
63
65{
66 delete m_Parser;
67}
68
69VOID
71{
72 RichEdit->SetText(szDisplayName, CFE_BOLD);
73 InsertVersionInfo(RichEdit);
75 InsertLanguageInfo(RichEdit);
76
82}
83
84int
86{
87 int nLeft = 0, nRight = 0;
88
89 while (true)
90 {
91 CStringW leftPart = left.Tokenize(L".", nLeft);
92 CStringW rightPart = right.Tokenize(L".", nRight);
93
94 if (leftPart.IsEmpty() && rightPart.IsEmpty())
95 return 0;
96 if (leftPart.IsEmpty())
97 return -1;
98 if (rightPart.IsEmpty())
99 return 1;
100
101 int leftVal, rightVal;
102
103 if (!StrToIntExW(leftPart, STIF_DEFAULT, &leftVal))
104 leftVal = 0;
105 if (!StrToIntExW(rightPart, STIF_DEFAULT, &rightVal))
106 rightVal = 0;
107
108 if (leftVal > rightVal)
109 return 1;
110 if (rightVal < leftVal)
111 return -1;
112 }
113}
114
115VOID
117{
118 CStringW szRegName;
119 m_Parser->GetString(L"RegName", szRegName);
120
122 if (bIsInstalled)
123 {
124 CStringW szInstalledVersion;
125 CStringW szNameVersion = szDisplayName + L" " + szDisplayVersion;
126 BOOL bHasInstalledVersion = ::GetInstalledVersion(&szInstalledVersion, szRegName) ||
127 ::GetInstalledVersion(&szInstalledVersion, szDisplayName) ||
128 ::GetInstalledVersion(&szInstalledVersion, szNameVersion);
129
130 if (bHasInstalledVersion)
131 {
132 BOOL bHasUpdate = CompareVersion(szInstalledVersion, szDisplayVersion) < 0;
133 if (bHasUpdate)
135 else
137
138 RichEdit->LoadAndInsertText(IDS_AINFO_VERSION, szInstalledVersion, 0);
139 }
140 else
141 {
143 }
144 }
145 else
146 {
148 }
149
151}
152
155{
156 INT IntBuffer;
157 m_Parser->GetInt(L"LicenseType", IntBuffer);
158 CStringW szLicenseString;
159 m_Parser->GetString(L"License", szLicenseString);
160 LicenseType licenseType;
161
162 if (IsLicenseType(IntBuffer))
163 {
164 licenseType = static_cast<LicenseType>(IntBuffer);
165 }
166 else
167 {
168 licenseType = LICENSE_NONE;
169 }
170
171 CStringW szLicense;
172 switch (licenseType)
173 {
175 szLicense.LoadStringW(IDS_LICENSE_OPENSOURCE);
176 break;
177 case LICENSE_FREEWARE:
178 szLicense.LoadStringW(IDS_LICENSE_FREEWARE);
179 break;
180 case LICENSE_TRIAL:
181 szLicense.LoadStringW(IDS_LICENSE_TRIAL);
182 break;
183 default:
184 return szLicenseString;
185 }
186
187 return szLicense + L" (" + szLicenseString + L")";
188}
189
190VOID
192{
194 {
196 }
197
198 if (m_LanguageLCIDs.GetSize() == 0)
199 {
200 return;
201 }
202
203 const INT nTranslations = m_LanguageLCIDs.GetSize();
204 CStringW szLangInfo;
205 CStringW szLoadedTextAvailability;
206 CStringW szLoadedAInfoText;
207
208 szLoadedAInfoText.LoadStringW(IDS_AINFO_LANGUAGES);
209
212 {
213 szLoadedTextAvailability.LoadStringW(IDS_LANGUAGE_AVAILABLE_TRANSLATION);
214 if (nTranslations > 1)
215 {
218 szLangInfo.Format(buf, nTranslations - 1);
219 }
220 else
221 {
222 szLangInfo.LoadStringW(IDS_LANGUAGE_SINGLE);
223 szLangInfo = L" (" + szLangInfo + L")";
224 }
225 }
226 else if (m_LanguageLCIDs.Find(lcEnglish) >= 0)
227 {
228 szLoadedTextAvailability.LoadStringW(IDS_LANGUAGE_ENGLISH_TRANSLATION);
229 if (nTranslations > 1)
230 {
233 szLangInfo.Format(buf, nTranslations - 1);
234 }
235 else
236 {
237 szLangInfo.LoadStringW(IDS_LANGUAGE_SINGLE);
238 szLangInfo = L" (" + szLangInfo + L")";
239 }
240 }
241 else
242 {
243 szLoadedTextAvailability.LoadStringW(IDS_LANGUAGE_NO_TRANSLATION);
244 }
245
246 RichEdit->InsertText(szLoadedAInfoText, CFE_BOLD);
247 RichEdit->InsertText(szLoadedTextAvailability, NULL);
248 RichEdit->InsertText(szLangInfo, CFE_ITALIC);
249}
250
251VOID
253{
254 m_LanguagesLoaded = true;
255
256 CStringW szBuffer;
257 if (!m_Parser->GetString(L"Languages", szBuffer))
258 {
259 return;
260 }
261
262 // Parse parameter string
263 int iIndex = 0;
264 while (true)
265 {
266 CStringW szLocale = szBuffer.Tokenize(L"|", iIndex);
267 if (szLocale.IsEmpty())
268 break;
269
270 szLocale = L"0x" + szLocale;
271
272 INT iLCID;
273 if (StrToIntExW(szLocale, STIF_SUPPORT_HEX, &iLCID))
274 {
275 m_LanguageLCIDs.Add(static_cast<LCID>(iLCID));
276 }
277 }
278}
279
280BOOL
282{
284}
285
286BOOL
288{
289 return FALSE;
290}
291
292BOOL
294{
296 return !Path.IsEmpty();
297}
298
299#define MAX_SCRNSHOT_NUM 16
300BOOL
302{
304 {
305 static_assert(MAX_SCRNSHOT_NUM < 10000, "MAX_SCRNSHOT_NUM is too big");
306 for (int i = 0; i < MAX_SCRNSHOT_NUM; i++)
307 {
308 CStringW ScrnshotField;
309 ScrnshotField.Format(L"Screenshot%d", i + 1);
310 CStringW ScrnshotLocation;
311 if (!m_Parser->GetString(ScrnshotField, ScrnshotLocation))
312 {
313 // We stop at the first screenshot not found,
314 // so screenshots _have_ to be consecutive
315 break;
316 }
317
318 if (PathIsURLW(ScrnshotLocation.GetString()))
319 {
320 m_szScrnshotLocation.Add(ScrnshotLocation);
321 }
322 }
323 m_ScrnshotRetrieved = true;
324 }
325
326 if (m_szScrnshotLocation.GetSize() > 0)
327 {
329 }
330
331 return !Path.IsEmpty();
332}
333
334VOID
336{
337 Url = m_szUrlDownload;
338 m_Parser->GetString(L"SHA1", Sha1);
339 INT iSizeBytes;
340
341 if (m_Parser->GetInt(L"SizeBytes", iSizeBytes))
342 {
343 SizeInBytes = (ULONG)iSizeBytes;
344 }
345 else
346 {
347 SizeInBytes = 0;
348 }
349}
350
351VOID
353{
354 License = LicenseString();
355 Size = m_szSize;
356 UrlSite = m_szUrlSite;
357 UrlDownload = m_szUrlDownload;
358}
359
360BOOL
362{
363 ATLASSERT(FALSE && "Should not be called");
364 return FALSE;
365}
366
368 HKEY Key,
369 const CStringW &KeyName,
370 AppsCategories Category,
371 int KeyIndex)
372 : CAppInfo(KeyName, Category), m_hKey(Key), iKeyIndex(KeyIndex)
373{
374 if (GetApplicationRegString(L"DisplayName", szDisplayName))
375 {
379 }
380}
381
383{
384}
385
386VOID
388 CAppRichEdit *RichEdit,
389 UINT StringID,
390 const CStringW &String,
391 DWORD TextFlags)
392{
393 CStringW Tmp;
395 {
396 RichEdit->InsertTextWithString(StringID, Tmp, TextFlags);
397 }
398}
399
400VOID
402{
403 RichEdit->SetText(szDisplayName, CFE_BOLD);
404 RichEdit->InsertText(L"\n", 0);
405
407 AddApplicationRegString(RichEdit, IDS_INFO_PUBLISHER, L"Publisher", 0);
408 AddApplicationRegString(RichEdit, IDS_INFO_REGOWNER, L"RegOwner", 0);
409 AddApplicationRegString(RichEdit, IDS_INFO_PRODUCTID, L"ProductID", 0);
411 AddApplicationRegString(RichEdit, IDS_INFO_HELPPHONE, L"HelpTelephone", 0);
412 AddApplicationRegString(RichEdit, IDS_INFO_README, L"Readme", 0);
413 AddApplicationRegString(RichEdit, IDS_INFO_CONTACT, L"Contact", 0);
414 AddApplicationRegString(RichEdit, IDS_INFO_UPDATEINFO, L"URLUpdateInfo", CFM_LINK);
415 AddApplicationRegString(RichEdit, IDS_INFO_INFOABOUT, L"URLInfoAbout", CFM_LINK);
417
419 {
421 }
422
424 AddApplicationRegString(RichEdit, IDS_INFO_INSTLOCATION, L"InstallLocation", 0);
425 AddApplicationRegString(RichEdit, IDS_INFO_INSTALLSRC, L"InstallSource", 0);
426
428 {
430 }
431
434}
435
436VOID
438{
439 DWORD dwInstallTimeStamp;
440 SYSTEMTIME InstallLocalTime;
441 if (GetApplicationRegString(L"InstallDate", m_szInstallDate))
442 {
443 ZeroMemory(&InstallLocalTime, sizeof(InstallLocalTime));
444 // Check if we have 8 characters to parse the datetime.
445 // Maybe other formats exist as well?
447 if (m_szInstallDate.GetLength() == 8)
448 {
449 InstallLocalTime.wYear = wcstol(m_szInstallDate.Left(4).GetString(), NULL, 10);
450 InstallLocalTime.wMonth = wcstol(m_szInstallDate.Mid(4, 2).GetString(), NULL, 10);
451 InstallLocalTime.wDay = wcstol(m_szInstallDate.Mid(6, 2).GetString(), NULL, 10);
452 }
453 }
454 // It might be a DWORD (Unix timestamp). try again.
455 else if (GetApplicationRegDword(L"InstallDate", &dwInstallTimeStamp))
456 {
457 FILETIME InstallFileTime;
458 SYSTEMTIME InstallSystemTime;
459
460 UnixTimeToFileTime(dwInstallTimeStamp, &InstallFileTime);
461 FileTimeToSystemTime(&InstallFileTime, &InstallSystemTime);
462
463 // convert to localtime
464 SystemTimeToTzSpecificLocalTime(NULL, &InstallSystemTime, &InstallLocalTime);
465 }
466
467 // convert to readable date string
468 int cchTimeStrLen = GetDateFormatW(LOCALE_USER_DEFAULT, 0, &InstallLocalTime, NULL, 0, 0);
469
471 LOCALE_USER_DEFAULT, // use default locale for current user
472 0, &InstallLocalTime, NULL, m_szInstallDate.GetBuffer(cchTimeStrLen), cchTimeStrLen);
474}
475
476VOID
478{
479 DWORD dwWindowsInstaller = 0;
480 if (GetApplicationRegDword(L"WindowsInstaller", &dwWindowsInstaller) && dwWindowsInstaller)
481 {
482 // MSI has the same info in Uninstall / modify, so manually build it
484 }
485 else
486 {
488 }
489 DWORD dwNoModify = 0;
490 if (!GetApplicationRegDword(L"NoModify", &dwNoModify))
491 {
492 CStringW Tmp;
493 if (GetApplicationRegString(L"NoModify", Tmp))
494 {
495 dwNoModify = Tmp.GetLength() > 0 ? (Tmp[0] == '1') : 0;
496 }
497 else
498 {
499 dwNoModify = 0;
500 }
501 }
502 if (!dwNoModify)
503 {
504 if (dwWindowsInstaller)
505 {
507 }
508 else
509 {
511 }
512 }
513}
514
515BOOL
517{
518 return !szDisplayName.IsEmpty();
519}
520
521BOOL
523{
525 {
527 }
528
529 return !m_szModifyString.IsEmpty();
530}
531
532BOOL
534{
536 return !Path.IsEmpty();
537}
538
539BOOL
541{
542 return FALSE;
543}
544
545VOID
547{
548 ATLASSERT(FALSE && "Should not be called");
549}
550
551VOID
553{
554 ATLASSERT(FALSE && "Should not be called");
555}
556
557BOOL
559{
561 {
563 }
564
566
567 if (bSuccess && !bModify)
568 WriteLogMessage(EVENTLOG_SUCCESS, MSG_SUCCESS_REMOVE, szDisplayName);
569
570 return bSuccess;
571}
572
573BOOL
575{
576 ULONG nChars = 0;
577 // Get the size
578 if (m_hKey.QueryStringValue(lpKeyName, NULL, &nChars) != ERROR_SUCCESS)
579 {
580 String.Empty();
581 return FALSE;
582 }
583
584 LPWSTR Buffer = String.GetBuffer(nChars);
585 LONG lResult = m_hKey.QueryStringValue(lpKeyName, Buffer, &nChars);
586 if (nChars > 0 && Buffer[nChars - 1] == UNICODE_NULL)
587 nChars--;
588 String.ReleaseBuffer(nChars);
589
590 if (lResult != ERROR_SUCCESS)
591 {
592 String.Empty();
593 return FALSE;
594 }
595
596 if (String.Find('%') >= 0)
597 {
598 CStringW Tmp;
600 if (dwLen > 0)
601 {
602 BOOL bSuccess = ExpandEnvironmentStringsW(String, Tmp.GetBuffer(dwLen), dwLen) == dwLen;
603 Tmp.ReleaseBuffer(dwLen - 1);
604 if (bSuccess)
605 {
606 String = Tmp;
607 }
608 else
609 {
610 String.Empty();
611 return FALSE;
612 }
613 }
614 }
615
616 return TRUE;
617}
618
619BOOL
621{
622 DWORD dwSize = sizeof(DWORD), dwType;
623 if (RegQueryValueExW(m_hKey, lpKeyName, NULL, &dwType, (LPBYTE)lpValue, &dwSize) != ERROR_SUCCESS ||
624 dwType != REG_DWORD)
625 {
626 return FALSE;
627 }
628
629 return TRUE;
630}
#define ATLASSERT(x)
Definition: CComVariant.cpp:10
PRTL_UNICODE_STRING_BUFFER Path
#define MAX_SCRNSHOT_NUM
Definition: appinfo.cpp:299
int CompareVersion(const CStringW &left, const CStringW &right)
Definition: appinfo.cpp:85
LicenseType
Definition: appinfo.h:9
@ LICENSE_NONE
Definition: appinfo.h:10
@ LICENSE_OPENSOURCE
Definition: appinfo.h:11
@ LICENSE_TRIAL
Definition: appinfo.h:13
@ LICENSE_FREEWARE
Definition: appinfo.h:12
BOOL IsLicenseType(INT x)
Definition: appinfo.h:19
AppsCategories
Definition: appinfo.h:25
@ Identifier
Definition: asmpp.cpp:95
BOOL WriteLogMessage(WORD wType, DWORD dwEventID, LPCWSTR lpMsg)
Definition: misc.cpp:227
BOOL StartProcess(const CStringW &Path, BOOL Wait)
Definition: misc.cpp:86
BOOL GetInstalledVersion(CStringW *pszVersion, const CStringW &szRegName)
Definition: misc.cpp:280
void UnixTimeToFileTime(DWORD dwUnixTime, LPFILETIME pFileTime)
Definition: misc.cpp:361
#define IDS_AINFO_AVAILABLEVERSION
Definition: resource.h:167
#define IDS_INFO_INSTALLSRC
Definition: resource.h:155
#define IDS_STATUS_NOTINSTALLED
Definition: resource.h:195
#define IDS_AINFO_SIZE
Definition: resource.h:163
#define IDS_INFO_REGOWNER
Definition: resource.h:148
#define IDS_INFO_VERSION
Definition: resource.h:142
#define IDS_LICENSE_TRIAL
Definition: resource.h:206
#define IDS_AINFO_VERSION
Definition: resource.h:161
#define IDS_LICENSE_FREEWARE
Definition: resource.h:205
#define IDS_INFO_HELPLINK
Definition: resource.h:145
#define IDS_LANGUAGE_MORE_PLACEHOLDER
Definition: resource.h:213
#define IDS_LANGUAGE_SINGLE
Definition: resource.h:212
#define IDS_INFO_INSTALLDATE
Definition: resource.h:158
#define IDS_AINFO_PACKAGE_NAME
Definition: resource.h:172
#define IDS_INFO_HELPPHONE
Definition: resource.h:146
#define IDS_AINFO_LICENSE
Definition: resource.h:165
#define IDS_STATUS_UPDATE_AVAILABLE
Definition: resource.h:197
#define IDS_LANGUAGE_NO_TRANSLATION
Definition: resource.h:210
#define IDS_INFO_INSTLOCATION
Definition: resource.h:154
#define IDS_INFO_COMMENTS
Definition: resource.h:153
#define IDS_AINFO_LANGUAGES
Definition: resource.h:168
#define IDS_INFO_UPDATEINFO
Definition: resource.h:151
#define IDS_AINFO_DESCRIPTION
Definition: resource.h:162
#define IDS_AINFO_URLSITE
Definition: resource.h:164
#define IDS_INFO_CONTACT
Definition: resource.h:150
#define IDS_INFO_MODIFYPATH
Definition: resource.h:157
#define IDS_INFO_UNINSTALLSTR
Definition: resource.h:156
#define IDS_LICENSE_OPENSOURCE
Definition: resource.h:204
#define IDS_LANGUAGE_AVAILABLE_PLACEHOLDER
Definition: resource.h:214
#define IDS_INFO_PRODUCTID
Definition: resource.h:149
#define IDS_INFO_README
Definition: resource.h:147
#define IDS_AINFO_URLDOWNLOAD
Definition: resource.h:166
#define IDS_LANGUAGE_AVAILABLE_TRANSLATION
Definition: resource.h:209
#define IDS_INFO_PUBLISHER
Definition: resource.h:144
#define IDS_STATUS_INSTALLED
Definition: resource.h:194
#define IDS_LANGUAGE_ENGLISH_TRANSLATION
Definition: resource.h:211
#define IDS_INFO_INFOABOUT
Definition: resource.h:152
LONG QueryStringValue(LPCTSTR pszValueName, LPTSTR pszValue, ULONG *pnChars)
Definition: atlbase.h:1240
int GetSize() const
Definition: atlsimpcoll.h:104
BOOL Add(const T &t)
Definition: atlsimpcoll.h:58
int Find(const T &t) const
Definition: atlsimpcoll.h:82
int GetLength() const
Definition: atlsimpstr.h:362
bool IsEmpty() const
Definition: atlsimpstr.h:389
void ReleaseBuffer(_In_ int nNewLength=-1)
Definition: atlsimpstr.h:382
CStringT Left(int nCount) const
Definition: cstringt.h:776
void __cdecl Format(UINT nFormatID,...)
Definition: cstringt.h:818
CStringT & Trim()
Definition: cstringt.h:1046
CStringT Tokenize(_In_z_ PCXSTR pszTokens, _Inout_ int &iStart) const
Definition: cstringt.h:947
CStringT Mid(int iFirst, int nCount) const
Definition: cstringt.h:748
Definition: bufpool.h:45
CStringW szComments
Definition: appinfo.h:80
CStringW szDisplayIcon
Definition: appinfo.h:77
CAppInfo(const CStringW &Identifier, AppsCategories Category)
Definition: appinfo.cpp:13
CStringW szDisplayName
Definition: appinfo.h:78
CStringW szDisplayVersion
Definition: appinfo.h:79
virtual ~CAppInfo()
Definition: appinfo.cpp:18
const CStringW szIdentifier
Definition: appinfo.h:74
VOID InsertTextWithString(UINT StringID, const CStringW &Text, DWORD TextFlags)
Definition: appview.cpp:260
VOID LoadAndInsertText(UINT uStringID, const CStringW &szText, DWORD TextFlags)
Definition: appview.cpp:236
CAvailableApplicationInfo(CConfigParser *Parser, const CStringW &PkgName, AppsCategories Category, const CPathW &BasePath)
Definition: appinfo.cpp:22
CSimpleArray< LCID > m_LanguageLCIDs
Definition: appinfo.h:108
virtual VOID GetDisplayInfo(CStringW &License, CStringW &Size, CStringW &UrlSite, CStringW &UrlDownload) override
Definition: appinfo.cpp:352
virtual BOOL RetrieveScreenshot(CStringW &Path) override
Definition: appinfo.cpp:301
virtual BOOL UninstallApplication(BOOL bModify) override
Definition: appinfo.cpp:361
virtual VOID GetDownloadInfo(CStringW &Url, CStringW &Sha1, ULONG &SizeInBytes) const override
Definition: appinfo.cpp:335
virtual BOOL CanModify() override
Definition: appinfo.cpp:287
virtual BOOL Valid() const override
Definition: appinfo.cpp:281
VOID InsertLanguageInfo(CAppRichEdit *RichEdit)
Definition: appinfo.cpp:191
virtual BOOL RetrieveIcon(CStringW &Path) const override
Definition: appinfo.cpp:293
CSimpleArray< CStringW > m_szScrnshotLocation
Definition: appinfo.h:103
class CConfigParser * m_Parser
Definition: appinfo.h:102
virtual VOID ShowAppInfo(CAppRichEdit *RichEdit) override
Definition: appinfo.cpp:70
VOID InsertVersionInfo(CAppRichEdit *RichEdit)
Definition: appinfo.cpp:116
BOOL GetString(const CStringW &KeyName, CStringW &ResultString)
BOOL GetInt(const CStringW &KeyName, INT &iResult)
virtual VOID ShowAppInfo(CAppRichEdit *RichEdit) override
Definition: appinfo.cpp:401
virtual BOOL RetrieveScreenshot(CStringW &Path) override
Definition: appinfo.cpp:540
BOOL GetApplicationRegDword(LPCWSTR lpKeyName, DWORD *lpValue)
Definition: appinfo.cpp:620
CInstalledApplicationInfo(HKEY Key, const CStringW &KeyName, AppsCategories Category, int KeyIndex)
Definition: appinfo.cpp:367
CStringW m_szUninstallString
Definition: appinfo.h:150
virtual BOOL Valid() const override
Definition: appinfo.cpp:516
virtual BOOL RetrieveIcon(CStringW &Path) const override
Definition: appinfo.cpp:533
BOOL GetApplicationRegString(LPCWSTR lpKeyName, CStringW &String)
Definition: appinfo.cpp:574
virtual BOOL UninstallApplication(BOOL bModify) override
Definition: appinfo.cpp:558
VOID AddApplicationRegString(CAppRichEdit *RichEdit, UINT StringID, const CStringW &String, DWORD TextFlags)
Definition: appinfo.cpp:387
virtual VOID GetDisplayInfo(CStringW &License, CStringW &Size, CStringW &UrlSite, CStringW &UrlDownload) override
Definition: appinfo.cpp:552
virtual BOOL CanModify() override
Definition: appinfo.cpp:522
virtual VOID GetDownloadInfo(CStringW &Url, CStringW &Sha1, ULONG &SizeInBytes) const override
Definition: appinfo.cpp:546
VOID InsertText(LPCWSTR lpszText, DWORD dwEffects)
Definition: crichedit.h:77
VOID SetText(LPCWSTR lpszText, DWORD dwEffects)
Definition: crichedit.h:91
#define ERROR_SUCCESS
Definition: deptool.c:10
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
LPCTSTR IconName
Definition: desktop.c:53
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
Definition: reg.c:4118
#define MAX_PATH
Definition: compat.h:34
DWORD WINAPI ExpandEnvironmentStringsW(IN LPCWSTR lpSrc, IN LPWSTR lpDst, IN DWORD nSize)
Definition: environ.c:519
BOOL WINAPI FileTimeToSystemTime(IN CONST FILETIME *lpFileTime, OUT LPSYSTEMTIME lpSystemTime)
Definition: time.c:188
BOOL WINAPI SystemTimeToTzSpecificLocalTime(CONST TIME_ZONE_INFORMATION *lpTimeZoneInformation, CONST SYSTEMTIME *lpUniversalTime, LPSYSTEMTIME lpLocalTime)
Definition: timezone.c:377
static const WCHAR IconPath[]
Definition: install.c:51
BOOL WINAPI PathFileExistsW(LPCWSTR lpszPath)
Definition: path.c:1777
LPWSTR WINAPI StrFormatByteSizeW(LONGLONG llBytes, LPWSTR lpszDest, UINT cchMax)
Definition: string.c:2380
BOOL WINAPI StrToIntExW(LPCWSTR lpszStr, DWORD dwFlags, LPINT lpiRet)
Definition: string.c:970
BOOL WINAPI PathIsURLW(LPCWSTR lpstrPath)
Definition: url.c:2432
static BOOLEAN bSuccess
Definition: drive.cpp:433
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
GLdouble GLdouble right
Definition: glext.h:10859
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
GLint left
Definition: glext.h:7726
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
_Check_return_ long __cdecl wcstol(_In_z_ const wchar_t *_Str, _Out_opt_ _Deref_post_z_ wchar_t **_EndPtr, _In_ int _Radix)
LCID WINAPI GetUserDefaultLCID(void)
Definition: lang.c:778
INT WINAPI GetDateFormatW(LCID lcid, DWORD dwFlags, const SYSTEMTIME *lpTime, LPCWSTR lpFormat, LPWSTR lpDateStr, INT cchOut)
Definition: lcformat.c:993
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:56
unsigned int UINT
Definition: ndis.h:50
#define DWORD
Definition: nt_native.h:44
#define LOCALE_USER_DEFAULT
#define UNICODE_NULL
#define SORT_DEFAULT
#define MAKELCID(lgid, srtid)
#define L(x)
Definition: ntvdm.h:50
#define false
Definition: osdep.h:35
long LONG
Definition: pedump.c:60
#define CFE_BOLD
Definition: richedit.h:406
#define CFE_ITALIC
Definition: richedit.h:407
#define CFE_LINK
Definition: richedit.h:411
#define CFM_LINK
Definition: richedit.h:337
#define REG_DWORD
Definition: sdbapi.c:596
#define MAKELANGID(p, s)
Definition: nls.h:15
#define LANG_ENGLISH
Definition: nls.h:52
#define SUBLANG_DEFAULT
Definition: nls.h:168
DWORD LCID
Definition: nls.h:13
#define STIF_SUPPORT_HEX
Definition: shlwapi.h:1452
#define STIF_DEFAULT
Definition: shlwapi.h:1451
WORD wYear
Definition: winbase.h:905
WORD wMonth
Definition: winbase.h:906
WORD wDay
Definition: winbase.h:908
unsigned char * LPBYTE
Definition: typedefs.h:53
int32_t INT
Definition: typedefs.h:58
uint32_t ULONG
Definition: typedefs.h:59
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
Definition: wdfdevice.h:4533
_Must_inspect_result_ _In_ WDFDEVICE _In_ PCUNICODE_STRING KeyName
Definition: wdfdevice.h:2699
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFSTRING String
Definition: wdfdevice.h:2433
#define ZeroMemory
Definition: winbase.h:1700
#define EVENTLOG_SUCCESS
Definition: winnt_old.h:2886
WCHAR * LPWSTR
Definition: xmlstorage.h:184
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185