|
|
#ifndef __INSTAPP_H_
#define __INSTAPP_H_
/////////////////////////////////////////////////////////////////////////////
// CInstalledApp
//
// There are four classes of legacy applications...
//
// Uninstall keys can go into either HKLM or HKCU, on either the native
// platform or the alternate platform.
//
// For Win64, the alternate platform is Win32.
// For Win32, there is no alternate platform.
//
#define CIA_LM 0x0000
#define CIA_CU 0x0001
#define CIA_NATIVE 0x0000
#define CIA_ALT 0x0002
#define CIA_LM_NATIVE (CIA_LM | CIA_NATIVE)
#define CIA_CU_NATIVE (CIA_CU | CIA_NATIVE)
#define CIA_LM_ALT (CIA_LM | CIA_ALT)
#define CIA_CU_ALT (CIA_CU | CIA_ALT)
#define REGSTR_PATH_ALTUNINSTALL TEXT("Software\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall")
STDAPI_(void) WOW64Uninstall_RunDLLW(HWND hwnd, HINSTANCE hAppInstance, LPWSTR lpszCmdLine, int nCmdShow);
class CInstalledApp : public IInstalledApp { public: // Constructor for Legacy Apps
CInstalledApp(HKEY hkeySub, LPCTSTR pszKeyName, LPCTSTR pszProducts, LPCTSTR pszUninstall, DWORD dwCIA);
// Constructor for Darwin Apps
CInstalledApp(LPTSTR pszProductID);
~CInstalledApp(void);
// Helper function for SysWOW64 execution
friend void WOW64Uninstall_RunDLLW(HWND hwnd, HINSTANCE hAppInstance, LPWSTR lpszCmdLine, int nCmdShow);
// *** IUnknown Methods
virtual STDMETHODIMP QueryInterface(REFIID riid, LPVOID * ppvObj); virtual STDMETHODIMP_(ULONG) AddRef(void) ; virtual STDMETHODIMP_(ULONG) Release(void);
// *** IShellApp
STDMETHODIMP GetAppInfo(PAPPINFODATA pai); STDMETHODIMP GetPossibleActions(DWORD * pdwActions); STDMETHODIMP GetSlowAppInfo(PSLOWAPPINFO psai); STDMETHODIMP GetCachedSlowAppInfo(PSLOWAPPINFO psai); STDMETHODIMP IsInstalled(void); // *** IInstalledApp
STDMETHODIMP Uninstall(HWND hwndParent); STDMETHODIMP Modify(HWND hwndParent); STDMETHODIMP Repair(BOOL bReinstall); STDMETHODIMP Upgrade(void); protected:
LONG _cRef; #define IA_LEGACY 1
#define IA_DARWIN 2
#define IA_SMS 4
DWORD _dwSource; // App install source (IA_*)
DWORD _dwAction; // APPACTION_*
DWORD _dwCIA; // CIA_*
// products name
TCHAR _szProduct[MAX_PATH];
// action strings
TCHAR _szModifyPath[MAX_INFO_STRING]; TCHAR _szUninstall[MAX_INFO_STRING];
// info strings
TCHAR _szInstallLocation[MAX_PATH];
// for Darwin apps only
TCHAR _szProductID[GUIDSTR_MAX]; LPTSTR _pszUpdateUrl; // for Legacy apps only
TCHAR _szKeyName[MAX_PATH]; TCHAR _szCleanedKeyName[MAX_PATH]; // app size
BOOL _bTriedToFindFolder; // TRUE: we have attempted to find the
// install folder already
// GUID identifying this InstalledApp
GUID _guid;
#define PERSISTSLOWINFO_IMAGE 0x00000001
// Structure used to persist SLOWAPPINFO
typedef struct _PersistSlowInfo { DWORD dwSize; DWORD dwMasks; ULONGLONG ullSize; FILETIME ftLastUsed; int iTimesUsed; WCHAR szImage[MAX_PATH]; } PERSISTSLOWINFO;
HKEY _MyHkeyRoot() { return (_dwCIA & CIA_CU) ? HKEY_CURRENT_USER : HKEY_LOCAL_MACHINE; }; BOOL _LegacyUninstall(HWND hwndParent); BOOL _LegacyModify(HWND hwndParent); LONG _DarRepair(BOOL bReinstall);
HKEY _OpenRelatedRegKey(HKEY hkey, LPCTSTR pszRegLoc, REGSAM samDesired, BOOL bCreate); HKEY _OpenUninstallRegKey(REGSAM samDesired); void _GetUpdateUrl(); void _GetInstallLocationFromRegistry(HKEY hkeySub); LPWSTR _GetLegacyInfoString(HKEY hkeySub, LPTSTR pszInfoName); BOOL _GetDarwinAppSize(ULONGLONG * pullTotal); BOOL _IsAppFastUserSwitchingCompliant(void); DWORD _QueryActionBlockInfo(HKEY hkey); DWORD _QueryBlockedActions(HKEY hkey); BOOL _FindAppFolderFromStrings(); HRESULT _DarwinGetAppInfo(DWORD dwInfoFlags, PAPPINFODATA pai); HRESULT _LegacyGetAppInfo(DWORD dwInfoFlags, PAPPINFODATA pai); HRESULT _PersistSlowAppInfo(PSLOWAPPINFO psai);
#define CAMP_UNINSTALL 0
#define CAMP_MODIFY 1
BOOL _CreateAppModifyProcess(HWND hwndParent, DWORD dwCAMP); BOOL _CreateAppModifyProcessWow64(HWND hwndParent, DWORD dwCAMP); BOOL _CreateAppModifyProcessNative(HWND hwndParent, LPTSTR pszExePath);
HRESULT _SetSlowAppInfoChanged(HKEY hkeyCache, DWORD dwValue); HRESULT _IsSlowAppInfoChanged(); };
#endif //__INSTAPP_H_
|