ReactOS 0.4.15-dev-5893-g1bb4167
CInstalledApplicationInfo Class Reference

#include <appinfo.h>

Inheritance diagram for CInstalledApplicationInfo:
Collaboration diagram for CInstalledApplicationInfo:

Public Member Functions

 CInstalledApplicationInfo (HKEY Key, const CStringW &KeyName, AppsCategories Category, int KeyIndex)
 
 ~CInstalledApplicationInfo ()
 
virtual BOOL Valid () const override
 
virtual BOOL CanModify () override
 
virtual BOOL RetrieveIcon (CStringW &Path) const override
 
virtual BOOL RetrieveScreenshot (CStringW &Path) override
 
virtual VOID ShowAppInfo (CAppRichEdit *RichEdit) override
 
virtual VOID GetDownloadInfo (CStringW &Url, CStringW &Sha1, ULONG &SizeInBytes) const override
 
virtual VOID GetDisplayInfo (CStringW &License, CStringW &Size, CStringW &UrlSite, CStringW &UrlDownload) override
 
virtual BOOL UninstallApplication (BOOL bModify) override
 
- Public Member Functions inherited from CAppInfo
 CAppInfo (const CStringW &Identifier, AppsCategories Category)
 
virtual ~CAppInfo ()
 
virtual BOOL Valid () const =0
 
virtual BOOL CanModify ()=0
 
virtual BOOL RetrieveIcon (CStringW &Path) const =0
 
virtual BOOL RetrieveScreenshot (CStringW &Path)=0
 
virtual VOID ShowAppInfo (CAppRichEdit *RichEdit)=0
 
virtual VOID GetDownloadInfo (CStringW &Url, CStringW &Sha1, ULONG &SizeInBytes) const =0
 
virtual VOID GetDisplayInfo (CStringW &License, CStringW &Size, CStringW &UrlSite, CStringW &UrlDownload)=0
 
virtual BOOL UninstallApplication (BOOL bModify)=0
 

Public Attributes

const int iKeyIndex
 
- Public Attributes inherited from CAppInfo
const CStringW szIdentifier
 
const AppsCategories iCategory
 
CStringW szDisplayIcon
 
CStringW szDisplayName
 
CStringW szDisplayVersion
 
CStringW szComments
 

Private Member Functions

BOOL GetApplicationRegString (LPCWSTR lpKeyName, CStringW &String)
 
BOOL GetApplicationRegDword (LPCWSTR lpKeyName, DWORD *lpValue)
 
VOID AddApplicationRegString (CAppRichEdit *RichEdit, UINT StringID, const CStringW &String, DWORD TextFlags)
 
VOID RetrieveInstallDate ()
 
VOID RetrieveUninstallStrings ()
 

Private Attributes

CRegKey m_hKey
 
CStringW m_szInstallDate
 
CStringW m_szUninstallString
 
CStringW m_szModifyString
 

Detailed Description

Definition at line 146 of file appinfo.h.

Constructor & Destructor Documentation

◆ CInstalledApplicationInfo()

CInstalledApplicationInfo::CInstalledApplicationInfo ( HKEY  Key,
const CStringW KeyName,
AppsCategories  Category,
int  KeyIndex 
)

Definition at line 367 of file appinfo.cpp.

372 : CAppInfo(KeyName, Category), m_hKey(Key), iKeyIndex(KeyIndex)
373{
374 if (GetApplicationRegString(L"DisplayName", szDisplayName))
375 {
379 }
380}
CStringW szComments
Definition: appinfo.h:80
CStringW szDisplayIcon
Definition: appinfo.h:77
CStringW szDisplayName
Definition: appinfo.h:78
CStringW szDisplayVersion
Definition: appinfo.h:79
BOOL GetApplicationRegString(LPCWSTR lpKeyName, CStringW &String)
Definition: appinfo.cpp:574
#define L(x)
Definition: ntvdm.h:50
_Must_inspect_result_ _In_ WDFDEVICE _In_ PCUNICODE_STRING KeyName
Definition: wdfdevice.h:2699

◆ ~CInstalledApplicationInfo()

CInstalledApplicationInfo::~CInstalledApplicationInfo ( )

Definition at line 382 of file appinfo.cpp.

383{
384}

Member Function Documentation

◆ AddApplicationRegString()

VOID CInstalledApplicationInfo::AddApplicationRegString ( CAppRichEdit RichEdit,
UINT  StringID,
const CStringW String,
DWORD  TextFlags 
)
private

Definition at line 387 of file appinfo.cpp.

392{
393 CStringW Tmp;
395 {
396 RichEdit->InsertTextWithString(StringID, Tmp, TextFlags);
397 }
398}
VOID InsertTextWithString(UINT StringID, const CStringW &Text, DWORD TextFlags)
Definition: appview.cpp:258
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFSTRING String
Definition: wdfdevice.h:2433

