// AppManDispatch.idl : IDL source for AppManDispatch.dll
//

// This file will be processed by the MIDL tool to
// produce the type library (AppManDispatch.tlb) and marshalling code.

import "oaidl.idl";
import "ocidl.idl";
	[
		object,
		uuid(E5065E80-0228-4469-9FAD-DE1F352A27FE),
		dual,
		helpstring("IAppEntry Interface"),
		pointer_default(unique)
	]
	interface IAppEntry : IDispatch
	{
		[propget, id(1), helpstring("property Guid")] HRESULT Guid([out, retval] BSTR *pVal);
		[propput, id(1), helpstring("property Guid")] HRESULT Guid([in] BSTR newVal);
		[propget, id(2), helpstring("property CompanyName")] HRESULT CompanyName([out, retval] BSTR *pVal);
		[propput, id(2), helpstring("property CompanyName")] HRESULT CompanyName([in] BSTR newVal);
		[propget, id(3), helpstring("property Signature")] HRESULT Signature([out, retval] BSTR *pVal);
		[propput, id(3), helpstring("property Signature")] HRESULT Signature([in] BSTR newVal);
		[propget, id(4), helpstring("property VersionString")] HRESULT VersionString([out, retval] BSTR *pVal);
		[propput, id(4), helpstring("property VersionString")] HRESULT VersionString([in] BSTR newVal);
		[propget, id(5), helpstring("property LastUsedDate")] HRESULT LastUsedDate([out, retval] DATE *pVal);
		[propget, id(6), helpstring("property InstallDate")] HRESULT InstallDate([out, retval] DATE *pVal);
		[propget, id(7), helpstring("property Category")] HRESULT Category([out, retval] long *pVal);
		[propput, id(7), helpstring("property Category")] HRESULT Category([in] long newVal);
		[propget, id(8), helpstring("property State")] HRESULT State([out, retval] long *pVal);
		[propput, id(8), helpstring("property State")] HRESULT State([in] long newVal);
		[propget, id(9), helpstring("property SetupRootPath")] HRESULT SetupRootPath([out, retval] BSTR *pVal);
		[propget, id(10), helpstring("property ApplicationRootPath")] HRESULT ApplicationRootPath([out, retval] BSTR *pVal);
		[propput, id(10), helpstring("property ApplicationRootPath")] HRESULT ApplicationRootPath([in] BSTR newVal);
		[propget, id(11), helpstring("property EstimatedInstallKilobytes")] HRESULT EstimatedInstallKilobytes([out, retval] long *pVal);
		[propput, id(11), helpstring("property EstimatedInstallKilobytes")] HRESULT EstimatedInstallKilobytes([in] long newVal);
		[propget, id(12), helpstring("property ExecuteCmdLine")] HRESULT ExecuteCmdLine([out, retval] BSTR *pVal);
		[propput, id(12), helpstring("property ExecuteCmdLine")] HRESULT ExecuteCmdLine([in] BSTR newVal);
		[propget, id(13), helpstring("property DefaultSetupExeCmdLine")] HRESULT DefaultSetupExeCmdLine([out, retval] BSTR *pVal);
		[propput, id(13), helpstring("property DefaultSetupExeCmdLine")] HRESULT DefaultSetupExeCmdLine([in] BSTR newVal);
		[propget, id(14), helpstring("property DownsizeCmdLine")] HRESULT DownsizeCmdLine([out, retval] BSTR *pVal);
		[propput, id(14), helpstring("property DownsizeCmdLine")] HRESULT DownsizeCmdLine([in] BSTR newVal);
		[propget, id(15), helpstring("property ReInstallCmdLine")] HRESULT ReInstallCmdLine([out, retval] BSTR *pVal);
		[propput, id(15), helpstring("property ReInstallCmdLine")] HRESULT ReInstallCmdLine([in] BSTR newVal);
		[propget, id(16), helpstring("property UnInstallCmdLine")] HRESULT UnInstallCmdLine([out, retval] BSTR *pVal);
		[propput, id(16), helpstring("property UnInstallCmdLine")] HRESULT UnInstallCmdLine([in] BSTR newVal);
		[propget, id(17), helpstring("property SelfTestCmdLine")] HRESULT SelfTestCmdLine([out, retval] BSTR *pVal);
		[propput, id(17), helpstring("property SelfTestCmdLine")] HRESULT SelfTestCmdLine([in] BSTR newVal);
		[propget, id(18), helpstring("property TitleURL")] HRESULT TitleURL([out, retval] BSTR *pVal);
		[propput, id(18), helpstring("property TitleURL")] HRESULT TitleURL([in] BSTR newVal);
		[propget, id(19), helpstring("property DeveloperURL")] HRESULT DeveloperURL([out, retval] BSTR *pVal);
		[propput, id(19), helpstring("property DeveloperURL")] HRESULT DeveloperURL([in] BSTR newVal);
		[propget, id(20), helpstring("property PublisherURL")] HRESULT PublisherURL([out, retval] BSTR *pVal);
		[propput, id(20), helpstring("property PublisherURL")] HRESULT PublisherURL([in] BSTR newVal);
		[propget, id(21), helpstring("property XMLInfoFile")] HRESULT XMLInfoFile([out, retval] BSTR *pVal);
		[propput, id(21), helpstring("property XMLInfoFile")] HRESULT XMLInfoFile([in] BSTR newVal);
		[id(22), helpstring("method Clear")] HRESULT Clear();
		[id(23), helpstring("method InitializeInstall")] HRESULT InitializeInstall();
		[id(24), helpstring("method FinalizeInstall")] HRESULT FinalizeInstall();
		[id(25), helpstring("method InitializeDownsize")] HRESULT InitializeDownsize();
		[id(26), helpstring("method FinalizeDownsize")] HRESULT FinalizeDownsize();
		[id(27), helpstring("method InitializeReInstall")] HRESULT InitializeReInstall();
		[id(28), helpstring("method FinalizeReInstall")] HRESULT FinalizeReInstall();
		[id(29), helpstring("method InitializeUnInstall")] HRESULT InitializeUnInstall();
		[id(30), helpstring("method FinalizeUnInstall")] HRESULT FinalizeUnInstall();
		[id(31), helpstring("method InitializeSelfTest")] HRESULT InitializeSelfTest();
		[id(32), helpstring("method FinalizeSelfTest")] HRESULT FinalizeSelfTest();
		[id(33), helpstring("method Abort")] HRESULT Abort();
		[id(34), helpstring("method Run")] HRESULT Run([in] long lRunFlags, [in] BSTR newVal);
		[id(35), helpstring("method AddAssociation")] HRESULT AddAssociation([in] long AssociationType, [in] IAppEntry * lpAppEntry);
		[id(36), helpstring("method RemoveAssociation")] HRESULT RemoveAssociation([in] long lAssociationType, [in] IAppEntry * lpAppEntry);
		[id(37), helpstring("method EnumAssociationTypes")] HRESULT EnumAssociationTypes([in] long lAssociationIndex, [out, retval] long * lpAssociationType);
		[id(38), helpstring("method EnumAssociationObjects")] HRESULT EnumAssociationObjects([in] long lAssociationIndex, [in] IAppEntry * lpAppEntry);
		[id(39), helpstring("method GetTemporarySpace")] HRESULT GetTemporarySpace([in] long lKilobytesRequired, [out, retval] BSTR * strRootPath);
		[id(40), helpstring("method RemoveTemporarySpace")] HRESULT RemoveTemporarySpace([in] BSTR strRootPath);
		[id(41), helpstring("method EnumTemporarySpacePaths")] HRESULT EnumTemporarySpacePaths([in] long lTempSpaceIndex, [out, retval] BSTR * strRootPath);
		[id(42), helpstring("method EnumTemporarySpaceAllocations")] HRESULT EnumTemporarySpaceAllocations([in] long lTempSpaceIndex, [out, retval] long * lTempSpaceKilobytes);
		[propget, id(43), helpstring("obsolete property, does nothing")] HRESULT RemovableKilobytes([out, retval] long *pVal);
		[propput, id(43), helpstring("obsolete property, does nothing")] HRESULT RemovableKilobytes([in] long newVal);
		[propget, id(44), helpstring("obsolete property, does nothing")] HRESULT NonRemovableKilobytes([out, retval] long *pVal);
		[propput, id(44), helpstring("obsolete property, does nothing")] HRESULT NonRemovableKilobytes([in] long newVal);
	};
	[
		object,
		uuid(8D051768-5370-40AF-B149-2B265F39CCA2),
		dual,
		helpstring("IAppManager Interface"),
		pointer_default(unique)
	]
	interface IAppManager : IDispatch
	{
		[propget, id(1), helpstring("property AdvancedMode")] HRESULT AdvancedMode([out, retval] long *pVal);
		[propget, id(2), helpstring("property MaximumAvailableKilobytes")] HRESULT MaximumAvailableKilobytes(long lSpaceCategory, [out, retval] long *pVal);
		[propget, id(3), helpstring("property OptimalAvailableKilobytes")] HRESULT OptimalAvailableKilobytes(long lSpaceCategory, [out, retval] long *pVal);
		[propget, id(4), helpstring("property ApplicationCount")] HRESULT ApplicationCount([out, retval] long *pVal);
		[id(5), helpstring("method CreateApplicationEntry")] HRESULT CreateApplicationEntry([out, retval] IAppEntry ** lppAppEntry);
		[id(6), helpstring("method GetApplicationInfo")] HRESULT GetApplicationInfo([in] IAppEntry * lpAppEntry);
		[id(7), helpstring("method EnumApplications")] HRESULT EnumApplications([in] long lApplicationIndex, [in] IAppEntry * lpAppEntry);
		[id(8), helpstring("method EnumDeviceAvailableKilobytes")] HRESULT EnumDeviceAvailableKilobytes([in] long lDeviceIndex, [out, retval] long * lKilobytes);
		[id(9), helpstring("method EnumDeviceRootPaths")] HRESULT EnumDeviceRootPaths([in] long lDeviceIndex, [out, retval] BSTR * strRootPath);
		[id(10), helpstring("method EnumDeviceExclusionMask")] HRESULT EnumDeviceExclusionMask([in] long lDeviceIndex, [out, retval] long * lExclusionMask);
	};

