Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

366 lines
16 KiB

  1. //////////////////////////////////////////////////////////////////////////////////////////////
  2. //
  3. // Copyright (C) 1998, 1999, 2000 Microsoft Corporation. All rights reserved.
  4. //
  5. // File : AppMan.h
  6. //
  7. // Content : Include file containing the IApplicationManager and IApplicationEntry
  8. // interfaces needed to use the Windows Application Manager
  9. //
  10. //////////////////////////////////////////////////////////////////////////////////////////////
  11. #ifndef __IAPPMAN_
  12. #define __IAPPMAN_
  13. #ifdef __cplusplus
  14. extern "C" {
  15. #endif // _cplusplus
  16. //
  17. // Get a few important things defined properly before proceeding
  18. //
  19. #undef EXPORT
  20. #ifdef WIN32
  21. #define EXPORT __declspec(dllexport)
  22. #else // WIN32
  23. #define EXPORT __export
  24. #endif // WIN32
  25. #if defined( _WIN32 ) && !defined( _NO_COM )
  26. #define COM_NO_WINDOWS_H
  27. #include <objbase.h>
  28. #else // defined( _WIN32 ) && !defined( _NO_COM )
  29. #include "windows.h"
  30. #include "ole2.h"
  31. #define IUnknown void
  32. #endif // defined( _WIN32 ) && !defined( _NO_COM )
  33. //
  34. // GUID definition for the IApplicationManager interface
  35. //
  36. // CLSID_ApplicationManager = {553C75D7-C0B6-480d-92CC-F936D75FD87C}
  37. // IID_ApplicationManager = {6084A2E8-3FB7-4d1c-B14B-6ADBAAF7CECE}
  38. // IID_ApplicationEntry = {7BA2201F-4DE7-4ef7-BBA3-C69A716B8CD9}
  39. //
  40. DEFINE_GUID(CLSID_ApplicationManager, 0x553c75d7, 0xc0b6, 0x480d, 0x92, 0xcc, 0xf9, 0x36, 0xd7, 0x5f, 0xd8, 0x7c);
  41. DEFINE_GUID(IID_ApplicationManager, 0x6084a2e8, 0x3fb7, 0x4d1c, 0xb1, 0x4b, 0x6a, 0xdb, 0xaa, 0xf7, 0xce, 0xce);
  42. DEFINE_GUID(IID_ApplicationEntry, 0x7ba2201f, 0x4de7, 0x4ef7, 0xbb, 0xa3, 0xc6, 0x9a, 0x71, 0x6b, 0x8c, 0xd9);
  43. //
  44. // These defines are used in conjunction with the APP_PROPERTY_STATE and the
  45. // IApplicationEntry->SetProperty() and IApplicationEntry->GetProperty() methods
  46. //
  47. #define APP_STATE_INSTALLING 0x00000001
  48. #define APP_STATE_READY 0x00000002
  49. #define APP_STATE_DOWNSIZING 0x00000004
  50. #define APP_STATE_DOWNSIZED 0x00000008
  51. #define APP_STATE_REINSTALLING 0x00000010
  52. #define APP_STATE_UNINSTALLING 0x00000020
  53. #define APP_STATE_UNINSTALLED 0x00000040
  54. #define APP_STATE_SELFTESTING 0x00000080
  55. #define APP_STATE_UNSTABLE 0x00000100
  56. #define APP_STATE_MASK 0x000001ff
  57. //
  58. // These defines are used in conjunction with the APP_PROPERTY_CATEGORY and the
  59. // IApplicationEntry->SetProperty() and IApplicationEntry->GetProperty() methods. More
  60. // categories will be supported in version 2.
  61. //
  62. #define APP_CATEGORY_NONE 0x00000000
  63. #define APP_CATEGORY_ENTERTAINMENT 0x00000001
  64. #define APP_CATEGORY_DEMO 0x01000000
  65. #define APP_CATEGORY_PATCH 0x02000000
  66. #define APP_CATEGORY_DATA 0x04000000
  67. #define APP_CATEGORY_ALL 0x0700ffff
  68. //
  69. // These defines are used as the dwPropertyDefine parameter of the
  70. // IApplicationEntry->SetProperty() and IApplicationEntry->GetProperty() methods
  71. //
  72. #define APP_PROPERTY_GUID 0x00000001
  73. #define APP_PROPERTY_COMPANYNAME 0x00000002
  74. #define APP_PROPERTY_SIGNATURE 0x00000003
  75. #define APP_PROPERTY_VERSIONSTRING 0x00000004
  76. #define APP_PROPERTY_ROOTPATH 0x00000005
  77. #define APP_PROPERTY_SETUPROOTPATH 0x00000006
  78. #define APP_PROPERTY_STATE 0x00000007
  79. #define APP_PROPERTY_CATEGORY 0x00000008
  80. #define APP_PROPERTY_ESTIMATEDINSTALLKILOBYTES 0x00000009
  81. #define APP_PROPERTY_EXECUTECMDLINE 0x0000000c
  82. #define APP_PROPERTY_DEFAULTSETUPEXECMDLINE 0x0000001a
  83. #define APP_PROPERTY_DOWNSIZECMDLINE 0x0000000d
  84. #define APP_PROPERTY_REINSTALLCMDLINE 0x0000000e
  85. #define APP_PROPERTY_UNINSTALLCMDLINE 0x0000000f
  86. #define APP_PROPERTY_SELFTESTCMDLINE 0x00000010
  87. #define APP_PROPERTY_INSTALLDATE 0x00000013
  88. #define APP_PROPERTY_LASTUSEDDATE 0x00000014
  89. #define APP_PROPERTY_TITLEURL 0x00000015
  90. #define APP_PROPERTY_PUBLISHERURL 0x00000016
  91. #define APP_PROPERTY_DEVELOPERURL 0x00000017
  92. #define APP_PROPERTY_XMLINFOFILE 0x00000019
  93. //
  94. // Defines used as OR mask modifiers for the APP_PROPERTY_xxx string based properties.
  95. // The default is APP_PROPERTY_STR_UNICODE.
  96. //
  97. // Used as OR masks for the dwPropertyDefines parameter of:
  98. // IApplicationEntry->GetProperty()
  99. // IApplicationEntry->SetProperty()
  100. //
  101. // Used alone for the dwStringDefine parameters of:
  102. // IApplicationManager->EnumDevices()
  103. // IApplicationEntry->GetTemporarySpace()
  104. // IApplicationEntry->RemoveTemporarySpace()
  105. // IApplicationEntry->EnumTemporarySpaces()
  106. //
  107. #define APP_PROPERTY_STR_ANSI 0x40000000
  108. #define APP_PROPERTY_STR_UNICODE 0x80000000
  109. #ifdef UNICODE
  110. #ifndef _UNICODE
  111. #define _UNICODE
  112. #endif
  113. #endif
  114. #ifdef _UNICODE
  115. #define APP_PROPERTY_TSTR APP_PROPERTY_STR_UNICODE
  116. #else // _UNICODE
  117. #define APP_PROPERTY_TSTR APP_PROPERTY_STR_ANSI
  118. #endif // _UNICODE
  119. //
  120. // Association specific defines. Associations are used to inherit root paths from
  121. // existing applications.
  122. //
  123. // APP_ASSOCIATION_CHILD : OR mask used only in the dwAssociationType
  124. // parameter of the
  125. // IApplicationEntry->EnumAssociations(...) method.
  126. // This bit means that the IApplicationEntry object
  127. // is a child in the relationship
  128. // APP_ASSOCIATION_PARENT : OR mask used obly in the dwAssociationType
  129. // parameter of the
  130. // IApplicationEntry->EnumAssociations(...) method.
  131. // This bit means that the IApplicationEntry object
  132. // is the parent in the relationship
  133. // APP_ASSOCIATION_INHERITBOTHPATHS : Inherit both the APP_PROPERTY_ROOTPATH and
  134. // APP_PROPERTYSETUPROOTPATH of the parent
  135. // application.
  136. // APP_ASSOCIATION_INHERITAPPROOTPATH : Inherit the APP_PROPERTY_ROOTPATH of the parent
  137. // application. Get a unique
  138. // APP_PROPERTY_SETUPROOTPATH.
  139. // APP_ASSOCIATION_INHERITSETUPROOTPATH : Inherit the APP_PROPERTY_SETUPROOTPATH of the
  140. // parent application. Get a unique
  141. // APP_PROPERTY_ROOTPATH.
  142. //
  143. #define APP_ASSOCIATION_CHILD 0x40000000
  144. #define APP_ASSOCIATION_PARENT 0x80000000
  145. #define APP_ASSOCIATION_INHERITBOTHPATHS 0x00000001
  146. #define APP_ASSOCIATION_INHERITAPPROOTPATH 0x00000002
  147. #define APP_ASSOCIATION_INHERITSETUPROOTPATH 0x00000004
  148. //
  149. // Defines used for the dwRunFlags parameter of the IApplicationEntry->Run(...) method. These
  150. // defines determine whether the Run(...) method should wait for the application to terminate
  151. // before returning.
  152. //
  153. #define APP_RUN_NOBLOCK 0x00000000
  154. #define APP_RUN_BLOCK 0x00000001
  155. //
  156. // String length defines (in characters, not bytes)
  157. //
  158. // MAX_COMPANYNAME_CHARCOUNT --> APP_PROPERTY_COMPANYNAME
  159. // MAX_SIGNATURE_CHARCOUNT --> APP_PROPERTY_SIGNATURE
  160. // MAX_VERSIONSTRING_CHARCOUNT --> APP_PROPERTY_VERSIONSTRING
  161. // MAX_PATH_CHARCOUNT --> APP_PROPERTY_ROOTPATH
  162. // APP_PROPERTY_SETUPROOTPATH
  163. // APP_PROPERTY_XMLINFOFILE
  164. // APP_PROPERTY_TITLEURL
  165. // APP_PROPERTY_PUBLISHERURL
  166. // APP_PROPERTY_DEVELOPERURL
  167. // MAX_CMDLINE_CHARCOUNT --> APP_PROPERTY_EXECUTECMDLINE
  168. // APP_PROPERTY_DEFAULTSETUPEXECMDLINE
  169. // APP_PROPERTY_DOWNSIZECMDLINE
  170. // APP_PROPERTY_REINSTALLCMDLINE
  171. // APP_PROPERTY_UNINSTALLCMDLINE
  172. // APP_PROPERTY_SELFTESTCMDLINE
  173. //
  174. //
  175. #define MAX_COMPANYNAME_CHARCOUNT 64
  176. #define MAX_SIGNATURE_CHARCOUNT 64
  177. #define MAX_VERSIONSTRING_CHARCOUNT 16
  178. #define MAX_PATH_CHARCOUNT 255
  179. #define MAX_CMDLINE_CHARCOUNT 255
  180. //
  181. // Application Manager specific COM error codes
  182. //
  183. #define APPMAN_E_NOTINITIALIZED 0x85670001
  184. #define APPMAN_E_INVALIDPROPERTYSIZE 0x85670005
  185. #define APPMAN_E_INVALIDDATA 0x85670006
  186. #define APPMAN_E_INVALIDPROPERTY 0x85670007
  187. #define APPMAN_E_READONLYPROPERTY 0x85670008
  188. #define APPMAN_E_PROPERTYNOTSET 0x85670009
  189. #define APPMAN_E_OVERFLOW 0x8567000a
  190. #define APPMAN_E_INVALIDPROPERTYVALUE 0x8567000c
  191. #define APPMAN_E_ACTIONINPROGRESS 0x8567000d
  192. #define APPMAN_E_ACTIONNOTINITIALIZED 0x8567000e
  193. #define APPMAN_E_REQUIREDPROPERTIESMISSING 0x8567000f
  194. #define APPMAN_E_APPLICATIONALREADYEXISTS 0x85670010
  195. #define APPMAN_E_APPLICATIONALREADYLOCKED 0x85670011
  196. #define APPMAN_E_NODISKSPACEAVAILABLE 0x85670012
  197. #define APPMAN_E_UNKNOWNAPPLICATION 0x85670014
  198. #define APPMAN_E_INVALIDPARAMETERS 0x85670015
  199. #define APPMAN_E_OBJECTLOCKED 0x85670017
  200. #define APPMAN_E_INVALIDINDEX 0x85670018
  201. #define APPMAN_E_REGISTRYCORRUPT 0x85670019
  202. #define APPMAN_E_CANNOTASSOCIATE 0x8567001a
  203. #define APPMAN_E_INVALIDASSOCIATION 0x8567001b
  204. #define APPMAN_E_ALREADYASSOCIATED 0x8567001c
  205. #define APPMAN_E_APPLICATIONREQUIRED 0x8567001d
  206. #define APPMAN_E_INVALIDEXECUTECMDLINE 0x8567001e
  207. #define APPMAN_E_INVALIDDOWNSIZECMDLINE 0x8567001f
  208. #define APPMAN_E_INVALIDREINSTALLCMDLINE 0x85670020
  209. #define APPMAN_E_INVALIDUNINSTALLCMDLINE 0x85670021
  210. #define APPMAN_E_INVALIDSELFTESTCMDLINE 0x85670022
  211. #define APPMAN_E_PARENTAPPNOTREADY 0x85670023
  212. #define APPMAN_E_INVALIDSTATE 0x85670024
  213. #define APPMAN_E_INVALIDROOTPATH 0x85670025
  214. #define APPMAN_E_CACHEOVERRUN 0x85670026
  215. #define APPMAN_E_REINSTALLDX 0x85670028
  216. #define APPMAN_E_APPNOTEXECUTABLE 0x85670029
  217. //////////////////////////////////////////////////////////////////////////////////////////////
  218. //
  219. // Interface definitions
  220. //
  221. //////////////////////////////////////////////////////////////////////////////////////////////
  222. #if defined( _WIN32 ) && !defined( _NO_COM )
  223. //
  224. // IApplicationEntry Interface
  225. //
  226. // STDMETHOD (QueryInterface) (REFIID RefIID, LPVOID * lppVoidObject);
  227. // STDMETHOD_(ULONG, AddRef) (void);
  228. // STDMETHOD_(ULONG, Release) (void);
  229. // STDMETHOD (Clear) (void);
  230. // STDMETHOD (GetProperty) (const DWORD dwPropertyDefine, LPVOID lpData, const DWORD dwDataLenInBytes);
  231. // STDMETHOD (SetProperty) (const DWORD dwPropertyDefine, LPCVOID lpData, const DWORD dwDataLenInBytes);
  232. // STDMETHOD (InitializeInstall) (void);
  233. // STDMETHOD (FinalizeInstall) (void);
  234. // STDMETHOD (InitializeDownsize) (void);
  235. // STDMETHOD (FinalizeDownsize) (void);
  236. // STDMETHOD (InitializeReInstall) (void);
  237. // STDMETHOD (FinalizeReInstall) (void);
  238. // STDMETHOD (InitializeUnInstall) (void);
  239. // STDMETHOD (FinalizeUnInstall) (void);
  240. // STDMETHOD (InitializeSelfTest) (void);
  241. // STDMETHOD (FinalizeSelfTest) (void);
  242. // STDMETHOD (Abort) (void);
  243. // STDMETHOD (Run) (const DWORD dwRunFlags, const DWORD dwStringMask, LPVOID lpData, const DWORD dwDataLenInBytes);
  244. // STDMETHOD (AddAssociation) (const DWORD dwAssociationDefine, const IApplicationEntry * lpApplicationEntry);
  245. // STDMETHOD (RemoveAssociation) (const DWORD dwAssociationDefine, const IApplicationEntry * lpApplicationEntry);
  246. // STDMETHOD (EnumAssociations) (const DWORD dwZeroBasedIndex, LPDWORD lpdwAssociationDefineMask, IApplicationEntry * lpApplicationEntry);
  247. // STDMETHOD (GetTemporarySpace) (const DWORD dwSpaceInKilobytes, const DWORD dwStringDefine, LPVOID lpData, const DWORD dwDataLen);
  248. // STDMETHOD (RemoveTemporarySpace) (const DWORD dwStringDefine, LPVOID lpData, const DWORD dwDataLen);
  249. // STDMETHOD (EnumTemporarySpaces) (const DWORD dwZeroBasedIndex, LPDWORD lpdwSpaceInKilobytes, const DWORD dwStringDefine, LPVOID lpData, const DWORD dwDataLen);
  250. //
  251. #undef INTERFACE
  252. #define INTERFACE IApplicationEntry
  253. DECLARE_INTERFACE_( IApplicationEntry, IUnknown )
  254. {
  255. //
  256. // IUnknown interfaces
  257. //
  258. STDMETHOD (QueryInterface) (THIS_ REFIID, LPVOID *) PURE;
  259. STDMETHOD_(ULONG, AddRef) (THIS) PURE;
  260. STDMETHOD_(ULONG, Release) (THIS) PURE;
  261. //
  262. // IApplicationEntry interface methods
  263. //
  264. STDMETHOD (Clear) (THIS) PURE;
  265. STDMETHOD (GetProperty) (THIS_ const DWORD, LPVOID, const DWORD) PURE;
  266. STDMETHOD (SetProperty) (THIS_ const DWORD, LPCVOID, const DWORD) PURE;
  267. STDMETHOD (InitializeInstall) (THIS) PURE;
  268. STDMETHOD (FinalizeInstall) (THIS) PURE;
  269. STDMETHOD (InitializeDownsize) (THIS) PURE;
  270. STDMETHOD (FinalizeDownsize) (THIS) PURE;
  271. STDMETHOD (InitializeReInstall) (THIS) PURE;
  272. STDMETHOD (FinalizeReInstall) (THIS) PURE;
  273. STDMETHOD (InitializeUnInstall) (THIS) PURE;
  274. STDMETHOD (FinalizeUnInstall) (THIS) PURE;
  275. STDMETHOD (InitializeSelfTest) (THIS) PURE;
  276. STDMETHOD (FinalizeSelfTest) (THIS) PURE;
  277. STDMETHOD (Abort) (THIS) PURE;
  278. STDMETHOD (Run) (THIS_ const DWORD, const DWORD, LPVOID, const DWORD) PURE;
  279. STDMETHOD (AddAssociation) (THIS_ const DWORD, const IApplicationEntry *) PURE;
  280. STDMETHOD (RemoveAssociation) (THIS_ const DWORD, const IApplicationEntry *) PURE;
  281. STDMETHOD (EnumAssociations) (THIS_ const DWORD, LPDWORD, IApplicationEntry *) PURE;
  282. STDMETHOD (GetTemporarySpace) (THIS_ const DWORD, const DWORD, LPVOID, const DWORD) PURE;
  283. STDMETHOD (RemoveTemporarySpace) (THIS_ const DWORD, LPVOID, const DWORD) PURE;
  284. STDMETHOD (EnumTemporarySpaces) (THIS_ const DWORD, LPDWORD, const DWORD, LPVOID, const DWORD ) PURE;
  285. };
  286. //
  287. // IApplicationManager Interface
  288. //
  289. // STDMETHOD (QueryInterface) (REFIID RefIID, LPVOID * lppVoidObject);
  290. // STDMETHOD_(ULONG, AddRef) (void);
  291. // STDMETHOD_(ULONG, Release) (void);
  292. // STDMETHOD (GetAdvancedMode) (LPDWORD lpdwAdvancedMode);
  293. // STDMETHOD (GetAvailableSpace) (const DWORD dwCategoryDefine, LPDWORD lpdwMaximumSpaceInKilobytes, LPDWORD lpdwOptimalSpaceInKilobytes);
  294. // STDMETHOD (CreateApplicationEntry) (IApplicationEntry ** lppObject);
  295. // STDMETHOD (GetApplicationInfo) (IApplicationEntry * lpObject);
  296. // STDMETHOD (EnumApplications) (const DWORD dwZeroBasedIndex, IApplicationEntry * lpObject);
  297. // STDMETHOD (EnumDevices) (const DWORD dwZeroBasedIndex, LPDWORD lpdwAvailableSpaceInKilobytes, LPDWORD lpdwCategoryDefineExclusionMask, const DWORD dwStringDefine, LPVOID lpData, const DWORD dwDataLen);
  298. //
  299. #undef INTERFACE
  300. #define INTERFACE IApplicationManager
  301. DECLARE_INTERFACE_( IApplicationManager, IUnknown )
  302. {
  303. //
  304. // IUnknown Interfaces
  305. //
  306. STDMETHOD (QueryInterface) (THIS_ REFIID, LPVOID *) PURE;
  307. STDMETHOD_(ULONG, AddRef) (THIS) PURE;
  308. STDMETHOD_(ULONG, Release) (THIS) PURE;
  309. //
  310. // IApplicationManager interface methods
  311. //
  312. STDMETHOD (GetAdvancedMode) (THIS_ LPDWORD) PURE;
  313. STDMETHOD (GetAvailableSpace) (THIS_ const DWORD, LPDWORD, LPDWORD) PURE;
  314. STDMETHOD (CreateApplicationEntry) (THIS_ IApplicationEntry **) PURE;
  315. STDMETHOD (GetApplicationInfo) (THIS_ IApplicationEntry *) PURE;
  316. STDMETHOD (EnumApplications) (THIS_ const DWORD, IApplicationEntry *) PURE;
  317. STDMETHOD (EnumDevices) (THIS_ const DWORD, LPDWORD, LPDWORD, const DWORD, LPVOID, const DWORD) PURE;
  318. };
  319. #endif // defined( _WIN32 ) && !defined( _NO_COM )
  320. #ifdef __cplusplus
  321. }
  322. #endif // _cplusplus
  323. #endif // __IAPPMAN_