ReactOS  0.4.15-dev-1018-g0695ecb
available.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 2009 Dmitry Chapyshev (dmitry@reactos.org)
6  * Copyright 2015 Ismael Ferreras Morezuelas (swyterzone+ros@gmail.com)
7  * Copyright 2017 Alexander Shaposhnikov (sanchaez@reactos.org)
8  * Copyright 2020 He Yang (1160386205@qq.com)
9  */
10 #include "rapps.h"
11 
12 #include "available.h"
13 #include "misc.h"
14 #include "dialogs.h"
15 
16 #include <atlcoll.h>
17 #include <atlsimpcoll.h>
18 #include <atlstr.h>
19 
20  // CAvailableApplicationInfo
22  : m_LicenseType(LICENSE_NONE), m_SizeBytes(0), m_sFileName(sFileNameParam),
23  m_IsInstalled(FALSE), m_HasLanguageInfo(FALSE), m_HasInstalledVersion(FALSE)
24 {
25  RetrieveGeneralInfo(AvlbStrings);
26 }
27 
29 {
31  {
32  RetrieveGeneralInfo(AvlbStrings);
33  }
34 }
35 
36 // Lazily load general info from the file
38 {
40 
41  // TODO: I temporarily use the file name (without suffix) as package name.
42  // It should be better to put this in a field of ini file.
43  // consider write a converter to do this and write a github action for rapps-db to ensure package_name is unique.
47 
48  m_Parser->GetInt(L"Category", m_Category);
49 
50  if (!GetString(L"Name", m_szName)
51  || !GetString(L"URLDownload", m_szUrlDownload))
52  {
53  delete m_Parser;
54  return;
55  }
56 
57  GetString(L"RegName", m_szRegName);
58  GetString(L"Version", m_szVersion);
59  GetString(L"License", m_szLicense);
60  GetString(L"Description", m_szDesc);
61  GetString(L"URLSite", m_szUrlSite);
62  GetString(L"SHA1", m_szSHA1);
63 
64  static_assert(MAX_SCRNSHOT_NUM < 10000, "MAX_SCRNSHOT_NUM is too big");
65  for (int i = 0; i < MAX_SCRNSHOT_NUM; i++)
66  {
67  CStringW ScrnshotField;
68  ScrnshotField.Format(L"Screenshot%d", i + 1);
69  CStringW ScrnshotLocation;
70  if (!GetString(ScrnshotField, ScrnshotLocation))
71  {
72  continue;
73  }
74 
75 
76  if (PathIsURLW(ScrnshotLocation.GetString()))
77  {
78  m_szScrnshotLocation.Add(ScrnshotLocation);
79  }
80  else
81  {
82  // TODO: Does the filename contain anything stuff like ":" "<" ">" ?
83  // these stuff may lead to security issues
84  ATL::CStringW ScrnshotName = AvlbStrings.szAppsPath;
85  PathAppendW(ScrnshotName.GetBuffer(MAX_PATH), L"screenshots");
86  BOOL bSuccess = PathAppendNoDirEscapeW(ScrnshotName.GetBuffer(), ScrnshotLocation.GetString());
87  ScrnshotName.ReleaseBuffer();
88  if (bSuccess)
89  {
90  m_szScrnshotLocation.Add(ScrnshotName);
91  }
92  }
93  }
94 
95  // TODO: are we going to support specify an URL for an icon ?
97  if (GetString(L"Icon", IconLocation))
98  {
99  // TODO: Does the filename contain anything stuff like ":" "<" ">" ?
100  // these stuff may lead to security issues
101  ATL::CStringW IconPath = AvlbStrings.szAppsPath;
102  PathAppendW(IconPath.GetBuffer(MAX_PATH), L"icons");
103  BOOL bSuccess = PathAppendNoDirEscapeW(IconPath.GetBuffer(), IconLocation.GetString());
104  IconPath.ReleaseBuffer();
105 
106  if (bSuccess)
107  {
109  }
110  }
111 
112  RetrieveSize();
116 
117  if (m_IsInstalled)
118  {
120  }
121 
122  delete m_Parser;
123 }
124 
126 {
129 }
130 
132 {
133  ATL::CStringW szNameVersion;
134  szNameVersion = m_szName + L" " + m_szVersion;
137  || ::GetInstalledVersion(&m_szInstalledVersion, szNameVersion);
138 }
139 
141 {
142  const WCHAR cDelimiter = L'|';
143  ATL::CStringW szBuffer;
144 
145  // TODO: Get multiline parameter
146  if (!m_Parser->GetString(L"Languages", szBuffer))
147  {
149  return;
150  }
151 
152  // Parse parameter string
153  ATL::CStringW m_szLocale;
154  INT iLCID;
155  for (INT i = 0; szBuffer[i] != UNICODE_NULL; ++i)
156  {
157  if (szBuffer[i] != cDelimiter && szBuffer[i] != L'\n')
158  {
159  m_szLocale += szBuffer[i];
160  }
161  else
162  {
163  if (StrToIntExW(m_szLocale.GetString(), STIF_DEFAULT, &iLCID))
164  {
165  m_LanguageLCIDs.Add(static_cast<LCID>(iLCID));
166  m_szLocale.Empty();
167  }
168  }
169  }
170 
171  // For the text after delimiter
172  if (!m_szLocale.IsEmpty())
173  {
174  if (StrToIntExW(m_szLocale.GetString(), STIF_DEFAULT, &iLCID))
175  {
176  m_LanguageLCIDs.Add(static_cast<LCID>(iLCID));
177  }
178  }
179 
181 }
182 
184 {
185  INT IntBuffer;
186 
187  m_Parser->GetInt(L"LicenseType", IntBuffer);
188 
189  if (IsLicenseType(IntBuffer))
190  {
191  m_LicenseType = static_cast<LicenseType>(IntBuffer);
192  }
193  else
194  {
196  }
197 }
198 
200 {
201  INT iSizeBytes;
202 
203  if (!m_Parser->GetInt(L"SizeBytes", iSizeBytes))
204  {
205  // fall back to "Size" string
206  GetString(L"Size", m_szSize);
207  return;
208  }
209 
210  m_SizeBytes = iSizeBytes;
213 }
214 
216 {
217  if (!m_HasLanguageInfo)
218  {
219  return FALSE;
220  }
221 
222  //Find locale code in the list
223  const INT nLanguagesSize = m_LanguageLCIDs.GetSize();
224  for (INT i = 0; i < nLanguagesSize; ++i)
225  {
226  if (m_LanguageLCIDs[i] == what)
227  {
228  return TRUE;
229  }
230  }
231 
232  return FALSE;
233 }
234 
236 {
237  return m_HasLanguageInfo;
238 }
239 
241 {
243 }
244 
246 {
248 }
249 
251 {
252  return m_IsInstalled;
253 }
254 
256 {
257  return m_HasInstalledVersion;
258 }
259 
261 {
263 }
264 
266 {
267  if (Index >= (UINT)m_szScrnshotLocation.GetSize())
268  {
269  return FALSE;
270  }
271  ScrnshotLocation = m_szScrnshotLocation[Index];
272  return TRUE;
273 }
274 
276 {
278  {
279  return FALSE;
280  }
282  return TRUE;
283 }
284 
286 {
287  RtlCopyMemory(&m_ftCacheStamp, ftTime, sizeof(FILETIME));
288 }
289 
291 {
292  if (!m_Parser->GetString(lpKeyName, ReturnedString))
293  {
294  ReturnedString.Empty();
295  return FALSE;
296  }
297  return TRUE;
298 }
299 // CAvailableApplicationInfo
300 
301 // AvailableStrings
303 {
304  //FIXME: maybe provide a fallback?
306  {
307  szAppsPath = szPath;
310 
311  szCabName = L"rappmgr.cab";
312  szCabDir = szPath;
316 
320  }
321 }
322 // AvailableStrings
323 
324 // CAvailableApps
326 
328 {
329 }
330 
332 {
333  POSITION InfoListPosition = m_InfoList.GetHeadPosition();
334 
335  /* loop and deallocate all the cached app infos in the list */
336  while (InfoListPosition)
337  {
338  CAvailableApplicationInfo* Info = m_InfoList.GetNext(InfoListPosition);
339  delete Info;
340  }
341 
343 }
344 
346 {
348  WIN32_FIND_DATAW FindFileData;
349 
350  hFind = FindFirstFileW(m_Strings.szSearchPath.GetString(), &FindFileData);
351 
352  if (hFind != INVALID_HANDLE_VALUE)
353  {
355  do
356  {
358  PathAppendW(szTmp.GetBuffer(MAX_PATH), FindFileData.cFileName);
359  szTmp.ReleaseBuffer();
360  DeleteFileW(szTmp.GetString());
361  } while (FindNextFileW(hFind, &FindFileData) != 0);
362  FindClose(hFind);
363  }
364 
367 }
368 
370 {
372  WIN32_FIND_DATAW FindFileData;
373 
375  {
376  return FALSE;
377  }
378 
379  //if there are some files in the db folder - we're good
380  hFind = FindFirstFileW(m_Strings.szSearchPath, &FindFileData);
381  if (hFind != INVALID_HANDLE_VALUE)
382  {
383  FindClose(hFind);
384  return TRUE;
385  }
386 
389 
393  {
394  return FALSE;
395  }
396 
398 
399  return TRUE;
400 }
401 
403 {
405  return UpdateAppsDB();
406 }
407 
409 {
410  if (EnumType == ENUM_CAT_SELECTED)
411  {
412  CAvailableApplicationInfo *EnumAvlbInfo = NULL;
413 
414  // enum all object in m_SelectedList and invoke callback
418  {
419  EnumAvlbInfo->RefreshAppInfo(m_Strings);
420 
421  if (lpEnumProc)
422  lpEnumProc(EnumAvlbInfo, TRUE, param);
423  }
424  return TRUE;
425  }
426  else
427  {
429  WIN32_FIND_DATAW FindFileData;
430 
431  hFind = FindFirstFileW(m_Strings.szSearchPath.GetString(), &FindFileData);
432 
433  if (hFind == INVALID_HANDLE_VALUE)
434  {
435  //no db yet
436  return FALSE;
437  }
438 
439  do
440  {
441  // loop for all the cached entries
442  POSITION CurrentListPosition = m_InfoList.GetHeadPosition();
444 
445  while (CurrentListPosition != NULL)
446  {
447  POSITION LastListPosition = CurrentListPosition;
448  Info = m_InfoList.GetNext(CurrentListPosition);
449 
450  // do we already have this entry in cache?
451  if (Info->m_sFileName == FindFileData.cFileName)
452  {
453  // is it current enough, or the file has been modified since our last time here?
454  if (CompareFileTime(&FindFileData.ftLastWriteTime, &Info->m_ftCacheStamp) == 1)
455  {
456  // recreate our cache, this is the slow path
457  m_InfoList.RemoveAt(LastListPosition);
458 
459  // also remove this in selected list (if exist)
461 
462  delete Info;
463  Info = NULL;
464  break;
465  }
466  else
467  {
468  // speedy path, compare directly, we already have the data
469  goto skip_if_cached;
470  }
471  }
472  }
473 
474  // create a new entry
475  Info = new CAvailableApplicationInfo(FindFileData.cFileName, m_Strings);
476 
477  // set a timestamp for the next time
478  Info->SetLastWriteTime(&FindFileData.ftLastWriteTime);
480 
481  skip_if_cached:
482  if (EnumType == Info->m_Category
483  || EnumType == ENUM_ALL_AVAILABLE)
484  {
485  Info->RefreshAppInfo(m_Strings);
486 
487  if (lpEnumProc)
488  {
489  if (m_SelectedList.Find(Info))
490  {
491  lpEnumProc(Info, TRUE, param);
492  }
493  else
494  {
495  lpEnumProc(Info, FALSE, param);
496  }
497  }
498  }
499  } while (FindNextFileW(hFind, &FindFileData));
500 
501  FindClose(hFind);
502  return TRUE;
503  }
504 }
505 
507 {
508  return m_SelectedList.AddTail(AvlbInfo) != 0;
509 }
510 
512 {
513  POSITION Position = m_SelectedList.Find(AvlbInfo);
514  if (Position)
515  {
517  return TRUE;
518  }
519  return FALSE;
520 }
521 
523 {
525  return;
526 }
527 
529 {
530  return m_SelectedList.GetCount();
531 }
532 
534 {
535  if (m_InfoList.IsEmpty())
536  {
537  return NULL;
538  }
539 
540  // linear search
541  POSITION CurrentListPosition = m_InfoList.GetHeadPosition();
543  while (CurrentListPosition != NULL)
544  {
545  info = m_InfoList.GetNext(CurrentListPosition);
546  if (info->m_szPkgName.CompareNoCase(szPkgName) == 0)
547  {
548  return info;
549  }
550  }
551  return NULL;
552 }
553 
555 {
557  for (INT i = 0; i < PkgNameList.GetSize(); ++i)
558  {
560  if (Info)
561  {
562  result.Add(*Info);
563  }
564  }
565  return result;
566 }
567 
569 {
570  return m_Strings.szPath;
571 }
572 
574 {
575  return m_Strings.szAppsPath;
576 }
577 
579 {
580  return m_Strings.szCabPath;
581 }
582 // CAvailableApps
VOID RetrieveGeneralInfo(AvailableStrings &m_Strings)
Definition: available.cpp:37
BOOL WINAPI CreateDirectoryW(IN LPCWSTR lpPathName, IN LPSECURITY_ATTRIBUTES lpSecurityAttributes)
Definition: dir.c:90
BOOL WINAPI FindNextFileW(IN HANDLE hFindFile, OUT LPWIN32_FIND_DATAW lpFindFileData)
Definition: find.c:382
ATL::CStringW m_sFileName
Definition: available.h:62
LPWSTR WINAPI StrFormatByteSizeW(LONGLONG llBytes, LPWSTR lpszDest, UINT cchMax)
Definition: string.c:2380
POSITION GetHeadPosition() const
Definition: atlcoll.h:549
#define MAKELCID(lgid, srtid)
const ATL::CStringW & GetAppPath() const
Definition: available.cpp:573
ATL::CStringW m_szPkgName
Definition: available.h:57
BOOL ExtractFilesFromCab(const ATL::CStringW &szCabName, const ATL::CStringW &szCabDir, const ATL::CStringW &szOutputDir)
Definition: cabinet.cpp:256
NTSYSAPI VOID NTAPI RtlCopyMemory(VOID UNALIGNED *Destination, CONST VOID UNALIGNED *Source, ULONG Length)
ATL::CStringW m_szLicense
Definition: available.h:49
#define APPLICATION_DATABASE_URL
Definition: defines.h:33
BOOL Add(const T &t)
Definition: atlsimpcoll.h:58
#define STIF_DEFAULT
Definition: shlwapi.h:1451
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
BOOL GetInstalledVersion(ATL::CStringW *pszVersion, const ATL::CStringW &szRegName)
Definition: misc.cpp:310
#define TRUE
Definition: types.h:120
static COORD Position
Definition: mouse.c:34
VOID RemoveAllSelected()
Definition: available.cpp:522
ATL::CSimpleArray< ATL::CStringW > m_szScrnshotLocation
Definition: available.h:55
#define SUBLANG_DEFAULT
Definition: nls.h:168
BOOL HasInstalledVersion() const
Definition: available.cpp:255
VOID DownloadApplicationsDB(LPCWSTR lpUrl, BOOL IsOfficial)
Definition: loaddlg.cpp:1002
ATL::CStringW m_szUrlSite
Definition: available.h:52
#define INVALID_HANDLE_VALUE
Definition: compat.h:479
VOID SetLastWriteTime(FILETIME *ftTime)
Definition: available.cpp:285
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1059
void __cdecl Format(UINT nFormatID,...)
Definition: cstringt.h:716
DWORD LCID
Definition: nls.h:13
LCID WINAPI GetUserDefaultLCID(void)
Definition: lang.c:768
BOOL GetInt(const ATL::CStringW &KeyName, INT &iResult)
Definition: misc.cpp:392
CAvailableApplicationInfo * FindAppByPkgName(const ATL::CStringW &szPkgName) const
Definition: available.cpp:533
BOOL IsLicenseType(INT x)
Definition: available.h:23
char szTmp[518]
static BOOL UpdateAppsDB()
Definition: available.cpp:369
int GetSize() const
Definition: atlsimpcoll.h:104
int32_t INT
Definition: typedefs.h:58
static BOOLEAN bSuccess
Definition: drive.cpp:419
struct TraceInfo Info
WCHAR szSourceURL[INTERNET_MAX_URL_LENGTH]
Definition: settings.h:24
BOOL WINAPI PathIsURLW(LPCWSTR lpstrPath)
Definition: url.c:2432
BOOL WINAPI PathAppendW(LPWSTR lpszPath, LPCWSTR lpszAppend)
Definition: path.c:121
BOOL GetString(LPCWSTR lpKeyName, ATL::CStringW &ReturnedString)
Definition: available.cpp:290
struct _test_info info[]
Definition: SetCursorPos.c:19
ATL::CStringW m_szDesc
Definition: available.h:50
BOOL bUseSource
Definition: settings.h:23
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
ATL::CStringW szCabPath
Definition: available.h:31
void ReleaseBuffer(_In_ int nNewLength=-1)
Definition: atlsimpstr.h:372
#define FALSE
Definition: types.h:117
#define UNICODE_NULL
void WINAPI PathRemoveExtensionW(LPWSTR lpszPath)
Definition: path.c:818
ATL::CStringW m_szUrlDownload
Definition: available.h:53
unsigned int BOOL
Definition: ntddk_ex.h:94
ULONG CurrentPosition
Definition: patchapi.h:57
BOOL WINAPI DeleteFileW(IN LPCWSTR lpFileName)
Definition: delete.c:39
ATL::CStringW m_szSize
Definition: available.h:51
VOID FreeCachedEntries()
Definition: available.cpp:331
smooth NULL
Definition: ftsmooth.c:416
size_t GetCount() const
Definition: atlcoll.h:537
BOOL WINAPI RemoveDirectoryW(IN LPCWSTR lpPathName)
Definition: dir.c:732
BOOL FindInLanguages(LCID what) const
Definition: available.cpp:215
ATL::CSimpleArray< CAvailableApplicationInfo > FindAppsByPkgNameList(const ATL::CSimpleArray< ATL::CStringW > &arrAppsNames) const
Definition: available.cpp:554
const ATL::CStringW & GetFolderPath() const
Definition: available.cpp:568
BOOL HasEnglishLanguage() const
Definition: available.cpp:245
E & GetNext(_Inout_ POSITION &pos)
Definition: atlcoll.h:561
ATL::CSimpleArray< LCID > m_LanguageLCIDs
Definition: available.h:54
LONG WINAPI CompareFileTime(IN CONST FILETIME *lpFileTime1, IN CONST FILETIME *lpFileTime2)
Definition: time.c:106
SETTINGS_INFO SettingsInfo
Definition: winmain.cpp:25
BOOL Enum(INT EnumType, AVAILENUMPROC lpEnumProc, PVOID param)
Definition: available.cpp:408
static AvailableStrings m_Strings
Definition: available.h:111
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define SORT_DEFAULT
ATL::CStringW m_szVersion
Definition: available.h:48
GLfloat param
Definition: glext.h:5796
#define MAX_PATH
Definition: compat.h:34
PCXSTR GetString() const
Definition: atlsimpstr.h:361
static const UCHAR Index[8]
Definition: usbohci.c:18
ATL::CStringW m_szInstalledVersion
Definition: available.h:67
static VOID DeleteCurrentAppsDB()
Definition: available.cpp:345
BOOL GetStorageDirectory(ATL::CStringW &lpDirectory)
Definition: misc.cpp:180
void RemoveAll()
Definition: atlcoll.h:725
VOID RefreshAppInfo(AvailableStrings &m_Strings)
Definition: available.cpp:28
BOOL WINAPI StrToIntExW(LPCWSTR lpszStr, DWORD dwFlags, LPINT lpiRet)
Definition: string.c:970
#define LANG_ENGLISH
Definition: nls.h:52
#define MAX_SCRNSHOT_NUM
Definition: available.h:11
E & GetAt(_In_ POSITION pos)
Definition: atlcoll.h:593
ATL::CStringW m_szRegName
Definition: available.h:47
int GetSelectedCount()
Definition: available.cpp:528
static const WCHAR L[]
Definition: oid.c:1250
BOOL AddSelected(CAvailableApplicationInfo *AvlbInfo)
Definition: available.cpp:506
BOOL HasLanguageInfo() const
Definition: available.cpp:235
ATL::CStringW m_szName
Definition: available.h:46
BOOL(CALLBACK * AVAILENUMPROC)(CAvailableApplicationInfo *Info, BOOL bInitialCheckState, PVOID param)
Definition: available.h:103
static BOOL ForceUpdateAppsDB()
Definition: available.cpp:402
ATL::CStringW szCabDir
Definition: available.h:35
ATL::CAtlList< CAvailableApplicationInfo * > m_SelectedList
Definition: available.h:108
ATL::CAtlList< CAvailableApplicationInfo * > m_InfoList
Definition: available.h:107
bool IsEmpty() const
Definition: atlsimpstr.h:379
POSITION AddTail(INARGTYPE element)
Definition: atlcoll.h:624
ATL::CStringW szPath
Definition: available.h:30
BOOL RetrieveIcon(ATL::CStringW &IconLocation) const
Definition: available.cpp:275
CConfigParser * m_Parser
Definition: available.h:89
ATL::CStringW m_szIconLocation
Definition: available.h:56
BOOL GetString(const ATL::CStringW &KeyName, ATL::CStringW &ResultString)
Definition: misc.cpp:354
unsigned int UINT
Definition: ndis.h:50
ATL::CStringW szAppsPath
Definition: available.h:32
static const WCHAR IconPath[]
Definition: install.c:51
BOOL PathAppendNoDirEscapeW(LPWSTR pszPath, LPCWSTR pszMore)
Definition: misc.cpp:414
#define MAKELANGID(p, s)
Definition: nls.h:15
void RemoveAt(_In_ POSITION pos)
Definition: atlcoll.h:746
LicenseType m_LicenseType
Definition: available.h:45
const ATL::CStringW & GetCabPath() const
Definition: available.cpp:578
POSITION Find(INARGTYPE element, _In_opt_ POSITION posStartAfter=NULL) const
Definition: atlcoll.h:771
#define ERROR_ALREADY_EXISTS
Definition: disk.h:80
int Compare(_In_z_ PCXSTR psz) const
Definition: cstringt.h:653
GLuint64EXT * result
Definition: glext.h:11304
ATL::CStringW m_szSHA1
Definition: available.h:66
ATL::CStringW szSearchPath
Definition: available.h:33
ATL::CStringW szCabName
Definition: available.h:34
BOOL RemoveSelected(CAvailableApplicationInfo *AvlbInfo)
Definition: available.cpp:511
bool IsEmpty() const
Definition: atlcoll.h:543
BOOL RetrieveScrnshot(UINT Index, ATL::CStringW &ScrnshotLocation) const
Definition: available.cpp:265
HANDLE WINAPI FindFirstFileW(IN LPCWSTR lpFileName, OUT LPWIN32_FIND_DATAW lpFindFileData)
Definition: find.c:320
BOOL HasNativeLanguage() const
Definition: available.cpp:240
CAvailableApplicationInfo(const ATL::CStringW &sFileNameParam, AvailableStrings &m_Strings)
Definition: available.cpp:21
BOOL WINAPI FindClose(HANDLE hFindFile)
Definition: find.c:502