//+--------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1992-1999. // // File: fusion.idl // // Contents: Fusion Interfaces // // Classes: // // Functions: // // //---------------------------------------------------------------------------- cpp_quote("//=--------------------------------------------------------------------------=") cpp_quote("// fusion.h") cpp_quote("//=--------------------------------------------------------------------------=") cpp_quote("// (C) Copyright 1995-1998 Microsoft Corporation. All Rights Reserved.") cpp_quote("//") cpp_quote("// THIS CODE AND INFORMATION IS PROVIDED \"AS IS\" WITHOUT WARRANTY OF") cpp_quote("// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO") cpp_quote("// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A") cpp_quote("// PARTICULAR PURPOSE.") cpp_quote("//=--------------------------------------------------------------------------=") cpp_quote("") cpp_quote("#pragma comment(lib,\"uuid.lib\")") cpp_quote("") cpp_quote("//---------------------------------------------------------------------------=") cpp_quote("// Fusion Interfaces.") cpp_quote("") import "objidl.idl"; import "oleidl.idl"; cpp_quote("#define STREAM_FORMAT_COMPLIB_MODULE 0") cpp_quote("#define STREAM_FORMAT_COMPLIB_MANIFEST 1") cpp_quote("#define STREAM_FORMAT_WIN32_MODULE 2") cpp_quote("#define STREAM_FORMAT_WIN32_MANIFEST 4") interface IAssemblyName; interface IApplicationContext; interface IAssembly; interface IAssemblyBindSink; interface IAssemblyBinding; interface IAssemblyManifestImport; interface IAssemblyModuleImport; interface IAssemblyCacheItem; interface IAssemblyScavenger; interface IAssemblyCache; interface IHistoryAssembly; interface IHistoryReader; interface IMetaDataAssemblyImportControl; interface IFusionLoadContext; cpp_quote("EXTERN_C const IID IID_IAssemblyName; ") cpp_quote("EXTERN_C const IID IID_IApplicationContext; ") cpp_quote("EXTERN_C const IID IID_IAssembly; ") cpp_quote("EXTERN_C const IID IID_IAssemblyBindSink; ") cpp_quote("EXTERN_C const IID IID_IAssemblyBinding; ") cpp_quote("EXTERN_C const IID IID_IAssemblyManifestImport;") cpp_quote("EXTERN_C const IID IID_IAssemblyModuleImport; ") cpp_quote("EXTERN_C const IID IID_IAssemblyCacheItem; ") cpp_quote("EXTERN_C const IID IID_IAssemblyScavenger; ") cpp_quote("EXTERN_C const IID IID_IAssemblyCache; ") cpp_quote("EXTERN_C const IID IID_IHistoryAssembly; ") cpp_quote("EXTERN_C const IID IID_IHistoryReader; ") cpp_quote("EXTERN_C const IID IID_IMetaDataAssemblyImportControl; ") cpp_quote("EXTERN_C const IID IID_IFusionLoadContext; ") cpp_quote("#ifndef _LPFUSION_DEFINED") cpp_quote("#define _LPFUSION_DEFINED") cpp_quote("#define IASSEMBLYCACHEITEM_COMMIT_FLAG_REFRESH (0x00000001)") cpp_quote("#define QUERYASMINFO_FLAG_VALIDATE (0x1)") // these flags are for dwAssemblyFlags field in struct _ASSEMBLY_INFO cpp_quote("#define ASSEMBLYINFO_FLAG_INSTALLED (0x00000001)") cpp_quote("#define ASSEMBLYINFO_FLAG_PAYLOADRESIDENT (0x00000002)") typedef struct _ASSEMBLY_INFO { ULONG cbAssemblyInfo; // size of this structure for future expansion DWORD dwAssemblyFlags; ULARGE_INTEGER uliAssemblySizeInKB; LPWSTR pszCurrentAssemblyPathBuf; ULONG cchBuf; // size of path buf. } ASSEMBLY_INFO; cpp_quote("#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_UNINSTALLED (1)") cpp_quote("#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_STILL_IN_USE (2)") cpp_quote("#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_ALREADY_UNINSTALLED (3)") cpp_quote("#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_DELETE_PENDING (4)") cpp_quote("#define IASSEMBLYCACHEITEM_COMMIT_DISPOSITION_INSTALLED (1)") // first time install cpp_quote("#define IASSEMBLYCACHEITEM_COMMIT_DISPOSITION_REFRESHED (2)") // overwrite, if existing cpp_quote("#define IASSEMBLYCACHEITEM_COMMIT_DISPOSITION_ALREADY_INSTALLED (3)") // existing, cpp_quote("// {8cedc215-ac4b-488b-93c0-a50a49cb2fb8}") cpp_quote("DEFINE_GUID(FUSION_REFCOUNT_UNINSTALL_SUBKEY_GUID, 0x8cedc215, 0xac4b, 0x488b, 0x93, 0xc0, 0xa5, 0x0a, 0x49, 0xcb, 0x2f, 0xb8);") cpp_quote("") cpp_quote("// {b02f9d65-fb77-4f7a-afa5-b391309f11c9}") cpp_quote("DEFINE_GUID(FUSION_REFCOUNT_FILEPATH_GUID, 0xb02f9d65, 0xfb77, 0x4f7a, 0xaf, 0xa5, 0xb3, 0x91, 0x30, 0x9f, 0x11, 0xc9);") cpp_quote("") cpp_quote("// {2ec93463-b0c3-45e1-8364-327e96aea856}") cpp_quote("DEFINE_GUID(FUSION_REFCOUNT_OPAQUE_STRING_GUID, 0x2ec93463, 0xb0c3, 0x45e1, 0x83, 0x64, 0x32, 0x7e, 0x96, 0xae, 0xa8, 0x56);") typedef struct _FUSION_INSTALL_REFERENCE_ { DWORD cbSize; DWORD dwFlags; GUID guidScheme; // contains one of the pre-defined guids. LPCWSTR szIdentifier; // unique identifier for app installing this assembly. LPCWSTR szNonCannonicalData; // data is description; relevent to the guid above } FUSION_INSTALL_REFERENCE, *LPFUSION_INSTALL_REFERENCE; typedef const struct _FUSION_INSTALL_REFERENCE_ *LPCFUSION_INSTALL_REFERENCE; /////////////////////////////////////////////////////////////////////////////// // // IAssemblyName // /////////////////////////////////////////////////////////////////////////////// [ local, object, uuid(CD193BC0-B4BC-11d2-9833-00C04FC31D2E), pointer_default(unique) ] interface IAssemblyName: IUnknown { typedef [unique] IAssemblyName *LPASSEMBLYNAME; typedef enum { ASM_NAME_PUBLIC_KEY = 0, ASM_NAME_PUBLIC_KEY_TOKEN, ASM_NAME_HASH_VALUE, ASM_NAME_NAME, ASM_NAME_MAJOR_VERSION, ASM_NAME_MINOR_VERSION, ASM_NAME_BUILD_NUMBER, ASM_NAME_REVISION_NUMBER, ASM_NAME_CULTURE, ASM_NAME_PROCESSOR_ID_ARRAY, ASM_NAME_OSINFO_ARRAY, ASM_NAME_HASH_ALGID, ASM_NAME_ALIAS, ASM_NAME_CODEBASE_URL, ASM_NAME_CODEBASE_LASTMOD, ASM_NAME_NULL_PUBLIC_KEY, ASM_NAME_NULL_PUBLIC_KEY_TOKEN, ASM_NAME_CUSTOM, ASM_NAME_NULL_CUSTOM, ASM_NAME_MVID, ASM_NAME_MAX_PARAMS } ASM_NAME; typedef enum { ASM_BINDF_FORCE_CACHE_INSTALL = 0x1, ASM_BINDF_RFS_INTEGRITY_CHECK = 0x2, ASM_BINDF_RFS_MODULE_CHECK = 0x4, ASM_BINDF_BINPATH_PROBE_ONLY = 0x8, ASM_BINDF_SHARED_BINPATH_HINT = 0x10, ASM_BINDF_PARENT_ASM_HINT = 0x20 } ASM_BIND_FLAGS; typedef enum { ASM_DISPLAYF_VERSION = 0x1, ASM_DISPLAYF_CULTURE = 0x2, ASM_DISPLAYF_PUBLIC_KEY_TOKEN = 0x4, ASM_DISPLAYF_PUBLIC_KEY = 0x8, ASM_DISPLAYF_CUSTOM = 0x10, ASM_DISPLAYF_PROCESSORARCHITECTURE = 0x20, ASM_DISPLAYF_LANGUAGEID = 0x40 } ASM_DISPLAY_FLAGS; typedef enum { ASM_CMPF_NAME = 0x1, ASM_CMPF_MAJOR_VERSION = 0x2, ASM_CMPF_MINOR_VERSION = 0x4, ASM_CMPF_BUILD_NUMBER = 0x8, ASM_CMPF_REVISION_NUMBER = 0x10, ASM_CMPF_PUBLIC_KEY_TOKEN = 0x20, ASM_CMPF_CULTURE = 0x40, ASM_CMPF_CUSTOM = 0x80, ASM_CMPF_ALL = ASM_CMPF_NAME | ASM_CMPF_MAJOR_VERSION | ASM_CMPF_MINOR_VERSION | ASM_CMPF_REVISION_NUMBER | ASM_CMPF_BUILD_NUMBER | ASM_CMPF_PUBLIC_KEY_TOKEN | ASM_CMPF_CULTURE | ASM_CMPF_CUSTOM, // For strongly named assemblies, ASM_CMPF_DEFAULT==ASM_CMPF_ALL. // For simply named assemblies, this is also true, however, when // performing IAssemblyName::IsEqual, the build number/revision // number will be removed from the comparision. ASM_CMPF_DEFAULT = 0x100 } ASM_CMP_FLAGS; HRESULT SetProperty( [in] DWORD PropertyId, [in] LPVOID pvProperty, [in] DWORD cbProperty); HRESULT GetProperty( [in] DWORD PropertyId, [out] LPVOID pvProperty, [in, out] LPDWORD pcbProperty); HRESULT Finalize(); HRESULT GetDisplayName( [out] LPOLESTR szDisplayName, [in, out] LPDWORD pccDisplayName, [in] DWORD dwDisplayFlags); HRESULT BindToObject( [in] REFIID refIID, [in] IAssemblyBindSink *pAsmBindSink, [in] IApplicationContext *pApplicationContext, [in] LPCOLESTR szCodeBase, [in] LONGLONG llFlags, [in] LPVOID pvReserved, [in] DWORD cbReserved, [out] LPVOID *ppv); HRESULT GetName( [in, out] LPDWORD lpcwBuffer, [out] WCHAR *pwzName); HRESULT GetVersion( [out] LPDWORD pdwVersionHi, [out] LPDWORD pdwVersionLow); HRESULT IsEqual( [in] IAssemblyName *pName, [in] DWORD dwCmpFlags); HRESULT Clone( [out] IAssemblyName **pName); } /////////////////////////////////////////////////////////////////////////////// // // IApplicationContext // /////////////////////////////////////////////////////////////////////////////// [ local, object, uuid(7c23ff90-33af-11d3-95da-00a024a85b51), pointer_default(unique) ] interface IApplicationContext: IUnknown { cpp_quote("// App context configuration variables") cpp_quote("#define ACTAG_APP_BASE_URL L\"APPBASE\"") cpp_quote("#define ACTAG_MACHINE_CONFIG L\"MACHINE_CONFIG\"") cpp_quote("#define ACTAG_APP_PRIVATE_BINPATH L\"PRIVATE_BINPATH\"") cpp_quote("#define ACTAG_APP_SHARED_BINPATH L\"SHARED_BINPATH\"") cpp_quote("#define ACTAG_APP_SNAPSHOT_ID L\"SNAPSHOT_ID\"") cpp_quote("#define ACTAG_APP_CONFIG_FILE L\"APP_CONFIG_FILE\"") cpp_quote("#define ACTAG_APP_ID L\"APPLICATION_ID\"") cpp_quote("#define ACTAG_APP_SHADOW_COPY_DIRS L\"SHADOW_COPY_DIRS\"") cpp_quote("#define ACTAG_APP_DYNAMIC_BASE L\"DYNAMIC_BASE\"") cpp_quote("#define ACTAG_APP_CACHE_BASE L\"CACHE_BASE\"") cpp_quote("#define ACTAG_APP_NAME L\"APP_NAME\"") cpp_quote("#define ACTAG_DEV_PATH L\"DEV_PATH\"") cpp_quote("#define ACTAG_HOST_CONFIG_FILE L\"HOST_CONFIG\"") cpp_quote("#define ACTAG_SXS_ACTIVATION_CONTEXT L\"SXS_ACTIVATION_CONTEXT\"") cpp_quote("#define ACTAG_APP_CFG_LOCAL_FILEPATH L\"APP_CFG_LOCAL_FILEPATH\"") cpp_quote("// App context flag overrides") cpp_quote("#define ACTAG_FORCE_CACHE_INSTALL L\"FORCE_CACHE_INSTALL\"") cpp_quote("#define ACTAG_RFS_INTEGRITY_CHECK L\"RFS_INTEGRITY_CHECK\"") cpp_quote("#define ACTAG_RFS_MODULE_CHECK L\"RFS_MODULE_CHECK\"") cpp_quote("#define ACTAG_BINPATH_PROBE_ONLY L\"BINPATH_PROBE_ONLY\"") typedef [unique] IApplicationContext *LPAPPLICATIONCONTEXT; typedef enum { APP_CTX_FLAGS_INTERFACE = 0x1 } APP_FLAGS; HRESULT SetContextNameObject( [in] LPASSEMBLYNAME pName); HRESULT GetContextNameObject( [out] LPASSEMBLYNAME * ppName); HRESULT Set( [in] LPCOLESTR szName, [in] LPVOID pvValue, [in] DWORD cbValue, [in] DWORD dwFlags); HRESULT Get( [in] LPCOLESTR szName, [out] LPVOID pvValue, [in, out] LPDWORD pcbValue, [in] DWORD dwFlags); HRESULT GetDynamicDirectory( [out] LPWSTR wzDynamicDir, [in, out] LPDWORD pdwSize); HRESULT GetAppCacheDirectory( [out] LPWSTR wzAppCacheDir, [in, out] LPDWORD pdwSize); HRESULT RegisterKnownAssembly( [in] IAssemblyName *pName, [in] LPCWSTR pwzAsmURL, [out] IAssembly **ppAsmOut); HRESULT PrefetchAppConfigFile(); HRESULT SxsActivateContext(ULONG_PTR *lpCookie); HRESULT SxsDeactivateContext(ULONG_PTR ulCookie); } /////////////////////////////////////////////////////////////////////////////// // // IAssembly // /////////////////////////////////////////////////////////////////////////////// [ local, object, uuid(ff08d7d4-04c2-11d3-94aa-00c04fc308ff), pointer_default(unique) ] interface IAssembly : IUnknown { typedef [unique] IAssembly *LPASSEMBLY; typedef enum { ASMLOC_UNKNOWN, ASMLOC_GAC, ASMLOC_DOWNLOAD_CACHE, ASMLOC_RUN_FROM_SOURCE } ASM_LOCATION; HRESULT GetAssemblyNameDef( [out] IAssemblyName **ppAssemblyName); HRESULT GetNextAssemblyNameRef( [in] DWORD nIndex, [out] IAssemblyName **ppAssemblyName); HRESULT GetNextAssemblyModule( [in] DWORD nIndex, [out] IAssemblyModuleImport **ppModImport); HRESULT GetModuleByName( [in] LPCOLESTR szModuleName, [out] IAssemblyModuleImport **ppModImport); HRESULT GetManifestModulePath( [out, size_is(*pccModulePath)] LPOLESTR szModulePath, [in, out] LPDWORD pccModulePath); HRESULT GetAssemblyPath( [out, size_is(*lpcwBuffer)] LPOLESTR pStr, [in, out] LPDWORD lpcwBuffer); HRESULT GetAssemblyLocation( [out] ASM_LOCATION *pAsmLocation); HRESULT GetFusionLoadContext( [out] IFusionLoadContext **ppLoadContext ); } /////////////////////////////////////////////////////////////////////////////// // // IAssemblyBindSink // /////////////////////////////////////////////////////////////////////////////// [ local, object, uuid(af0bc960-0b9a-11d3-95ca-00a024a85b51), pointer_default(unique) ] interface IAssemblyBindSink : IUnknown { typedef [unique] IAssemblyBindSink *LPASSEMBLY_BIND_SINK; typedef enum { ASM_NOTIFICATION_START, ASM_NOTIFICATION_PROGRESS, ASM_NOTIFICATION_SUSPEND, ASM_NOTIFICATION_ATTEMPT_NEXT_CODEBASE, ASM_NOTIFICATION_BIND_LOG, ASM_NOTIFICATION_DONE } ASM_NOTIFICATION; HRESULT OnProgress( [in] DWORD dwNotification, [in] HRESULT hrNotification, [in] LPCWSTR szNotification, [in] DWORD dwProgress, [in] DWORD dwProgressMax, [in] IUnknown *pUnk); } /////////////////////////////////////////////////////////////////////////////// // // IAssemblyBinding // /////////////////////////////////////////////////////////////////////////////// [ local, object, uuid(cfe52a80-12bd-11d3-95ca-00a024a85b51), pointer_default(unique) ] interface IAssemblyBinding : IUnknown { typedef [unique] IAssemblyBinding *LPASSEMBLY_BINDINDING; HRESULT Control( [in] HRESULT hrControl); HRESULT DoDefaultUI( [in] HWND hWnd, [in] DWORD dwFlags); } /////////////////////////////////////////////////////////////////////////////// // // IFusionBindLog // /////////////////////////////////////////////////////////////////////////////// [ local, object, uuid(67E9F87D-8B8A-4a90-9D3E-85ED5B2DCC83), pointer_default(unique) ] interface IFusionBindLog : IUnknown { HRESULT GetResultCode(); HRESULT GetBindLog ( [in] DWORD dwDetailLevel, [out] LPWSTR pwzDebugLog, [in, out] DWORD *pcbDebugLog ); } /////////////////////////////////////////////////////////////////////////////// // // IAssemblyManifestImport // /////////////////////////////////////////////////////////////////////////////// [ local, object, uuid( de9a68ba-0fa2-11d3-94aa-00c04fc308ff), pointer_default(unique) ] interface IAssemblyManifestImport: IUnknown { typedef [unique] IAssemblyManifestImport *LPASSEMBLY_MANIFEST_IMPORT; HRESULT GetAssemblyNameDef( [out] IAssemblyName **ppAssemblyName); HRESULT GetNextAssemblyNameRef( [in] DWORD nIndex, [out] IAssemblyName ** ppAssemblyName); HRESULT GetNextAssemblyModule( [in] DWORD nIndex, [out] IAssemblyModuleImport **ppImport); HRESULT GetModuleByName( [in] LPCOLESTR szModuleName, [out] IAssemblyModuleImport **ppModImport); HRESULT GetManifestModulePath( [out, size_is(*pccModulePath)] LPOLESTR szModulePath, [in, out] LPDWORD pccModulePath); } /////////////////////////////////////////////////////////////////////////////// // // IMetaDataAssemblyImportControl // /////////////////////////////////////////////////////////////////////////////// [ local, object, uuid(cc8529d9-f336-471b-b60a-c7c8ee9b8492), pointer_default(unique) ] interface IMetaDataAssemblyImportControl : IUnknown { HRESULT ReleaseMetaDataAssemblyImport( [out] IUnknown **ppUnk ); } /////////////////////////////////////////////////////////////////////////////// // // IAssemblyModuleImport // /////////////////////////////////////////////////////////////////////////////// [ local, object, uuid(da0cd4b0-1117-11d3-95ca-00a024a85b51), pointer_default(unique) ] interface IAssemblyModuleImport : IStream { typedef [unique] IAssemblyModuleImport *LPASSEMBLY_MODULE_IMPORT; HRESULT GetModuleName( [out, size_is(*pccModuleName)] LPOLESTR szModuleName, [in, out] LPDWORD pccModuleName); HRESULT GetHashAlgId( [out] LPDWORD pdwHashAlgId); HRESULT GetHashValue( [out, size_is(*pcbHashValue)] BYTE *pbHashValue, [in, out] LPDWORD pcbHashValue); HRESULT GetFlags( [out] LPDWORD pdwFlags); HRESULT GetModulePath( [out, size_is(*pccModulePath)] LPOLESTR szModulePath, [in, out] LPDWORD pccModulePath); BOOL IsAvailable(); HRESULT BindToObject( [in] IAssemblyBindSink *pBindSink, [in] IApplicationContext *pAppCtx, [in] LONGLONG llFlags, [out] LPVOID *ppv); } /////////////////////////////////////////////////////////////////////////////// // // IAssemblyCacheItem // /////////////////////////////////////////////////////////////////////////////// [ local, object, uuid(9e3aaeb4-d1cd-11d2-bab9-00c04f8eceae), pointer_default(unique) ] interface IAssemblyCacheItem : IUnknown { HRESULT CreateStream( [in] DWORD dwFlags, // For general API flags [in] LPCWSTR pszStreamName, // Name of the stream to be passed in [in] DWORD dwFormat, // format of the file to be streamed in. [in] DWORD dwFormatFlags, // format-specific flags [out] IStream **ppIStream, [in, optional] ULARGE_INTEGER *puliMaxSize // Max size of the Stream. ); HRESULT Commit ( [in] DWORD dwFlags, // For general API flags like IASSEMBLYCACHEITEM _COMMIT_FLAG_REFRESH [out, optional] ULONG *pulDisposition ); HRESULT AbortItem(); // If you have created IAssemblyCacheItem and don't plan to use it, its good idea to call AbortItem before releasing it. } /////////////////////////////////////////////////////////////////////////////// // // IAssemblyEnum // /////////////////////////////////////////////////////////////////////////////// [ local, object, uuid(21b8916c-f28e-11d2-a473-00c04f8ef448), pointer_default(unique) ] interface IAssemblyEnum : IUnknown { HRESULT GetNextAssembly ( [out] IApplicationContext **ppAppCtx, [out] IAssemblyName **ppName, [in] DWORD dwFlags ); HRESULT Reset(void); HRESULT Clone ( [out] IAssemblyEnum ** ppEnum ); } /////////////////////////////////////////////////////////////////////////////// // // IAssemblyScavenger // /////////////////////////////////////////////////////////////////////////////// [ local, object, uuid(21b8916c-f28e-11d2-a473-00ccff8ef448), pointer_default(unique) ] interface IAssemblyScavenger : IUnknown { HRESULT ScavengeAssemblyCache ( ); HRESULT GetCacheDiskQuotas ( [out] DWORD *pdwZapQuotaInGAC, [out] DWORD *pdwDownloadQuotaAdmin, [out] DWORD *pdwDownloadQuotaUser ); HRESULT SetCacheDiskQuotas ( [in] DWORD dwZapQuotaInGAC, [in] DWORD dwDownloadQuotaAdmin, [in] DWORD dwDownloadQuotaUser ); HRESULT GetCurrentCacheUsage ( [out] DWORD *dwZapUsage, [out] DWORD *dwDownloadUsage ); } /////////////////////////////////////////////////////////////////////////////// // // IAssemblyCache // /////////////////////////////////////////////////////////////////////////////// [ local, object, uuid(e707dcde-d1cd-11d2-bab9-00c04f8eceae), pointer_default(unique) ] interface IAssemblyCache : IUnknown { HRESULT UninstallAssembly( [in] DWORD dwFlags, [in] LPCWSTR pszAssemblyName, [in] LPCFUSION_INSTALL_REFERENCE pRefData, [out, optional] ULONG *pulDisposition ); HRESULT QueryAssemblyInfo( [in] DWORD dwFlags, [in] LPCWSTR pszAssemblyName, [in, out] ASSEMBLY_INFO *pAsmInfo ); HRESULT CreateAssemblyCacheItem( [in] DWORD dwFlags, [in] PVOID pvReserved, [out] IAssemblyCacheItem **ppAsmItem, [in, optional] LPCWSTR pszAssemblyName // uncanonicalized, comma separted name=value pairs. ); HRESULT CreateAssemblyScavenger ( [out] IAssemblyScavenger **ppAsmScavenger ); HRESULT InstallAssembly( // if you use this, fusion will do the streaming & commit. [in] DWORD dwFlags, [in] LPCWSTR pszManifestFilePath, [in] LPCFUSION_INSTALL_REFERENCE pRefData ); } /////////////////////////////////////////////////////////////////////////////// // // IHistoryAssembly // /////////////////////////////////////////////////////////////////////////////// [ local, object, uuid(e6096a07-e188-4a49-8d50-2a0172a0d205), pointer_default(unique) ] interface IHistoryAssembly : IUnknown { HRESULT GetAssemblyName ( [out] LPWSTR wzAsmName, [in, out] DWORD *pdwSize ); HRESULT GetPublicKeyToken ( [out] LPWSTR wzPublicKeyToken, [in, out] DWORD *pdwSize ); HRESULT GetCulture ( [out] LPWSTR wzCulture, [in, out] DWORD *pdwSize ); HRESULT GetReferenceVersion ( [out] LPWSTR wzVerRef, [in, out] DWORD *pdwSize ); HRESULT GetActivationDate ( [out] LPWSTR wzActivationDate, [in, out] DWORD *pdwSize ); HRESULT GetAppCfgVersion ( [out] LPWSTR pwzVerAppCfg, [in, out] DWORD *pdwSize ); HRESULT GetPublisherCfgVersion ( [out] LPWSTR pwzVerPublisherCfg, [in, out] DWORD *pdwSize ); HRESULT GetAdminCfgVersion ( [out] LPWSTR pwzAdminCfg, [in, out] DWORD *pdwSize ); } /////////////////////////////////////////////////////////////////////////////// // // IHistoryReader // /////////////////////////////////////////////////////////////////////////////// [ local, object, uuid(1d23df4d-a1e2-4b8b-93d6-6ea3dc285a54), pointer_default(unique) ] interface IHistoryReader : IUnknown { HRESULT GetFilePath ( [out] LPWSTR wzFilePath, [in, out] DWORD *pdwSize ); HRESULT GetApplicationName ( [out] LPWSTR wzAppName, [in, out] DWORD *pdwSize ); HRESULT GetEXEModulePath ( [out] LPWSTR wzExePath, [in, out] DWORD *pdwSize ); HRESULT GetNumActivations ( [out] DWORD *pdwNumActivations ); HRESULT GetActivationDate ( [in] DWORD dwIdx, [out] FILETIME *pftDate ); HRESULT GetRunTimeVersion ( [in] FILETIME *pftActivationDate, [out] LPWSTR wzRunTimeVersion, [in, out] DWORD *pdwSize ); HRESULT GetNumAssemblies ( [in] FILETIME *pftActivationDate, [out] DWORD *pdwNumAsms ); HRESULT GetHistoryAssembly ( [in] FILETIME *pftActivationDate, [in] DWORD dwIdx, [out] IHistoryAssembly **ppHistAsm ); } typedef enum { CANOF_PARSE_DISPLAY_NAME = 0x1, CANOF_SET_DEFAULT_VALUES = 0x2 } CREATE_ASM_NAME_OBJ_FLAGS; typedef enum { ASM_CACHE_ZAP = 0x1, ASM_CACHE_GAC = 0x2, ASM_CACHE_DOWNLOAD = 0x4 } ASM_CACHE_FLAGS; /////////////////////////////////////////////////////////////////////////////// // // IFusionLoadContext // /////////////////////////////////////////////////////////////////////////////// typedef enum { LOADCTX_TYPE_DEFAULT, LOADCTX_TYPE_LOADFROM, } LOADCTX_TYPE; [ local, object, uuid(022AB2BA-7367-49fc-A1C5-0E7CC037CAAB), pointer_default(unique) ] interface IFusionLoadContext : IUnknown { LOADCTX_TYPE GetContextType(); } #pragma midl_echo("STDAPI CreateHistoryReader(LPCWSTR wzFilePath, IHistoryReader **ppHistReader);") #pragma midl_echo("STDAPI LookupHistoryAssembly(LPCWSTR pwzFilePath, FILETIME *pftActivationDate, LPCWSTR pwzAsmName, LPCWSTR pwzPublicKeyToken, LPCWSTR wzCulture, LPCWSTR pwzVerRef, IHistoryAssembly **pHistAsm);") #pragma midl_echo("STDAPI GetHistoryFileDirectory(LPWSTR wzDir, DWORD *pdwSize);") // Publically exported functions from fusion.dll #pragma midl_echo("STDAPI AddAssemblyToCacheW(HWND hwnd, HINSTANCE hinst, LPWSTR lpszCmdLine, int nCmdShow);") #pragma midl_echo("STDAPI AddAssemblyToCacheA(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow);") #pragma midl_echo("STDAPI RemoveAssemblyFromCacheW(HWND hwnd, HINSTANCE hinst, LPWSTR lpszCmdLine, int nCmdShow);") #pragma midl_echo("STDAPI RemoveAssemblyFromCacheA(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow);") #pragma midl_echo("STDAPI CreateAssemblyNameObject(LPASSEMBLYNAME *ppAssemblyNameObj, LPCWSTR szAssemblyName, DWORD dwFlags, LPVOID pvReserved); ") #pragma midl_echo("STDAPI CreateApplicationContext(IAssemblyName *pName, LPAPPLICATIONCONTEXT *ppCtx); ") #pragma midl_echo("STDAPI CreateAssemblyCache(IAssemblyCache **ppAsmCache, DWORD dwReserved); ") #pragma midl_echo("STDAPI CreateAssemblyEnum(IAssemblyEnum **pEnum, IApplicationContext *pAppCtx, IAssemblyName *pName, DWORD dwFlags, LPVOID pvReserved); ") #pragma midl_echo("STDAPI SetSchemaVersion(DWORD dwNewMinorVersion, DWORD dwCacheId, BOOL fIsNameRes); ") #pragma midl_echo("HRESULT GetCachePath(ASM_CACHE_FLAGS dwCacheFlags, LPWSTR pwzCachePath, PDWORD pcchPath); ") #pragma midl_echo("STDAPI PreBindAssembly(IApplicationContext *pAppCtx, IAssemblyName *pName, IAssembly *pAsmParent, IAssemblyName **ppNamePostPolicy, LPVOID pvReserved); ") // Flags for the shfusion.dll init routine typedef enum { SH_INIT_FOR_GLOBAL, SH_INIT_FOR_USER } SH_INIT_FLAGS; cpp_quote("#endif")