fusion.idl 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356
  1. /*
  2. * Copyright 2008 James Hawkins
  3. *
  4. * This library is free software; you can redistribute it and/or
  5. * modify it under the terms of the GNU Lesser General Public
  6. * License as published by the Free Software Foundation; either
  7. * version 2.1 of the License, or (at your option) any later version.
  8. *
  9. * This library is distributed in the hope that it will be useful,
  10. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  12. * Lesser General Public License for more details.
  13. *
  14. * You should have received a copy of the GNU Lesser General Public
  15. * License along with this library; if not, write to the Free Software
  16. * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  17. */
  18. import "objidl.idl";
  19. interface IAssemblyCache;
  20. interface IAssemblyCacheItem;
  21. interface IAssemblyEnum;
  22. interface IAssemblyName;
  23. typedef enum
  24. {
  25. ASM_CACHE_ZAP = 0x1,
  26. ASM_CACHE_GAC = 0x2,
  27. ASM_CACHE_DOWNLOAD = 0x4,
  28. ASM_CACHE_ROOT = 0x8,
  29. ASM_CACHE_ROOT_EX = 0x80
  30. } ASM_CACHE_FLAGS;
  31. typedef enum
  32. {
  33. peNone = 0x00000000,
  34. peMSIL = 0x00000001,
  35. peI386 = 0x00000002,
  36. peIA64 = 0x00000003,
  37. peAMD64 = 0x00000004,
  38. peARM = 0x00000005,
  39. peInvalid = 0xffffffff
  40. } PEKIND;
  41. typedef enum _tagAssemblyComparisonResult
  42. {
  43. ACR_Unknown,
  44. ACR_EquivalentFullMatch,
  45. ACR_EquivalentWeakNamed,
  46. ACR_EquivalentFXUnified,
  47. ACR_EquivalentUnified,
  48. ACR_NonEquivalentVersion,
  49. ACR_NonEquivalent,
  50. ACR_EquivalentPartialMatch,
  51. ACR_EquivalentPartialWeakNamed,
  52. ACR_EquivalentPartialUnified,
  53. ACR_EquivalentPartialFXUnified,
  54. ACR_NonEquivalentPartialVersion
  55. } AssemblyComparisonResult;
  56. [
  57. local,
  58. object,
  59. uuid(e707dcde-d1cd-11d2-bab9-00c04f8eceae),
  60. pointer_default(unique)
  61. ]
  62. interface IAssemblyCache : IUnknown
  63. {
  64. typedef struct _FUSION_INSTALL_REFERENCE_
  65. {
  66. DWORD cbSize;
  67. DWORD dwFlags;
  68. GUID guidScheme;
  69. LPCWSTR szIdentifier;
  70. LPCWSTR szNonCannonicalData;
  71. } FUSION_INSTALL_REFERENCE, *LPFUSION_INSTALL_REFERENCE;
  72. typedef const FUSION_INSTALL_REFERENCE *LPCFUSION_INSTALL_REFERENCE;
  73. typedef struct _ASSEMBLY_INFO
  74. {
  75. ULONG cbAssemblyInfo;
  76. DWORD dwAssemblyFlags;
  77. ULARGE_INTEGER uliAssemblySizeInKB;
  78. LPWSTR pszCurrentAssemblyPathBuf;
  79. ULONG cchBuf;
  80. } ASSEMBLY_INFO;
  81. cpp_quote("#define IASSEMBLYCACHE_INSTALL_FLAG_REFRESH 0x00000001")
  82. cpp_quote("#define IASSEMBLYCACHE_INSTALL_FLAG_FORCE_REFRESH 0x00000002")
  83. cpp_quote("#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_UNINSTALLED 1")
  84. cpp_quote("#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_STILL_IN_USE 2")
  85. cpp_quote("#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_ALREADY_UNINSTALLED 3")
  86. cpp_quote("#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_DELETE_PENDING 4")
  87. cpp_quote("#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_HAS_INSTALL_REFERENCES 5")
  88. cpp_quote("#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_REFERENCE_NOT_FOUND 6")
  89. cpp_quote("#define QUERYASMINFO_FLAG_VALIDATE 0x00000001")
  90. cpp_quote("#define QUERYASMINFO_FLAG_GETSIZE 0x00000002")
  91. cpp_quote("#define ASSEMBLYINFO_FLAG_INSTALLED 0x00000001")
  92. cpp_quote("#define ASSEMBLYINFO_FLAG_PAYLOADRESIDENT 0x00000002")
  93. HRESULT UninstallAssembly(
  94. [in] DWORD dwFlags,
  95. [in] LPCWSTR pszAssemblyName,
  96. [in] LPCFUSION_INSTALL_REFERENCE pRefData,
  97. [out, optional] ULONG *pulDisposition);
  98. HRESULT QueryAssemblyInfo(
  99. [in] DWORD dwFlags,
  100. [in] LPCWSTR pszAssemblyName,
  101. [in, out] ASSEMBLY_INFO *pAsmInfo);
  102. HRESULT CreateAssemblyCacheItem(
  103. [in] DWORD dwFlags,
  104. [in] PVOID pvReserved,
  105. [out] IAssemblyCacheItem **ppAsmItem,
  106. [in, optional] LPCWSTR pszAssemblyName);
  107. HRESULT CreateAssemblyScavenger([out] IUnknown **ppUnkReserved);
  108. HRESULT InstallAssembly(
  109. [in] DWORD dwFlags,
  110. [in] LPCWSTR pszManifestFilePath,
  111. [in] LPCFUSION_INSTALL_REFERENCE pRefData);
  112. }
  113. [
  114. local,
  115. object,
  116. uuid(9e3aaeb4-d1cd-11d2-bab9-00c04f8eceae),
  117. pointer_default(unique)
  118. ]
  119. interface IAssemblyCacheItem : IUnknown
  120. {
  121. cpp_quote("#define STREAM_FORMAT_COMPLIB_MODULE 0")
  122. cpp_quote("#define STREAM_FORMAT_COMPLIB_MANIFEST 1")
  123. cpp_quote("#define STREAM_FORMAT_WIN32_MODULE 2")
  124. cpp_quote("#define STREAM_FORMAT_WIN32_MANIFEST 4")
  125. cpp_quote("#define IASSEMBLYCACHEITEM_COMMIT_FLAG_REFRESH 0x00000001")
  126. cpp_quote("#define IASSEMBLYCACHEITEM_COMMIT_FLAG_FORCE_REFRESH 0x00000002")
  127. cpp_quote("#define IASSEMBLYCACHEITEM_COMMIT_DISPOSITION_INSTALLED 1")
  128. cpp_quote("#define IASSEMBLYCACHEITEM_COMMIT_DISPOSITION_REFRESHED 2")
  129. cpp_quote("#define IASSEMBLYCACHEITEM_COMMIT_DISPOSITION_ALREADY_INSTALLED 3")
  130. HRESULT CreateStream(
  131. [in] DWORD dwFlags,
  132. [in] LPCWSTR pszStreamName,
  133. [in] DWORD dwFormat,
  134. [in] DWORD dwFormatFlags,
  135. [out] IStream **ppIStream,
  136. [in, optional] ULARGE_INTEGER *puliMaxSize);
  137. HRESULT Commit(
  138. [in] DWORD dwFlags,
  139. [out, optional] ULONG *pulDisposition);
  140. HRESULT AbortItem();
  141. }
  142. [
  143. local,
  144. object,
  145. uuid(CD193BC0-B4BC-11d2-9833-00C04FC31D2E),
  146. pointer_default(unique)
  147. ]
  148. interface IAssemblyName: IUnknown
  149. {
  150. typedef [unique] IAssemblyName *LPASSEMBLYNAME;
  151. typedef enum
  152. {
  153. CANOF_PARSE_DISPLAY_NAME = 0x1,
  154. CANOF_SET_DEFAULT_VALUES = 0x2,
  155. CANOF_VERIFY_FRIEND_ASSEMBLYNAME = 0x4,
  156. CANOF_PARSE_FRIEND_DISPLAY_NAME = CANOF_PARSE_DISPLAY_NAME |
  157. CANOF_VERIFY_FRIEND_ASSEMBLYNAME
  158. } CREATE_ASM_NAME_OBJ_FLAGS;
  159. typedef enum
  160. {
  161. ASM_NAME_PUBLIC_KEY = 0,
  162. ASM_NAME_PUBLIC_KEY_TOKEN,
  163. ASM_NAME_HASH_VALUE,
  164. ASM_NAME_NAME,
  165. ASM_NAME_MAJOR_VERSION,
  166. ASM_NAME_MINOR_VERSION,
  167. ASM_NAME_BUILD_NUMBER,
  168. ASM_NAME_REVISION_NUMBER,
  169. ASM_NAME_CULTURE,
  170. ASM_NAME_PROCESSOR_ID_ARRAY,
  171. ASM_NAME_OSINFO_ARRAY,
  172. ASM_NAME_HASH_ALGID,
  173. ASM_NAME_ALIAS,
  174. ASM_NAME_CODEBASE_URL,
  175. ASM_NAME_CODEBASE_LASTMOD,
  176. ASM_NAME_NULL_PUBLIC_KEY,
  177. ASM_NAME_NULL_PUBLIC_KEY_TOKEN,
  178. ASM_NAME_CUSTOM,
  179. ASM_NAME_NULL_CUSTOM,
  180. ASM_NAME_MVID,
  181. ASM_NAME_FILE_MAJOR_VERSION,
  182. ASM_NAME_FILE_MINOR_VERSION,
  183. ASM_NAME_FILE_BUILD_NUMBER,
  184. ASM_NAME_FILE_REVISION_NUMBER,
  185. ASM_NAME_RETARGET,
  186. ASM_NAME_SIGNATURE_BLOB,
  187. ASM_NAME_CONFIG_MASK,
  188. ASM_NAME_ARCHITECTURE,
  189. ASM_NAME_MAX_PARAMS
  190. } ASM_NAME;
  191. typedef enum
  192. {
  193. ASM_DISPLAYF_VERSION = 0x1,
  194. ASM_DISPLAYF_CULTURE = 0x2,
  195. ASM_DISPLAYF_PUBLIC_KEY_TOKEN = 0x4,
  196. ASM_DISPLAYF_PUBLIC_KEY = 0x8,
  197. ASM_DISPLAYF_CUSTOM = 0x10,
  198. ASM_DISPLAYF_PROCESSORARCHITECTURE = 0x20,
  199. ASM_DISPLAYF_LANGUAGEID = 0x40,
  200. ASM_DISPLAYF_RETARGET = 0x80,
  201. ASM_DISPLAYF_CONFIG_MASK = 0x100,
  202. ASM_DISPLAYF_MVID = 0x200,
  203. ASM_DISPLAYF_FULL = ASM_DISPLAYF_VERSION |
  204. ASM_DISPLAYF_CULTURE |
  205. ASM_DISPLAYF_PUBLIC_KEY_TOKEN |
  206. ASM_DISPLAYF_RETARGET |
  207. ASM_DISPLAYF_PROCESSORARCHITECTURE,
  208. } ASM_DISPLAY_FLAGS;
  209. typedef enum
  210. {
  211. ASM_CMPF_NAME = 0x1,
  212. ASM_CMPF_MAJOR_VERSION = 0x2,
  213. ASM_CMPF_MINOR_VERSION = 0x4,
  214. ASM_CMPF_BUILD_NUMBER = 0x8,
  215. ASM_CMPF_REVISION_NUMBER = 0x10,
  216. ASM_CMPF_VERSION = ASM_CMPF_MAJOR_VERSION |
  217. ASM_CMPF_MINOR_VERSION |
  218. ASM_CMPF_BUILD_NUMBER |
  219. ASM_CMPF_REVISION_NUMBER,
  220. ASM_CMPF_PUBLIC_KEY_TOKEN = 0x20,
  221. ASM_CMPF_CULTURE = 0x40,
  222. ASM_CMPF_CUSTOM = 0x80,
  223. ASM_CMPF_DEFAULT = 0x100,
  224. ASM_CMPF_RETARGET = 0x200,
  225. ASM_CMPF_ARCHITECTURE = 0x400,
  226. ASM_CMPF_CONFIG_MASK = 0x800,
  227. ASM_CMPF_MVID = 0x1000,
  228. ASM_CMPF_SIGNATURE = 0x2000,
  229. ASM_CMPF_IL_ALL = ASM_CMPF_NAME |
  230. ASM_CMPF_VERSION |
  231. ASM_CMPF_PUBLIC_KEY_TOKEN |
  232. ASM_CMPF_CULTURE,
  233. ASM_CMPF_IL_NO_VERSION = ASM_CMPF_NAME |
  234. ASM_CMPF_PUBLIC_KEY_TOKEN |
  235. ASM_CMPF_CULTURE
  236. } ASM_CMP_FLAGS;
  237. HRESULT SetProperty(
  238. [in] DWORD PropertyId,
  239. [in] LPVOID pvProperty,
  240. [in] DWORD cbProperty);
  241. HRESULT GetProperty(
  242. [in] DWORD PropertyId,
  243. [out] LPVOID pvProperty,
  244. [in, out] LPDWORD pcbProperty);
  245. HRESULT Finalize();
  246. HRESULT GetDisplayName(
  247. [out] LPOLESTR szDisplayName,
  248. [in, out] LPDWORD pccDisplayName,
  249. [in] DWORD dwDisplayFlags);
  250. HRESULT Reserved(
  251. [in] REFIID refIID,
  252. [in] IUnknown *pUnkReserved1,
  253. [in] IUnknown *pUnkReserved2,
  254. [in] LPCOLESTR szReserved,
  255. [in] LONGLONG llReserved,
  256. [in] LPVOID pvReserved,
  257. [in] DWORD cbReserved,
  258. [out] LPVOID *ppReserved);
  259. HRESULT GetName(
  260. [in, out] LPDWORD lpcwBuffer,
  261. [out] WCHAR *pwzName);
  262. HRESULT GetVersion(
  263. [out] LPDWORD pdwVersionHi,
  264. [out] LPDWORD pdwVersionLow);
  265. HRESULT IsEqual(
  266. [in] IAssemblyName *pName,
  267. [in] DWORD dwCmpFlags);
  268. HRESULT Clone([out] IAssemblyName **pName);
  269. }
  270. [
  271. local,
  272. object,
  273. uuid(21b8916c-f28e-11d2-a473-00c04f8ef448),
  274. pointer_default(unique)
  275. ]
  276. interface IAssemblyEnum : IUnknown
  277. {
  278. HRESULT GetNextAssembly(
  279. [in] LPVOID pvReserved,
  280. [out] IAssemblyName **ppName,
  281. [in] DWORD dwFlags);
  282. HRESULT Reset(void);
  283. HRESULT Clone([out] IAssemblyEnum **ppEnum);
  284. }
  285. [
  286. local,
  287. object,
  288. uuid(582dac66-e678-449f-aba6-6faaec8a9394),
  289. pointer_default(unique)
  290. ]
  291. interface IInstallReferenceItem : IUnknown
  292. {
  293. }
  294. [
  295. local,
  296. object,
  297. uuid(56b1a988-7c0c-4aa2-8639-c3eb5a90226f),
  298. pointer_default(unique)
  299. ]
  300. interface IInstallReferenceEnum : IUnknown
  301. {
  302. }
  303. cpp_quote("HRESULT WINAPI ClearDownloadCache(void);")
  304. cpp_quote("HRESULT WINAPI CompareAssemblyIdentity(LPCWSTR,WINBOOL,LPCWSTR,WINBOOL,WINBOOL*,AssemblyComparisonResult*);")
  305. cpp_quote("HRESULT WINAPI CreateAssemblyCache(IAssemblyCache**,DWORD);")
  306. cpp_quote("HRESULT WINAPI CreateAssemblyEnum(IAssemblyEnum**,IUnknown*,IAssemblyName*,DWORD,LPVOID);")
  307. cpp_quote("HRESULT WINAPI CreateAssemblyNameObject(LPASSEMBLYNAME*,LPCWSTR,DWORD,LPVOID);")
  308. cpp_quote("HRESULT WINAPI CreateInstallReferenceEnum(IInstallReferenceEnum**,IAssemblyName*,DWORD,LPVOID);")
  309. cpp_quote("HRESULT WINAPI GetAssemblyIdentityFromFile(LPCWSTR,REFIID,IUnknown**);")
  310. cpp_quote("HRESULT WINAPI GetCachePath(ASM_CACHE_FLAGS,LPWSTR,PDWORD);")