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