[
	uuid(132ACE4B-3FDF-4B61-A22B-38049687F970),
	version(1.0),
	helpstring("AppManDispatch 1.0 Type Library")
]
library APPMANDISPATCHLib
{
	importlib("stdole2.tlb");

  //
  // Defines used with GetProperty(APP_PROPERTY_STATE, ...)
  //

  typedef enum CONST_APP_STATES
  {
    APP_STATE_INSTALLING                      = 0x00000001,
    APP_STATE_READY                           = 0x00000002,
    APP_STATE_DOWNSIZING                      = 0x00000004,
    APP_STATE_DOWNSIZED                       = 0x00000008,
    APP_STATE_REINSTALLING                    = 0x00000010,
    APP_STATE_UNINSTALLING                    = 0x00000020,
    APP_STATE_UNINSTALLED                     = 0x00000040,
    APP_STATE_SELFTESTING                     = 0x00000080,
    APP_STATE_UNSTABLE                        = 0x00000100,
    APP_STATE_MASK                            = 0x000001ff

  } APPSTATES;

  //
  // Defines used with Set/GetProperty(APP_PROPERTY_CATEGORY, ...)
  //

  typedef enum CONST_APP_CATEGORIES
  {
    APP_CATEGORY_NONE                         = 0x00000000,
    APP_CATEGORY_ENTERTAINMENT                = 0x00000001,
    APP_CATEGORY_PRODUCTIVITY                 = 0x00000002,
    APP_CATEGORY_PUBLISHING                   = 0x00000004,
    APP_CATEGORY_SCIENTIFIC                   = 0x00000008,
    APP_CATEGORY_AUTHORING                    = 0x00000010,
    APP_CATEGORY_MEDICAL                      = 0x00000020,
    APP_CATEGORY_BUSINESS                     = 0x00000040,
    APP_CATEGORY_FINANCIAL                    = 0x00000080,
    APP_CATEGORY_EDUCATIONAL                  = 0x00000100,
    APP_CATEGORY_REFERENCE                    = 0x00000200,
    APP_CATEGORY_WEB                          = 0x00000400,
    APP_CATEGORY_DEVELOPMENTTOOL              = 0x00000800,
    APP_CATEGORY_MULTIMEDIA                   = 0x00001000,
    APP_CATEGORY_VIRUSCLEANER                 = 0x00002000,
    APP_CATEGORY_CONNECTIVITY                 = 0x00004000,
    APP_CATEGORY_MISC                         = 0x00008000,
    APP_CATEGORY_DEMO                         = 0x01000000,
    APP_CATEGORY_PATCH                        = 0x02000000,
    APP_CATEGORY_DATA                         = 0x04000000,
    APP_CATEGORY_ALL                          = 0x0700ffff

  } APP_CATEGORIES;

  //
  // Association defines
  //

  typedef enum CONST_APP_ASSOCIATION_TYPES
  {
    APP_ASSOCIATION_CHILD                     = 0x40000000,
    APP_ASSOCIATION_PARENT                    = 0x80000000,
    APP_ASSOCIATION_INHERITBOTHPATHS          = 0x00000001,
    APP_ASSOCIATION_INHERITAPPROOTPATH        = 0x00000002,
    APP_ASSOCIATION_INHERITSETUPROOTPATH      = 0x00000004

  } APP_ASSOCIATION_TYPES;

  //
  // Some misc defines
  //

  typedef enum CONST_MISC_DEFINES
  {
    MAX_COMPANYNAME_CHARCOUNT                 = 64,
    MAX_SIGNATURE_CHARCOUNT                   = 64,
    MAX_VERSIONSTRING_CHARCOUNT               = 16,
    MAX_CMDLINE_CHARCOUNT                     = 255,
    MAX_PATH_CHARCOUNT                        = 255

  } MISC_DEFINES;

  //
  // Error Codes
  //

  typedef enum CONST_ERROR_CODES
  {
    APPMAN_E_NOTINITIALIZED                   = 0x85670001,
    APPMAN_E_INVALIDPROPERTYSIZE              = 0x85670005,
    APPMAN_E_INVALIDDATA                      = 0x85670006,
    APPMAN_E_INVALIDPROPERTY                  = 0x85670007,
    APPMAN_E_READONLYPROPERTY                 = 0x85670008,
    APPMAN_E_PROPERTYNOTSET                   = 0x85670009,
    APPMAN_E_OVERFLOW                         = 0x8567000a,
    APPMAN_E_INVALIDPROPERTYVALUE             = 0x8567000c,
    APPMAN_E_ACTIONINPROGRESS                 = 0x8567000d,
    APPMAN_E_ACTIONNOTINITIALIZED             = 0x8567000e,
    APPMAN_E_REQUIREDPROPERTIESMISSING        = 0x8567000f,
    APPMAN_E_APPLICATIONALREADYEXISTS         = 0x85670010,
    APPMAN_E_APPLICATIONALREADYLOCKED         = 0x85670011,
    APPMAN_E_NODISKSPACEAVAILABLE             = 0x85670012,
    APPMAN_E_UNKNOWNAPPLICATION               = 0x85670014,
    APPMAN_E_INVALIDPARAMETERS                = 0x85670015,
    APPMAN_E_OBJECTLOCKED                     = 0x85670017,
    APPMAN_E_INVALIDINDEX                     = 0x85670018,
    APPMAN_E_REGISTRYCORRUPT                  = 0x85670019,
    APPMAN_E_CANNOTASSOCIATE                  = 0x8567001a,
    APPMAN_E_INVALIDASSOCIATION               = 0x8567001b,
    APPMAN_E_ALREADYASSOCIATED                = 0x8567001c,
    APPMAN_E_APPLICATIONREQUIRED              = 0x8567001d,
    APPMAN_E_INVALIDEXECUTECMDLINE            = 0x8567001e,
    APPMAN_E_INVALIDDOWNSIZECMDLINE           = 0x8567001f,
    APPMAN_E_INVALIDREINSTALLCMDLINE          = 0x85670020,
    APPMAN_E_INVALIDUNINSTALLCMDLINE          = 0x85670021,
    APPMAN_E_INVALIDSELFTESTCMDLINE           = 0x85670022,
    APPMAN_E_PARENTAPPNOTREADY                = 0x85670023,
    APPMAN_E_INVALIDSTATE                     = 0x85670024,
    APPMAN_E_INVALIDROOTPATH                  = 0x85670025,
    APPMAN_E_CACHEOVERRUN                     = 0x85670026,
    APPMAN_E_REINSTALLDX                      = 0x85670028,
    APPMAN_E_APPNOTEXECUTABLE                 = 0x85670029

  } ERROR_CODES;

	[
		uuid(9D4BD41C-508B-4D49-894E-F09242B68AF8),
		helpstring("AppEntry Class")
	]
	coclass AppEntry
	{
		[default] interface IAppEntry;
	};
	[
		uuid(09A0E8F4-3C5D-4EA3-B56A-4E0731EE861A),
		helpstring("AppManager Class")
	]
	coclass AppManager
	{
		[default] interface IAppManager;
	};
};