////////////////////////////////////////////////////////////////////////////////////////////// // // 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 #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_