367 lines
16 KiB
C
367 lines
16 KiB
C
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Copyright (C) 1998, 1999, 2000 Microsoft Corporation. All rights reserved.
|
|
//
|
|
// File : AppMan.h
|
|
//
|
|
// Content : Include file containing the IApplicationManager and IApplicationEntry
|
|
// interfaces needed to use the Windows Application Manager
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef __IAPPMAN_
|
|
#define __IAPPMAN_
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif // _cplusplus
|
|
|
|
//
|
|
// Get a few important things defined properly before proceeding
|
|
//
|
|
|
|
#undef EXPORT
|
|
#ifdef WIN32
|
|
#define EXPORT __declspec(dllexport)
|
|
#else // WIN32
|
|
#define EXPORT __export
|
|
#endif // WIN32
|
|
|
|
#if defined( _WIN32 ) && !defined( _NO_COM )
|
|
#define COM_NO_WINDOWS_H
|
|
#include <objbase.h>
|
|
#else // defined( _WIN32 ) && !defined( _NO_COM )
|
|
#include "windows.h"
|
|
#include "ole2.h"
|
|
#define IUnknown void
|
|
#endif // defined( _WIN32 ) && !defined( _NO_COM )
|
|
|
|
//
|
|
// GUID definition for the IApplicationManager interface
|
|
//
|
|
// CLSID_ApplicationManager = {553C75D7-C0B6-480d-92CC-F936D75FD87C}
|
|
// IID_ApplicationManager = {6084A2E8-3FB7-4d1c-B14B-6ADBAAF7CECE}
|
|
// IID_ApplicationEntry = {7BA2201F-4DE7-4ef7-BBA3-C69A716B8CD9}
|
|
//
|
|
|
|
DEFINE_GUID(CLSID_ApplicationManager, 0x553c75d7, 0xc0b6, 0x480d, 0x92, 0xcc, 0xf9, 0x36, 0xd7, 0x5f, 0xd8, 0x7c);
|
|
DEFINE_GUID(IID_ApplicationManager, 0x6084a2e8, 0x3fb7, 0x4d1c, 0xb1, 0x4b, 0x6a, 0xdb, 0xaa, 0xf7, 0xce, 0xce);
|
|
DEFINE_GUID(IID_ApplicationEntry, 0x7ba2201f, 0x4de7, 0x4ef7, 0xbb, 0xa3, 0xc6, 0x9a, 0x71, 0x6b, 0x8c, 0xd9);
|
|
|
|
//
|
|
// These defines are used in conjunction with the APP_PROPERTY_STATE and the
|
|
// IApplicationEntry->SetProperty() and IApplicationEntry->GetProperty() methods
|
|
//
|
|
|
|
#define APP_STATE_INSTALLING 0x00000001
|
|
#define APP_STATE_READY 0x00000002
|
|
#define APP_STATE_DOWNSIZING 0x00000004
|
|
#define APP_STATE_DOWNSIZED 0x00000008
|
|
#define APP_STATE_REINSTALLING 0x00000010
|
|
#define APP_STATE_UNINSTALLING 0x00000020
|
|
#define APP_STATE_UNINSTALLED 0x00000040
|
|
#define APP_STATE_SELFTESTING 0x00000080
|
|
#define APP_STATE_UNSTABLE 0x00000100
|
|
|
|
#define APP_STATE_MASK 0x000001ff
|
|
|
|
//
|
|
// These defines are used in conjunction with the APP_PROPERTY_CATEGORY and the
|
|
// IApplicationEntry->SetProperty() and IApplicationEntry->GetProperty() methods. More
|
|
// categories will be supported in version 2.
|
|
//
|
|
|
|
#define APP_CATEGORY_NONE 0x00000000
|
|
#define APP_CATEGORY_ENTERTAINMENT 0x00000001
|
|
|
|
#define APP_CATEGORY_DEMO 0x01000000
|
|
#define APP_CATEGORY_PATCH 0x02000000
|
|
#define APP_CATEGORY_DATA 0x04000000
|
|
|
|
#define APP_CATEGORY_ALL 0x0700ffff
|
|
|
|
//
|
|
// These defines are used as the dwPropertyDefine parameter of the
|
|
// IApplicationEntry->SetProperty() and IApplicationEntry->GetProperty() methods
|
|
//
|
|
|
|
#define APP_PROPERTY_GUID 0x00000001
|
|
#define APP_PROPERTY_COMPANYNAME 0x00000002
|
|
#define APP_PROPERTY_SIGNATURE 0x00000003
|
|
#define APP_PROPERTY_VERSIONSTRING 0x00000004
|
|
#define APP_PROPERTY_ROOTPATH 0x00000005
|
|
#define APP_PROPERTY_SETUPROOTPATH 0x00000006
|
|
#define APP_PROPERTY_STATE 0x00000007
|
|
#define APP_PROPERTY_CATEGORY 0x00000008
|
|
#define APP_PROPERTY_ESTIMATEDINSTALLKILOBYTES 0x00000009
|
|
#define APP_PROPERTY_EXECUTECMDLINE 0x0000000c
|
|
#define APP_PROPERTY_DEFAULTSETUPEXECMDLINE 0x0000001a
|
|
#define APP_PROPERTY_DOWNSIZECMDLINE 0x0000000d
|
|
#define APP_PROPERTY_REINSTALLCMDLINE 0x0000000e
|
|
#define APP_PROPERTY_UNINSTALLCMDLINE 0x0000000f
|
|
#define APP_PROPERTY_SELFTESTCMDLINE 0x00000010
|
|
#define APP_PROPERTY_INSTALLDATE 0x00000013
|
|
#define APP_PROPERTY_LASTUSEDDATE 0x00000014
|
|
#define APP_PROPERTY_TITLEURL 0x00000015
|
|
#define APP_PROPERTY_PUBLISHERURL 0x00000016
|
|
#define APP_PROPERTY_DEVELOPERURL 0x00000017
|
|
#define APP_PROPERTY_XMLINFOFILE 0x00000019
|
|
|
|
//
|
|
// Defines used as OR mask modifiers for the APP_PROPERTY_xxx string based properties.
|
|
// The default is APP_PROPERTY_STR_UNICODE.
|
|
//
|
|
// Used as OR masks for the dwPropertyDefines parameter of:
|
|
// IApplicationEntry->GetProperty()
|
|
// IApplicationEntry->SetProperty()
|
|
//
|
|
// Used alone for the dwStringDefine parameters of:
|
|
// IApplicationManager->EnumDevices()
|
|
// IApplicationEntry->GetTemporarySpace()
|
|
// IApplicationEntry->RemoveTemporarySpace()
|
|
// IApplicationEntry->EnumTemporarySpaces()
|
|
//
|
|
|
|
#define APP_PROPERTY_STR_ANSI 0x40000000
|
|
#define APP_PROPERTY_STR_UNICODE 0x80000000
|
|
|
|
#ifdef UNICODE
|
|
#ifndef _UNICODE
|
|
#define _UNICODE
|
|
#endif
|
|
#endif
|
|
|
|
#ifdef _UNICODE
|
|
#define APP_PROPERTY_TSTR APP_PROPERTY_STR_UNICODE
|
|
#else // _UNICODE
|
|
#define APP_PROPERTY_TSTR APP_PROPERTY_STR_ANSI
|
|
#endif // _UNICODE
|
|
|
|
//
|
|
// Association specific defines. Associations are used to inherit root paths from
|
|
// existing applications.
|
|
//
|
|
// APP_ASSOCIATION_CHILD : OR mask used only in the dwAssociationType
|
|
// parameter of the
|
|
// IApplicationEntry->EnumAssociations(...) method.
|
|
// This bit means that the IApplicationEntry object
|
|
// is a child in the relationship
|
|
// APP_ASSOCIATION_PARENT : OR mask used obly in the dwAssociationType
|
|
// parameter of the
|
|
// IApplicationEntry->EnumAssociations(...) method.
|
|
// This bit means that the IApplicationEntry object
|
|
// is the parent in the relationship
|
|
// APP_ASSOCIATION_INHERITBOTHPATHS : Inherit both the APP_PROPERTY_ROOTPATH and
|
|
// APP_PROPERTYSETUPROOTPATH of the parent
|
|
// application.
|
|
// APP_ASSOCIATION_INHERITAPPROOTPATH : Inherit the APP_PROPERTY_ROOTPATH of the parent
|
|
// application. Get a unique
|
|
// APP_PROPERTY_SETUPROOTPATH.
|
|
// APP_ASSOCIATION_INHERITSETUPROOTPATH : Inherit the APP_PROPERTY_SETUPROOTPATH of the
|
|
// parent application. Get a unique
|
|
// APP_PROPERTY_ROOTPATH.
|
|
//
|
|
|
|
#define APP_ASSOCIATION_CHILD 0x40000000
|
|
#define APP_ASSOCIATION_PARENT 0x80000000
|
|
#define APP_ASSOCIATION_INHERITBOTHPATHS 0x00000001
|
|
#define APP_ASSOCIATION_INHERITAPPROOTPATH 0x00000002
|
|
#define APP_ASSOCIATION_INHERITSETUPROOTPATH 0x00000004
|
|
|
|
//
|
|
// Defines used for the dwRunFlags parameter of the IApplicationEntry->Run(...) method. These
|
|
// defines determine whether the Run(...) method should wait for the application to terminate
|
|
// before returning.
|
|
//
|
|
|
|
#define APP_RUN_NOBLOCK 0x00000000
|
|
#define APP_RUN_BLOCK 0x00000001
|
|
|
|
//
|
|
// String length defines (in characters, not bytes)
|
|
//
|
|
// MAX_COMPANYNAME_CHARCOUNT --> APP_PROPERTY_COMPANYNAME
|
|
// MAX_SIGNATURE_CHARCOUNT --> APP_PROPERTY_SIGNATURE
|
|
// MAX_VERSIONSTRING_CHARCOUNT --> APP_PROPERTY_VERSIONSTRING
|
|
// MAX_PATH_CHARCOUNT --> APP_PROPERTY_ROOTPATH
|
|
// APP_PROPERTY_SETUPROOTPATH
|
|
// APP_PROPERTY_XMLINFOFILE
|
|
// APP_PROPERTY_TITLEURL
|
|
// APP_PROPERTY_PUBLISHERURL
|
|
// APP_PROPERTY_DEVELOPERURL
|
|
// MAX_CMDLINE_CHARCOUNT --> APP_PROPERTY_EXECUTECMDLINE
|
|
// APP_PROPERTY_DEFAULTSETUPEXECMDLINE
|
|
// APP_PROPERTY_DOWNSIZECMDLINE
|
|
// APP_PROPERTY_REINSTALLCMDLINE
|
|
// APP_PROPERTY_UNINSTALLCMDLINE
|
|
// APP_PROPERTY_SELFTESTCMDLINE
|
|
//
|
|
//
|
|
|
|
#define MAX_COMPANYNAME_CHARCOUNT 64
|
|
#define MAX_SIGNATURE_CHARCOUNT 64
|
|
#define MAX_VERSIONSTRING_CHARCOUNT 16
|
|
#define MAX_PATH_CHARCOUNT 255
|
|
#define MAX_CMDLINE_CHARCOUNT 255
|
|
|
|
//
|
|
// Application Manager specific COM error codes
|
|
//
|
|
|
|
#define APPMAN_E_NOTINITIALIZED 0x85670001
|
|
#define APPMAN_E_INVALIDPROPERTYSIZE 0x85670005
|
|
#define APPMAN_E_INVALIDDATA 0x85670006
|
|
#define APPMAN_E_INVALIDPROPERTY 0x85670007
|
|
#define APPMAN_E_READONLYPROPERTY 0x85670008
|
|
#define APPMAN_E_PROPERTYNOTSET 0x85670009
|
|
#define APPMAN_E_OVERFLOW 0x8567000a
|
|
#define APPMAN_E_INVALIDPROPERTYVALUE 0x8567000c
|
|
#define APPMAN_E_ACTIONINPROGRESS 0x8567000d
|
|
#define APPMAN_E_ACTIONNOTINITIALIZED 0x8567000e
|
|
#define APPMAN_E_REQUIREDPROPERTIESMISSING 0x8567000f
|
|
#define APPMAN_E_APPLICATIONALREADYEXISTS 0x85670010
|
|
#define APPMAN_E_APPLICATIONALREADYLOCKED 0x85670011
|
|
#define APPMAN_E_NODISKSPACEAVAILABLE 0x85670012
|
|
#define APPMAN_E_UNKNOWNAPPLICATION 0x85670014
|
|
#define APPMAN_E_INVALIDPARAMETERS 0x85670015
|
|
#define APPMAN_E_OBJECTLOCKED 0x85670017
|
|
#define APPMAN_E_INVALIDINDEX 0x85670018
|
|
#define APPMAN_E_REGISTRYCORRUPT 0x85670019
|
|
#define APPMAN_E_CANNOTASSOCIATE 0x8567001a
|
|
#define APPMAN_E_INVALIDASSOCIATION 0x8567001b
|
|
#define APPMAN_E_ALREADYASSOCIATED 0x8567001c
|
|
#define APPMAN_E_APPLICATIONREQUIRED 0x8567001d
|
|
#define APPMAN_E_INVALIDEXECUTECMDLINE 0x8567001e
|
|
#define APPMAN_E_INVALIDDOWNSIZECMDLINE 0x8567001f
|
|
#define APPMAN_E_INVALIDREINSTALLCMDLINE 0x85670020
|
|
#define APPMAN_E_INVALIDUNINSTALLCMDLINE 0x85670021
|
|
#define APPMAN_E_INVALIDSELFTESTCMDLINE 0x85670022
|
|
#define APPMAN_E_PARENTAPPNOTREADY 0x85670023
|
|
#define APPMAN_E_INVALIDSTATE 0x85670024
|
|
#define APPMAN_E_INVALIDROOTPATH 0x85670025
|
|
#define APPMAN_E_CACHEOVERRUN 0x85670026
|
|
#define APPMAN_E_REINSTALLDX 0x85670028
|
|
#define APPMAN_E_APPNOTEXECUTABLE 0x85670029
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Interface definitions
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
#if defined( _WIN32 ) && !defined( _NO_COM )
|
|
|
|
//
|
|
// IApplicationEntry Interface
|
|
//
|
|
// STDMETHOD (QueryInterface) (REFIID RefIID, LPVOID * lppVoidObject);
|
|
// STDMETHOD_(ULONG, AddRef) (void);
|
|
// STDMETHOD_(ULONG, Release) (void);
|
|
// STDMETHOD (Clear) (void);
|
|
// STDMETHOD (GetProperty) (const DWORD dwPropertyDefine, LPVOID lpData, const DWORD dwDataLenInBytes);
|
|
// STDMETHOD (SetProperty) (const DWORD dwPropertyDefine, LPCVOID lpData, const DWORD dwDataLenInBytes);
|
|
// 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 dwDataLenInBytes);
|
|
// STDMETHOD (AddAssociation) (const DWORD dwAssociationDefine, const IApplicationEntry * lpApplicationEntry);
|
|
// STDMETHOD (RemoveAssociation) (const DWORD dwAssociationDefine, const IApplicationEntry * lpApplicationEntry);
|
|
// STDMETHOD (EnumAssociations) (const DWORD dwZeroBasedIndex, LPDWORD lpdwAssociationDefineMask, IApplicationEntry * lpApplicationEntry);
|
|
// STDMETHOD (GetTemporarySpace) (const DWORD dwSpaceInKilobytes, const DWORD dwStringDefine, LPVOID lpData, const DWORD dwDataLen);
|
|
// STDMETHOD (RemoveTemporarySpace) (const DWORD dwStringDefine, LPVOID lpData, const DWORD dwDataLen);
|
|
// STDMETHOD (EnumTemporarySpaces) (const DWORD dwZeroBasedIndex, LPDWORD lpdwSpaceInKilobytes, const DWORD dwStringDefine, LPVOID lpData, const DWORD dwDataLen);
|
|
//
|
|
|
|
#undef INTERFACE
|
|
#define INTERFACE IApplicationEntry
|
|
DECLARE_INTERFACE_( IApplicationEntry, IUnknown )
|
|
{
|
|
//
|
|
// IUnknown interfaces
|
|
//
|
|
|
|
STDMETHOD (QueryInterface) (THIS_ REFIID, LPVOID *) PURE;
|
|
STDMETHOD_(ULONG, AddRef) (THIS) PURE;
|
|
STDMETHOD_(ULONG, Release) (THIS) PURE;
|
|
|
|
//
|
|
// IApplicationEntry interface methods
|
|
//
|
|
|
|
STDMETHOD (Clear) (THIS) PURE;
|
|
STDMETHOD (GetProperty) (THIS_ const DWORD, LPVOID, const DWORD) PURE;
|
|
STDMETHOD (SetProperty) (THIS_ const DWORD, LPCVOID, const DWORD) PURE;
|
|
STDMETHOD (InitializeInstall) (THIS) PURE;
|
|
STDMETHOD (FinalizeInstall) (THIS) PURE;
|
|
STDMETHOD (InitializeDownsize) (THIS) PURE;
|
|
STDMETHOD (FinalizeDownsize) (THIS) PURE;
|
|
STDMETHOD (InitializeReInstall) (THIS) PURE;
|
|
STDMETHOD (FinalizeReInstall) (THIS) PURE;
|
|
STDMETHOD (InitializeUnInstall) (THIS) PURE;
|
|
STDMETHOD (FinalizeUnInstall) (THIS) PURE;
|
|
STDMETHOD (InitializeSelfTest) (THIS) PURE;
|
|
STDMETHOD (FinalizeSelfTest) (THIS) PURE;
|
|
STDMETHOD (Abort) (THIS) PURE;
|
|
STDMETHOD (Run) (THIS_ const DWORD, const DWORD, LPVOID, const DWORD) PURE;
|
|
STDMETHOD (AddAssociation) (THIS_ const DWORD, const IApplicationEntry *) PURE;
|
|
STDMETHOD (RemoveAssociation) (THIS_ const DWORD, const IApplicationEntry *) PURE;
|
|
STDMETHOD (EnumAssociations) (THIS_ const DWORD, LPDWORD, IApplicationEntry *) PURE;
|
|
STDMETHOD (GetTemporarySpace) (THIS_ const DWORD, const DWORD, LPVOID, const DWORD) PURE;
|
|
STDMETHOD (RemoveTemporarySpace) (THIS_ const DWORD, LPVOID, const DWORD) PURE;
|
|
STDMETHOD (EnumTemporarySpaces) (THIS_ const DWORD, LPDWORD, const DWORD, LPVOID, const DWORD ) PURE;
|
|
};
|
|
|
|
//
|
|
// IApplicationManager Interface
|
|
//
|
|
// STDMETHOD (QueryInterface) (REFIID RefIID, LPVOID * lppVoidObject);
|
|
// STDMETHOD_(ULONG, AddRef) (void);
|
|
// STDMETHOD_(ULONG, Release) (void);
|
|
// STDMETHOD (GetAdvancedMode) (LPDWORD lpdwAdvancedMode);
|
|
// STDMETHOD (GetAvailableSpace) (const DWORD dwCategoryDefine, LPDWORD lpdwMaximumSpaceInKilobytes, LPDWORD lpdwOptimalSpaceInKilobytes);
|
|
// STDMETHOD (CreateApplicationEntry) (IApplicationEntry ** lppObject);
|
|
// STDMETHOD (GetApplicationInfo) (IApplicationEntry * lpObject);
|
|
// STDMETHOD (EnumApplications) (const DWORD dwZeroBasedIndex, IApplicationEntry * lpObject);
|
|
// STDMETHOD (EnumDevices) (const DWORD dwZeroBasedIndex, LPDWORD lpdwAvailableSpaceInKilobytes, LPDWORD lpdwCategoryDefineExclusionMask, const DWORD dwStringDefine, LPVOID lpData, const DWORD dwDataLen);
|
|
//
|
|
|
|
#undef INTERFACE
|
|
#define INTERFACE IApplicationManager
|
|
DECLARE_INTERFACE_( IApplicationManager, IUnknown )
|
|
{
|
|
//
|
|
// IUnknown Interfaces
|
|
//
|
|
|
|
STDMETHOD (QueryInterface) (THIS_ REFIID, LPVOID *) PURE;
|
|
STDMETHOD_(ULONG, AddRef) (THIS) PURE;
|
|
STDMETHOD_(ULONG, Release) (THIS) PURE;
|
|
|
|
//
|
|
// IApplicationManager interface methods
|
|
//
|
|
|
|
STDMETHOD (GetAdvancedMode) (THIS_ LPDWORD) PURE;
|
|
STDMETHOD (GetAvailableSpace) (THIS_ const DWORD, LPDWORD, LPDWORD) PURE;
|
|
STDMETHOD (CreateApplicationEntry) (THIS_ IApplicationEntry **) PURE;
|
|
STDMETHOD (GetApplicationInfo) (THIS_ IApplicationEntry *) PURE;
|
|
STDMETHOD (EnumApplications) (THIS_ const DWORD, IApplicationEntry *) PURE;
|
|
STDMETHOD (EnumDevices) (THIS_ const DWORD, LPDWORD, LPDWORD, const DWORD, LPVOID, const DWORD) PURE;
|
|
|
|
};
|
|
|
|
#endif // defined( _WIN32 ) && !defined( _NO_COM )
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif // _cplusplus
|
|
|
|
#endif // __IAPPMAN_
|