Referenced by ShowAppInfo().

◆ CanModify()

BOOL CInstalledApplicationInfo::CanModify ( )
overridevirtual

Implements CAppInfo.

Definition at line 522 of file appinfo.cpp.

523{
525 {
527 }
528
529 return !m_szModifyString.IsEmpty();
530}
bool IsEmpty() const
Definition: atlsimpstr.h:379
CStringW m_szUninstallString
Definition: appinfo.h:150

◆ GetApplicationRegDword()

BOOL CInstalledApplicationInfo::GetApplicationRegDword ( LPCWSTR  lpKeyName,
DWORD lpValue 
)
private

Definition at line 620 of file appinfo.cpp.

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 ERROR_SUCCESS
Definition: deptool.c:10
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
Definition: reg.c:4121
unsigned long DWORD
Definition: ntddk_ex.h:95
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:56
#define DWORD
Definition: nt_native.h:44
#define REG_DWORD
Definition: sdbapi.c:596
unsigned char * LPBYTE
Definition: typedefs.h:53

Referenced by RetrieveInstallDate(), and RetrieveUninstallStrings().

◆ GetApplicationRegString()

BOOL CInstalledApplicationInfo::GetApplicationRegString ( LPCWSTR  lpKeyName,
CStringW String 
)
private

Definition at line 574 of file appinfo.cpp.

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}
LONG QueryStringValue(LPCTSTR pszValueName, LPTSTR pszValue, ULONG *pnChars)
Definition: atlbase.h:1139
void ReleaseBuffer(_In_ int nNewLength=-1)
Definition: atlsimpstr.h:372
Definition: bufpool.h:45
DWORD WINAPI ExpandEnvironmentStringsW(IN LPCWSTR lpSrc, IN LPWSTR lpDst, IN DWORD nSize)
Definition: environ.c:519
static BOOLEAN bSuccess
Definition: drive.cpp:433
unsigned int BOOL
Definition: ntddk_ex.h:94
#define UNICODE_NULL
long LONG
Definition: pedump.c:60
uint32_t ULONG
Definition: typedefs.h:59
WCHAR * LPWSTR
Definition: xmlstorage.h:184

Referenced by AddApplicationRegString(), CInstalledApplicationInfo(), RetrieveInstallDate(), and RetrieveUninstallStrings().

◆ GetDisplayInfo()

VOID CInstalledApplicationInfo::GetDisplayInfo ( CStringW License,
CStringW Size,
CStringW UrlSite,
CStringW UrlDownload 
)
overridevirtual

Implements CAppInfo.

Definition at line 552 of file appinfo.cpp.

553{
554 ATLASSERT(FALSE && "Should not be called");
555}
#define ATLASSERT(x)
Definition: CComVariant.cpp:10

◆ GetDownloadInfo()

VOID CInstalledApplicationInfo::GetDownloadInfo ( CStringW Url,
CStringW Sha1,
ULONG SizeInBytes 
) const
overridevirtual

Implements CAppInfo.

Definition at line 546 of file appinfo.cpp.

547{
548 ATLASSERT(FALSE && "Should not be called");
549}

◆ RetrieveIcon()

BOOL CInstalledApplicationInfo::RetrieveIcon ( CStringW Path) const
overridevirtual

Implements CAppInfo.

Definition at line 533 of file appinfo.cpp.

534{
536 return !Path.IsEmpty();
537}
PRTL_UNICODE_STRING_BUFFER Path

◆ RetrieveInstallDate()

VOID CInstalledApplicationInfo::RetrieveInstallDate ( )
private

Definition at line 437 of file appinfo.cpp.

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}
void UnixTimeToFileTime(DWORD dwUnixTime, LPFILETIME pFileTime)
Definition: misc.cpp:361
int GetLength() const
Definition: atlsimpstr.h:356
PCXSTR GetString() const
Definition: atlsimpstr.h:361
CStringT Left(int nCount) const
Definition: cstringt.h:728
CStringT & Trim()
Definition: cstringt.h:971
CStringT Mid(int iFirst, int nCount) const
Definition: cstringt.h:700
BOOL GetApplicationRegDword(LPCWSTR lpKeyName, DWORD *lpValue)
Definition: appinfo.cpp:620
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
_Check_return_ long __cdecl wcstol(_In_z_ const wchar_t *_Str, _Out_opt_ _Deref_post_z_ wchar_t **_EndPtr, _In_ int _Radix)
INT WINAPI GetDateFormatW(LCID lcid, DWORD dwFlags, const SYSTEMTIME *lpTime, LPCWSTR lpFormat, LPWSTR lpDateStr, INT cchOut)
Definition: lcformat.c:979
#define LOCALE_USER_DEFAULT
WORD wYear
Definition: winbase.h:905
WORD wMonth
Definition: winbase.h:906
WORD wDay
Definition: winbase.h:908
#define ZeroMemory
Definition: winbase.h:1670

