|
|
//////////////////////////////////////////////////////////////////////////////////////////////
//
// InformationManager.h
//
// Copyright (C) 1998, 1999 Microsoft Corporation. All rights reserved.
//
// Abstract :
//
// This is the header file for the CInformationManager class used by the Application
// Manager. It is a private class that will never be distributed to the public.
//
//
// History :
//
// 05/06/1999 luish Created
//
//////////////////////////////////////////////////////////////////////////////////////////////
#ifndef __INFORMATIONMANAGER_
#define __INFORMATIONMANAGER_
#ifdef __cplusplus
extern "C" { #endif
#include <objbase.h>
#include "ApplicationManager.h"
#include "AppPropertyRules.h"
#include "Win32API.h"
//////////////////////////////////////////////////////////////////////////////////////////////
#define REG_VERSION 0x00000004
#ifndef UNLEN
#define UNLEN 256
#endif
//
// Defines used as mask for the dwValidFields data member
//
#define DATA_FIELD_GUID 0x00000001
#define DATA_FIELD_SIGNATURE 0x00000002
#define DATA_FIELD_COMPANYNAME 0x00000004
#define DATA_FIELD_VERSION 0x00000008
#define DATA_FIELD_TYPE 0x00000010
#define DATA_FIELD_STATE 0x00000020
#define DATA_FIELD_CATEGORY 0x00000040
#define DATA_FIELD_INSTALLCOST 0x00000080
#define DATA_FIELD_REINSTALLCOUNT 0x00000100
#define DATA_FIELD_USAGECOUNT 0x00000200
#define DATA_FIELD_INSTALLDATE 0x00000400
#define DATA_FIELD_LASTUSEDDATE 0x00000800
#define DATA_FIELD_NONREMOVABLESIZE 0x00001000
#define DATA_FIELD_REMOVABLESIZE 0x00002000
#define DATA_FIELD_RESERVEDSIZE 0x00004000
#define DATA_FIELD_ROOTPATH 0x00008000
#define DATA_FIELD_SETUPROOTPATH 0x00010000
#define DATA_FIELD_EXECUTECMDLINE 0x00020000
#define DATA_FIELD_SETUPINTERFACECLSID 0x00040000
#define DATA_FIELD_DOWNSIZECMDLINE 0x00080000
#define DATA_FIELD_REINSTALLCMDLINE 0x00100000
#define DATA_FIELD_UNINSTALLCMDLINE 0x00200000
#define DATA_FIELD_SELFTESTCMDLINE 0x00400000
#define DATA_FIELD_CUSTOMIZECMDLINE 0x00800000
#define DATA_FIELD_DEVICEGUID 0x01000000
#define DATA_FIELD_WEBURL 0x02000000
#define DATA_FIELD_ICONPATH 0x04000000
//
// Defines used to define the device type
//
#define DEVICE_NONE 0x00000000
#define DEVICE_FIXED 0x00000001
#define DEVICE_REMOVABLE 0x00000002
#define DEVICE_NETWORK 0x00000004
#define DEVICE_RAMDISK 0x00000008
//
// Wait events
//
#define WAIT_FINALIZE_DOWNSIZE 0x00000000
#define WAIT_FINALIZE_REINSTALL 0x00000001
#define WAIT_FINALIZE_UNINSTALL 0x00000002
#define WAIT_FINALIZE_SELFTEST 0x00000003
#define WAIT_EVENT_COUNT 0x00000004
//
// Misc defines
//
#define BAD_REFERENCE_COUNT 0xffffffff
#define BAD_INDEX 0xffffffff
//
// These defines are used to denote the initialization level of an CApplicationInfo object
//
#define INIT_LEVEL_NONE 0x00000001
#define INIT_LEVEL_BASIC 0x00000002
#define INIT_LEVEL_TOTAL 0x00000004
//////////////////////////////////////////////////////////////////////////////////////////////
typedef struct // sizeof(SYNC_INFO) = 28 bytes
{ DWORD dwSize; DWORD dwStructId; DWORD dwReserved; SYSTEMTIME stDate; GUID sSynchronizationGuid;
} SYNC_INFO, *LPSYNC_INFO;
//////////////////////////////////////////////////////////////////////////////////////////////
typedef struct { DWORD dwSize; DWORD dwStructId; DWORD dwReserved; GUID guidInstanceGuid; DWORD dwLockCount;
} LOCK_INFO, *LPLOCK_INFO;
//////////////////////////////////////////////////////////////////////////////////////////////
typedef struct { DWORD dwSize; DWORD dwStructId; DWORD dwReserved; DWORD dwEventCount[WAIT_EVENT_COUNT]; GUID guidInstanceGuid;
} WAIT_INFO, *LPWAIT_INFO;
//////////////////////////////////////////////////////////////////////////////////////////////
typedef struct // sizeof(TEMP_SPACE_INFO) = 524 bytes
{ DWORD dwSize; DWORD dwStructId; DWORD dwReserved; DWORD dwKilobytes; GUID sGuid; GUID sApplicationGuid; GUID sDeviceGuid; WCHAR wszDirectory[MAX_PATH_CHARCOUNT];
} TEMP_SPACE_RECORD, *LPTEMP_SPACE_RECORD;
//////////////////////////////////////////////////////////////////////////////////////////////
typedef struct { DWORD dwSize; DWORD dwStructId; DWORD dwReserved; DWORD dwAssociationType; GUID sParentGuid; GUID sChildGuid;
} ASSOCIATION_INFO, *LPASSOCIATION_INFO;
//////////////////////////////////////////////////////////////////////////////////////////////
typedef struct { DWORD dwSize; DWORD dwStructId; DWORD dwReserved; DWORD dwUsageCount; DWORD dwReInstallCount; DWORD dwInstallCost; SYSTEMTIME stInstallDate; SYSTEMTIME stLastUsedDate;
} AGING_INFO, *LPAGING_INFO;
//////////////////////////////////////////////////////////////////////////////////////////////
typedef struct { DWORD dwSize; DWORD dwStructId; DWORD dwReserved; DWORD dwLowPropertyMask; DWORD dwHighPropertyMask; GUID sApplicationGuid; GUID sDeviceGuid; GUID sInstanceGuid; DWORD dwState; DWORD dwCategory; DWORD dwRemovableKilobytes; DWORD dwNonRemovableKilobytes; DWORD dwReservedKilobytes; DWORD dwPinState;
} BASE_INFO, *LPBASE_INFO;
//////////////////////////////////////////////////////////////////////////////////////////////
typedef struct { BASE_INFO sBaseInfo; AGING_INFO sAgingInfo; ASSOCIATION_INFO sAssociation; WCHAR wszStringProperty[APP_STRING_COUNT][MAX_PATH_CHARCOUNT+1];
} APPLICATION_DATA, *LPAPPLICATION_DATA;
//////////////////////////////////////////////////////////////////////////////////////////////
typedef struct // sizeof(DEVICE_INFO) = 32 bytes
{ DWORD dwSize; DWORD dwStructId; DWORD dwReserved; DWORD dwDeviceFlags; DWORD dwDeviceIndex; DWORD dwVolumeSerial; DWORD dwPercentCacheSize; DWORD dwPercentMinimumFreeSize; DWORD dwRemovableKilobytes; DWORD dwNonRemovableKilobytes; DWORD dwReservedKilobytes; DWORD dwApplicationCategoryExclusionMask; DWORD dwLastUsedThreshold; } DEVICE_INFO, *LPDEVICE_INFO;
typedef struct // sizeof(DEVICE_SPACE_INFO) = 72 bytes
{ DWORD dwSize; DWORD dwStructId; DWORD dwReserved; DWORD dwTotalKilobytes; DWORD dwTotalFreeKilobytes; DWORD dwMinimumFreeKilobytes; DWORD dwTotalUsableFreeKilobytes; DWORD dwCacheSizeKilobytes; DWORD dwCacheUsedKilobytes; DWORD dwCacheFreeKilobytes; DWORD dwSlackSizeKilobytes; DWORD dwSlackUsedKilobytes; DWORD dwSlackFreeKilobytes; DWORD dwTotalRemovableKilobytes; DWORD dwTotalNonRemovableKilobytes; DWORD dwOptimalRemovableKilobytes; DWORD dwMaximumUsableKilobytes; DWORD dwOptimalUsableKilobytes; DWORD dwTotalReservedKilobytes; DWORD dwTotalReservedTemporaryKilobytes; DWORD dwTotalUsedTemporaryKilobytes;
} DEVICE_SPACE_INFO, *LPDEVICE_SPACE_INFO;
//////////////////////////////////////////////////////////////////////////////////////////////
typedef struct // sizeof(APPLICATION_MANAGER_RECORD) = 32 bytes
{ DWORD dwSize; DWORD dwStructId; DWORD dwReserved; GUID sSystemGuid; DWORD dwAdvancedMode; } APPLICATION_MANAGER_RECORD, *LPAPPLICATION_MANAGER_RECORD;
typedef struct // sizeof(DEVICE_RECORD) = 48 bytes
{ DWORD dwSize; DWORD dwStructId; DWORD dwReserved; GUID sDeviceGuid; DEVICE_INFO sDeviceInfo;
} DEVICE_RECORD, *LPDEVICE_RECORD;
//////////////////////////////////////////////////////////////////////////////////////////////
//
// CInformationManager
//
//////////////////////////////////////////////////////////////////////////////////////////////
class CInformationManager { friend class CApplicationManagerAdmin;
public :
CInformationManager(void); ~CInformationManager(void);
STDMETHOD (Initialize) (void); STDMETHOD (Shutdown) (void); STDMETHOD_(ULONG, AddRef) (void); STDMETHOD_(ULONG, Release) (void); STDMETHOD (GetAdvancedMode) (LPDWORD lpdwAdvancedMode); STDMETHOD (SetAdvancedMode) (DWORD dwAdvancedMode); STDMETHOD (GetOptimalAvailableSpace) (const DWORD dwApplicationCategory, LPDWORD lpdwOptimalKilobytes); STDMETHOD (GetMaximumAvailableSpace) (const DWORD dwApplicationCategory, LPDWORD lpdwMaximumKilobytes); STDMETHOD (GetSpace) (const DWORD dwApplicationCategory, const DWORD dwRequiredKilobytes, LPDWORD lpdwDeviceIndex); STDMETHOD (FreeSpaceOnDevice) (const GUID * lpDeviceGuid, const DWORD dwRequiredKilobytes); STDMETHOD (FixCacheOverrun) (const GUID * lpDeviceGuid, const DWORD dwExtraKilobytes); //STDMETHOD_(DWORD, GetApplicationAge) (LPAPPLICATION_DATA lpApplicationData);
STDMETHOD (CheckApplicationExistance) (const LPAPPLICATION_DATA lpApplicationData); STDMETHOD (AddApplicationData) (LPAPPLICATION_DATA lpApplicationData, const GUID * lpInstanceGuid); STDMETHOD (RemoveApplicationData) (LPAPPLICATION_DATA lpApplicationData); STDMETHOD (GetApplicationDataWithIndex) (const DWORD dwApplicationIndex, LPAPPLICATION_DATA lpApplicationData); STDMETHOD (GetApplicationData) (LPAPPLICATION_DATA lpApplicationData); STDMETHOD (SetApplicationData) (LPAPPLICATION_DATA lpApplicationData, const GUID * lpInstanceGuid); STDMETHOD (SetApplicationState) (const LPAPPLICATION_DATA lpApplicationData, const GUID * lpInstanceGuid); STDMETHOD (AssignDeviceToApplication) (const DWORD dwDeviceIndex, LPAPPLICATION_DATA lpApplicationData); STDMETHOD (DownsizeApplication) (const DWORD dwRequiredKilobytes, const LPAPPLICATION_DATA lpApplicationData); STDMETHOD (ReInstallApplication) (const LPAPPLICATION_DATA lpApplicationData); STDMETHOD (UnInstallApplication) (const LPAPPLICATION_DATA lpApplicationData); STDMETHOD (UnInstallApplicationWait) (const LPAPPLICATION_DATA lpApplicationData); STDMETHOD (SelfTestApplication) (const LPAPPLICATION_DATA lpApplicationData); STDMETHOD (RunApplication) (const LPAPPLICATION_DATA lpApplicationData, const DWORD dwRunFlags, const DWORD dwStringMask, LPVOID lpData, const DWORD dwDataLen); STDMETHOD (PinApplication) (const LPAPPLICATION_DATA lpApplicationData, BOOL * lpfPinState); STDMETHOD (ReadyApplication) (const LPAPPLICATION_DATA lpApplicationData); STDMETHOD (DisableApplication) (const LPAPPLICATION_DATA lpApplicationData);
STDMETHOD_(DWORD, GetPropertyIndex) (const DWORD dwProperty); STDMETHOD (IsValidApplicationProperty) (const DWORD dwProperty); STDMETHOD (ValidateApplicationPropertyWithIndex) (const DWORD dwPropertyIndex, LPAPPLICATION_DATA lpApplicationData); STDMETHOD (InvalidateApplicationPropertyWithIndex) (const DWORD dwPropertyIndex, LPAPPLICATION_DATA lpApplicationData); STDMETHOD (IsApplicationPropertyInitializedWithIndex) (const DWORD dwPropertyIndex, LPAPPLICATION_DATA lpApplicationData);
STDMETHOD (DeleteDirectoryTree) (LPCSTR lpszDirectory); STDMETHOD (DeleteDirectoryTree) (LPCWSTR lpwszDirectory); STDMETHOD (RegInitialize) (void); STDMETHOD (RegFutureDirectoryCleanup) (LPCWSTR lpwszDirectory);
STDMETHOD (InitializeWaitEvent) (LPAPPLICATION_DATA lpApplicationData, const DWORD dwWaitEvent); STDMETHOD (EnterWaitEvent) (LPAPPLICATION_DATA lpApplicationData, const DWORD dwWaitEvent, const GUID * lpInstanceGuid); STDMETHOD (LeaveWaitEvent) (LPAPPLICATION_DATA lpApplicationData, const DWORD dwWaitEvent); STDMETHOD (WaitForEventCompletion) (LPAPPLICATION_DATA lpApplicationData, const DWORD dwWaitEvent, const DWORD dwEntryMilliseconds, const DWORD dwExitMilliseconds); STDMETHOD (KillWaitEvent) (LPAPPLICATION_DATA lpApplicationData, const DWORD dwWaitEvent); STDMETHOD (CheckDeviceExistance) (const DWORD dwDeviceIndex);
STDMETHOD_(BOOL, IsApplicationPinned) (const LPAPPLICATION_DATA lpApplicationData); STDMETHOD (IsInstanceGuidStillAlive) (const GUID * lpGuid); STDMETHOD (IsApplicationLocked) (LPAPPLICATION_DATA lpApplicationData); STDMETHOD (LockApplicationData) (LPAPPLICATION_DATA lpApplicationData, GUID * lpInstanceGuid); STDMETHOD (UnlockApplicationData) (LPAPPLICATION_DATA lpApplicationData, GUID * lpInstanceGuid); STDMETHOD (ForceUnlockApplicationData) (LPAPPLICATION_DATA lpApplicationData, GUID * lpInstanceGuid); STDMETHOD (LockApplicationData) (LPAPPLICATION_DATA lpApplicationData); STDMETHOD (UnlockApplicationData) (LPAPPLICATION_DATA lpApplicationData); STDMETHOD (LockParentApplications) (LPAPPLICATION_DATA lpApplicationData, GUID * lpInstanceGuid); STDMETHOD (UnlockParentApplications) (LPAPPLICATION_DATA lpApplicationData, GUID * lpInstanceGuid); STDMETHOD (LockParentApplications) (LPAPPLICATION_DATA lpApplicationData); STDMETHOD (UnlockParentApplications) (LPAPPLICATION_DATA lpApplicationData);
STDMETHOD_(DWORD, GetDeviceIndex) (const DWORD dwVolumeSerial); STDMETHOD (AddDeviceWithIndex) (const DWORD dwDeviceIndex); STDMETHOD (RemoveDeviceWithIndex) (const DWORD dwDeviceIndex); STDMETHOD (UpdateDeviceInfoWithIndex) (const DWORD dwDeviceIndex); STDMETHOD (ScanDevices) (void); STDMETHOD (ScanDevices) (const DWORD dwDeviceIndex); STDMETHOD (GetDeviceInfo) (LPDEVICE_RECORD lpDeviceRecord); STDMETHOD (GetDeviceInfoWithIndex) (const DWORD dwDeviceIndex, LPDEVICE_RECORD lpDeviceRecord); STDMETHOD (SetDeviceInfoWithIndex) (const DWORD dwDeviceIndex, LPDEVICE_RECORD lpDeviceRecord); STDMETHOD (GetDeviceSpaceInfoWithIndex) (const DWORD dwDeviceIndex, LPDEVICE_SPACE_INFO lpDeviceSpaceInfo); STDMETHOD (GetDeviceOptimalSpaceWithIndex) (const DWORD dwDeviceIndex, LPDWORD lpdwKilobytes); STDMETHOD (GetDeviceMaximumSpaceWithIndex) (const DWORD dwDeviceIndex, LPDWORD lpdwKilobytes); STDMETHOD (FreeSpaceOnDeviceWithIndex) (const DWORD dwDeviceIndex, const DWORD dwRequiredKilobytes); STDMETHOD_(DWORD, GetAgingCount) (LPAPPLICATION_DATA lpApplicationData); STDMETHOD (GetOldestApplicationDataByDeviceWithIndex) (const DWORD dwDeviceIndex, LPAPPLICATION_DATA lpApplicationData); STDMETHOD (GetNextOldestApplicationDataByDeviceWithIndex) (const DWORD dwDeviceIndex, LPAPPLICATION_DATA lpApplicationData); STDMETHOD (AddTempSpace) (LPTEMP_SPACE_RECORD lpTempSpaceRecord); STDMETHOD (RemoveTempSpace) (LPTEMP_SPACE_RECORD lpTempSpaceRecord); STDMETHOD (EnumTempSpace) (const DWORD dwIndex, LPTEMP_SPACE_RECORD lpTempSpaceRecord); STDMETHOD (AddAssociation) (LPASSOCIATION_INFO lpAssociationInfo); STDMETHOD (RemoveAssociation) (LPASSOCIATION_INFO lpAssociationInfo); STDMETHOD (EnumAssociations) (const DWORD dwIndex, LPASSOCIATION_INFO lpAssociationInfo);
private :
STDMETHOD_(DWORD, GetExtraWaitEventEntryTime) (void); STDMETHOD_(DWORD, GetExtraWaitEventExitTime) (void);
//
// Private data members
//
LONG m_lInitializationIndex; CWin32API m_Win32API; CCriticalSection m_CriticalSection; };
//////////////////////////////////////////////////////////////////////////////////////////////
#ifdef __cplusplus
} #endif
#endif // __INFORMATIONMANAGER_
|