322 lines
11 KiB
C++
322 lines
11 KiB
C++
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// ApplicationManager.h
|
|
//
|
|
// Copyright (C) 1998, 1999 Microsoft Corporation. All rights reserved.
|
|
//
|
|
// Abstract :
|
|
//
|
|
// This include file supports all the definitions used internally by the Application Manager
|
|
//
|
|
// History :
|
|
//
|
|
// 05/06/1999 luish Created
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef __APPLICATIONMANAGER_
|
|
#define __APPLICATIONMANAGER_
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#include <windows.h>
|
|
#include <winbase.h>
|
|
#include <objbase.h>
|
|
#include <assert.h>
|
|
#include "AppMan.h"
|
|
#include "AppManAdmin.h"
|
|
#include "EmptyVc.h"
|
|
#include "CriticalSection.h"
|
|
#include "InformationManager.h"
|
|
|
|
#define DISKCLEANER_DAY_THRESHOLD 120
|
|
#define DEFAULT_PERCENT_CACHE_SIZE 70
|
|
|
|
//
|
|
// The defines are used to denote the current action of an object
|
|
//
|
|
|
|
#define CURRENT_ACTION_NONE 0x00000001
|
|
#define CURRENT_ACTION_INSTALLING 0x00000002
|
|
#define CURRENT_ACTION_REINSTALLING 0x00000004
|
|
#define CURRENT_ACTION_DOWNSIZING 0x00000008
|
|
#define CURRENT_ACTION_UNINSTALLING 0x00000010
|
|
#define CURRENT_ACTION_SELFTESTING 0x00000020
|
|
#define CURRENT_ACTION_RUNNING 0x00000040
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
class CApplicationManagerRoot;
|
|
class CEmptyVolumeCache;
|
|
class CEmptyVolumeCacheCallBack;
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// CApplicationManager
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
class CApplicationManager : public IApplicationManager
|
|
{
|
|
public :
|
|
|
|
//
|
|
// Constructor and destructor
|
|
//
|
|
|
|
CApplicationManager(void);
|
|
CApplicationManager(CApplicationManagerRoot *pParent);
|
|
~CApplicationManager(void);
|
|
|
|
//
|
|
// IUnknown Interfaces
|
|
//
|
|
|
|
STDMETHOD (QueryInterface) (REFIID RefIID, LPVOID * lppVoidObject);
|
|
STDMETHOD_(ULONG, AddRef) (void);
|
|
STDMETHOD_(ULONG, Release) (void);
|
|
|
|
//
|
|
// IApplicationManager Interfaces
|
|
//
|
|
|
|
STDMETHOD (GetAdvancedMode) (LPDWORD lpdwAdvancedModeMask);
|
|
STDMETHOD (GetAvailableSpace) (const DWORD dwApplicationCategory, LPDWORD lpdwMaximumSpace, LPDWORD lpdwOptimalSpace);
|
|
STDMETHOD (CreateApplicationEntry) (IApplicationEntry ** lppObject);
|
|
STDMETHOD (GetApplicationInfo) (IApplicationEntry * lpObject);
|
|
STDMETHOD (EnumApplications) (const DWORD dwIndex, IApplicationEntry * lpObject);
|
|
STDMETHOD (EnumDevices) (const DWORD dwIndex, LPDWORD lpdwKilobytes, LPDWORD lpdwExclusionMask, const DWORD dwStringMask, LPVOID lpData, const DWORD dwDataLen);
|
|
|
|
private:
|
|
|
|
CApplicationManagerRoot * m_pParentObject;
|
|
CInformationManager m_InformationManager;
|
|
};
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// CApplicationEntry
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
class CApplicationEntry : public IApplicationEntry
|
|
{
|
|
public:
|
|
|
|
//
|
|
// Constructors, default copy constructor and assignment operator
|
|
//
|
|
|
|
CApplicationEntry(void);
|
|
CApplicationEntry(const CApplicationEntry & refApplicationEntry);
|
|
CApplicationEntry & operator = (const CApplicationEntry & refSourceObject);
|
|
~CApplicationEntry(void);
|
|
|
|
//
|
|
// IUnknown interfaces
|
|
//
|
|
|
|
STDMETHOD (QueryInterface) (REFIID RefIID, LPVOID * lppVoidObject);
|
|
STDMETHOD_(ULONG, AddRef) (void);
|
|
STDMETHOD_(ULONG, Release) (void);
|
|
|
|
//
|
|
// IApplicationEntry Interfaces
|
|
//
|
|
|
|
STDMETHOD (Initialize) (void);
|
|
STDMETHOD (SetInitializationLevel) (DWORD dwInitializationLevel);
|
|
STDMETHOD_(DWORD, GetActionState) (void);
|
|
STDMETHOD (Clear) (void);
|
|
STDMETHOD (GetProperty) (const DWORD dwProperty, LPVOID lpData, const DWORD dwDataLen);
|
|
STDMETHOD (SetProperty) (const DWORD dwProperty, LPCVOID lpData, const DWORD dwDataLen);
|
|
STDMETHOD (InitializeInstall) (void);
|
|
STDMETHOD (FinalizeInstall) (void);
|
|
STDMETHOD (InitializeDownsize) (void);
|
|
STDMETHOD (FinalizeDownsize) (void);
|
|
STDMETHOD (InitializeReInstall) (void);
|
|
STDMETHOD (FinalizeReInstall) (void);
|
|
STDMETHOD (InitializeUnInstall) (void);
|
|
STDMETHOD (FinalizeUnInstall) (void);
|
|
STDMETHOD (InitializeSelfTest) (void);
|
|
STDMETHOD (FinalizeSelfTest) (void);
|
|
STDMETHOD (Abort) (void);
|
|
STDMETHOD (Run) (const DWORD dwRunFlags, const DWORD dwStringMask, LPVOID lpData, const DWORD dwDataLen);
|
|
STDMETHOD (AddAssociation) (const DWORD dwAssociationType, const IApplicationEntry * pApplicationEntry);
|
|
STDMETHOD (RemoveAssociation) (const DWORD dwAssociationType, const IApplicationEntry * pApplicationEntry);
|
|
STDMETHOD (EnumAssociations) (const DWORD dwIndex, LPDWORD lpdwAssociationMask, IApplicationEntry * pApplicationEntry);
|
|
STDMETHOD (GetTemporarySpace) (const DWORD dwSpace, const DWORD dwStringMask, LPVOID lpData, const DWORD dwDataLen);
|
|
STDMETHOD (RemoveTemporarySpace) (const DWORD dwStringMask, LPVOID lpData, const DWORD dwDataLen);
|
|
STDMETHOD (EnumTemporarySpaces) (const DWORD dwIndex, LPDWORD lpdwSpace, const DWORD dwStringMask, LPVOID lpData, const DWORD dwDataLen);
|
|
|
|
LPAPPLICATION_DATA GetApplicationDataPtr(void);
|
|
|
|
private :
|
|
|
|
STDMETHOD (LockApplication) (void);
|
|
STDMETHOD (UnLockApplication) (void);
|
|
STDMETHOD (ValidateGetPropertyParameters) (const DWORD dwPropertyIndex, const DWORD dwPropertyModifiers, LPVOID lpData, const DWORD dwDataLen);
|
|
STDMETHOD (ValidateStringProperty) (const DWORD dwPropertyIndex, const DWORD dwPropertyModifiers, LPCWSTR wszStringProperty);
|
|
STDMETHOD (ValidateSetPropertyParameters) (const DWORD dwPropertyIndex, const DWORD dwPropertyModifiers, LPCVOID lpData, const DWORD dwDataLen);
|
|
STDMETHOD (ValidateCommandLine) (LPCWSTR wszRootPath, LPCWSTR wszCommandLine);
|
|
STDMETHOD (ComputeApplicationSpaceInfo) (const DWORD dwInstalledKilobytesExpected);
|
|
STDMETHOD (ComputeOriginalApplicationSpaceInfo) (void);
|
|
|
|
GUID m_sInstanceGuid;
|
|
HANDLE m_hInstanceMutex;
|
|
DWORD m_dwLockCount;
|
|
BOOL m_fIsInitialized;
|
|
LONG m_lReferenceCount;
|
|
CInformationManager m_InformationManager;
|
|
DWORD m_dwInitializationLevel;
|
|
DWORD m_dwCurrentAction;
|
|
DWORD m_dwOriginalSetupRootPathSizeKilobytes;
|
|
DWORD m_dwOriginalApplicationRootPathSizeKilobytes;
|
|
DWORD m_dwOriginalState;
|
|
CCriticalSection m_sCriticalSection;
|
|
APPLICATION_DATA m_sApplicationData;
|
|
};
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// CEmptyVolumeCache
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
class CEmptyVolumeCache : public IEmptyVolumeCache
|
|
{
|
|
public:
|
|
|
|
//
|
|
// Constructors, default copy constructor and assignment operator
|
|
//
|
|
|
|
CEmptyVolumeCache(void);
|
|
CEmptyVolumeCache(CApplicationManagerRoot * lpParent);
|
|
~CEmptyVolumeCache(void);
|
|
|
|
//
|
|
// IUnknown interfaces
|
|
//
|
|
|
|
STDMETHOD (QueryInterface) (REFIID RefIID, LPVOID * lppVoidObject);
|
|
STDMETHOD_(ULONG, AddRef) (void);
|
|
STDMETHOD_(ULONG, Release) (void);
|
|
|
|
STDMETHOD (Initialize) (HKEY hRegKey, LPCWSTR lpwszVolume, LPWSTR * lppwszDisplayName, LPWSTR * lppwszDescription, DWORD * lpdwFlags);
|
|
STDMETHOD (GetSpaceUsed) (DWORDLONG * lpdwSpaceUsed, IEmptyVolumeCacheCallBack * lpCallBack);
|
|
STDMETHOD (Purge) (DWORDLONG dwSpaceToFree, IEmptyVolumeCacheCallBack * lpCallBack);
|
|
STDMETHOD (ShowProperties) (HWND hwnd);
|
|
STDMETHOD (Deactivate) (DWORD * lpdwFlags);
|
|
|
|
WCHAR m_wszDiskCleanerName[MAX_PATH_CHARCOUNT];
|
|
WCHAR m_wszDiskCleanerName2[MAX_PATH_CHARCOUNT];
|
|
WCHAR m_wszDiskCleanerDesc[2048];
|
|
WCHAR m_wszDiskCleanerDesc2[1024];
|
|
WCHAR m_wszDiskCleanerDayTH[10];
|
|
|
|
private:
|
|
|
|
HRESULT GetSpaceUtilization(DWORD dwDeviceIndex, DWORD dwDays, LPDWORD lpdwKilobytes, IEmptyVolumeCacheCallBack * lpCallBack);
|
|
HRESULT CleanDisk(DWORD dwDeviceIndex, DWORD dwDays, DWORD dwKilobytesToFree, IEmptyVolumeCacheCallBack * lpCallBack);
|
|
HRESULT CleanDiskUnattended(DWORD dwDays);
|
|
DWORD VolumeStringToNumber(LPCWSTR lpwszVolume);
|
|
DWORD ElapsedDays(SYSTEMTIME * lpLastUsedDate);
|
|
|
|
DWORD m_dwVolume;
|
|
DWORD m_dwDiskCleanerDayThreshold;
|
|
CApplicationManagerRoot * m_lpoParentObject;
|
|
CInformationManager m_oInformationManager;
|
|
};
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// CApplicationManager
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
class CApplicationManagerAdmin : public IApplicationManagerAdmin
|
|
{
|
|
public :
|
|
|
|
//
|
|
// Constructor and destructor
|
|
//
|
|
|
|
CApplicationManagerAdmin(void);
|
|
CApplicationManagerAdmin(CApplicationManagerRoot * lpParent);
|
|
~CApplicationManagerAdmin(void);
|
|
|
|
//
|
|
// IUnknown Interfaces
|
|
//
|
|
|
|
STDMETHOD (QueryInterface) (REFIID RefIID, LPVOID * lppVoidObject);
|
|
STDMETHOD_(ULONG, AddRef) (void);
|
|
STDMETHOD_(ULONG, Release) (void);
|
|
|
|
//
|
|
// IApplicationManager Interfaces
|
|
//
|
|
|
|
STDMETHOD (EnumerateDevices) (const DWORD dwIndex, GUID * lpGuid);
|
|
STDMETHOD (GetDeviceProperty) (const DWORD dwProperty, const GUID * lpGuid, LPVOID lpData, const DWORD dwDataLen);
|
|
STDMETHOD (SetDeviceProperty) (const DWORD dwProperty, const GUID * lpGuid, LPVOID lpData, const DWORD dwDataLen);
|
|
|
|
STDMETHOD (GetAppManProperty) (const DWORD dwProperty, LPVOID lpData, const DWORD dwDataLen);
|
|
STDMETHOD (SetAppManProperty) (const DWORD dwProperty, LPCVOID lpData, const DWORD dwDataLen);
|
|
|
|
STDMETHOD (CreateApplicationEntry) (IApplicationEntry **ppObject);
|
|
STDMETHOD (GetApplicationInfo) (IApplicationEntry * pObject);
|
|
STDMETHOD (EnumApplications) (const DWORD dwApplicationIndex, IApplicationEntry * lpObject);
|
|
STDMETHOD (DoApplicationAction) (const DWORD dwAction, const GUID * lpGuid, const DWORD dwStringProperty, LPVOID lpData, const DWORD dwDataLen);
|
|
|
|
private:
|
|
|
|
CApplicationManagerRoot * m_pParentObject;
|
|
CInformationManager m_InformationManager;
|
|
};
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// CApplicationManagerRoot class
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
class CApplicationManagerRoot : public IUnknown
|
|
{
|
|
public :
|
|
|
|
//
|
|
// Constructor and Destructor
|
|
//
|
|
|
|
CApplicationManagerRoot(void);
|
|
~CApplicationManagerRoot(void);
|
|
|
|
//
|
|
// IUnknow interface methods
|
|
//
|
|
|
|
STDMETHOD (QueryInterface) (REFIID RefIID, LPVOID *ppVoidObject);
|
|
STDMETHOD_(ULONG, AddRef) (void);
|
|
STDMETHOD_(ULONG, Release) (void);
|
|
|
|
BOOL m_bInsufficientAccessToRun;
|
|
|
|
private :
|
|
|
|
CApplicationManager m_ApplicationManager;
|
|
CApplicationManagerAdmin m_ApplicationManagerAdmin;
|
|
CEmptyVolumeCache m_EmptyVolumeCache;
|
|
LONG m_lReferenceCount;
|
|
};
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif // __APPLICATIONMANAGER_
|