Referenced by ShowAppInfo().

◆ RetrieveScreenshot()

BOOL CInstalledApplicationInfo::RetrieveScreenshot ( CStringW Path)
overridevirtual

Implements CAppInfo.

Definition at line 540 of file appinfo.cpp.

541{
542 return FALSE;
543}

◆ RetrieveUninstallStrings()

VOID CInstalledApplicationInfo::RetrieveUninstallStrings ( )
private

Definition at line 477 of file appinfo.cpp.

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}
void __cdecl Format(UINT nFormatID,...)
Definition: cstringt.h:753
const CStringW szIdentifier
Definition: appinfo.h:74

Referenced by CanModify(), ShowAppInfo(), and UninstallApplication().

◆ ShowAppInfo()

VOID CInstalledApplicationInfo::ShowAppInfo ( CAppRichEdit RichEdit)
overridevirtual

Implements CAppInfo.

Definition at line 401 of file appinfo.cpp.

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}
#define IDS_INFO_INSTALLSRC
Definition: resource.h:155
#define IDS_INFO_REGOWNER
Definition: resource.h:148
#define IDS_INFO_VERSION
Definition: resource.h:142
#define IDS_INFO_HELPLINK
Definition: resource.h:145
#define IDS_INFO_INSTALLDATE
Definition: resource.h:158
#define IDS_INFO_HELPPHONE
Definition: resource.h:146
#define IDS_INFO_INSTLOCATION
Definition: resource.h:154
#define IDS_INFO_COMMENTS
Definition: resource.h:153
#define IDS_INFO_UPDATEINFO
Definition: resource.h:151
#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_INFO_PRODUCTID
Definition: resource.h:149
#define IDS_INFO_README
Definition: resource.h:147
#define IDS_INFO_PUBLISHER
Definition: resource.h:144
#define IDS_INFO_INFOABOUT
Definition: resource.h:152
VOID AddApplicationRegString(CAppRichEdit *RichEdit, UINT StringID, const CStringW &String, DWORD TextFlags)
Definition: appinfo.cpp:387
VOID InsertText(LPCWSTR lpszText, DWORD dwEffects)
Definition: crichedit.h:77
VOID SetText(LPCWSTR lpszText, DWORD dwEffects)
Definition: crichedit.h:91
#define CFE_BOLD
Definition: richedit.h:406
#define CFM_LINK
Definition: richedit.h:337

◆ UninstallApplication()

BOOL CInstalledApplicationInfo::UninstallApplication ( BOOL  bModify)
overridevirtual

Implements CAppInfo.

Definition at line 558 of file appinfo.cpp.

559{
561 {
563 }
564
566
567 if (bSuccess && !bModify)
568 WriteLogMessage(EVENTLOG_SUCCESS, MSG_SUCCESS_REMOVE, szDisplayName);
569
570 return bSuccess;
571}
BOOL WriteLogMessage(WORD wType, DWORD dwEventID, LPCWSTR lpMsg)
Definition: misc.cpp:227
BOOL StartProcess(const CStringW &Path, BOOL Wait)
Definition: misc.cpp:86
#define EVENTLOG_SUCCESS
Definition: winnt_old.h:2880

◆ Valid()

BOOL CInstalledApplicationInfo::Valid ( ) const
overridevirtual

Implements CAppInfo.

Definition at line 516 of file appinfo.cpp.

517{
518 return !szDisplayName.IsEmpty();
519}

Member Data Documentation

◆ iKeyIndex

const int CInstalledApplicationInfo::iKeyIndex

Definition at line 166 of file appinfo.h.

Referenced by CAppDB::RemoveInstalledAppFromRegistry().

◆ m_hKey

CRegKey CInstalledApplicationInfo::m_hKey
private

Definition at line 148 of file appinfo.h.

Referenced by GetApplicationRegDword(), and GetApplicationRegString().

◆ m_szInstallDate

CStringW CInstalledApplicationInfo::m_szInstallDate
private

Definition at line 149 of file appinfo.h.

Referenced by RetrieveInstallDate(), and ShowAppInfo().

◆ m_szModifyString

CStringW CInstalledApplicationInfo::m_szModifyString
private

Definition at line 151 of file appinfo.h.

Referenced by CanModify(), RetrieveUninstallStrings(), ShowAppInfo(), and UninstallApplication().

◆ m_szUninstallString

CStringW CInstalledApplicationInfo::m_szUninstallString
private

Definition at line 150 of file appinfo.h.

Referenced by CanModify(), RetrieveUninstallStrings(), ShowAppInfo(), and UninstallApplication().


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