diff options
Diffstat (limited to 'src/inc/fusionpriv.idl')
-rw-r--r-- | src/inc/fusionpriv.idl | 974 |
1 files changed, 974 insertions, 0 deletions
diff --git a/src/inc/fusionpriv.idl b/src/inc/fusionpriv.idl new file mode 100644 index 0000000000..42c7f4234c --- /dev/null +++ b/src/inc/fusionpriv.idl @@ -0,0 +1,974 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. +// +//+--------------------------------------------------------------------------- +// +// Microsoft Windows +// File: fusionpriv.idl +// +// Contents: Fusion Interfaces +// +// Classes: +// +// Functions: +// +// +//---------------------------------------------------------------------------- +cpp_quote("//=--------------------------------------------------------------------------=") +cpp_quote("// fusionpriv.h") +cpp_quote("//=--------------------------------------------------------------------------=") +cpp_quote("// Copyright (c) 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("#ifdef _MSC_VER") +cpp_quote("#pragma comment(lib,\"uuid.lib\")") +cpp_quote("#endif") +cpp_quote("") +cpp_quote("//---------------------------------------------------------------------------=") +cpp_quote("// Fusion Interfaces.") +cpp_quote("") + +cpp_quote("#if defined(_CLR_BLD) && !defined(FEATURE_FUSION)") +cpp_quote("#error FEATURE_FUSION is not enabled, please do not include fusionpriv.h") +cpp_quote("#endif") + + +import "objidl.idl"; +import "oleidl.idl"; +import "fusion.idl"; + +#ifndef FEATURE_CORECLR +import "binderngen.idl"; +#endif + +cpp_quote("#ifdef _MSC_VER") +cpp_quote("#pragma once") +cpp_quote("#endif") + +interface IAssembly; +interface IAssemblyBindSink; +interface IAssemblyBinding; +interface IAssemblyManifestImport; +interface IAssemblyModuleImport; +interface IAssemblyBindingClosure; + +interface IAssemblyNameBinder; +interface IHistoryAssembly; +interface IHistoryReader; +interface IFusionBindLog; + +interface IAssemblyScavenger; + +interface IHostAssembly; +interface IHostAssemblyModuleImport; + +interface IMetaDataAssemblyImport; +#pragma midl_echo("struct IMetaDataAssemblyImport;") + +struct AssemblyReferenceClosureWalkContextForProfAPI; + +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_IHistoryAssembly; ") +cpp_quote("EXTERN_C const IID IID_IHistoryReader; ") +cpp_quote("EXTERN_C const IID IID_IMetaDataAssemblyImportControl; ") + +cpp_quote("EXTERN_C const IID IID_IAssemblyScavenger; ") + +cpp_quote("EXTERN_C const IID IID_IHostAssembly; ") +cpp_quote("EXTERN_C const IID IID_IHostAssemblyModuleImport; ") +// +// Bind flags for IAssemblyName::BindToObject +// +// External caller of IAssemblyName::BindToObject should only use ASM_BINDF_PARENT_ASM_HINT/ASM_BINDF_NONE/ASM_BINDF_INSPECTION_ONLY. +// The rest is used internally by fusion. They can(and should) be set via IApplicationContext::Set. +// +typedef enum +{ + ASM_BINDF_NONE = 0x0, + 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_BINDF_DISALLOW_APPLYPUBLISHERPOLICY = 0x40, + ASM_BINDF_DISALLOW_APPBINDINGREDIRECTS = 0x80, + ASM_BINDF_DISABLE_FX_UNIFICATION = 0x100, + ASM_BINDF_DO_NOT_PROBE_NATIVE_IMAGE = 0x200, + ASM_BINDF_DISABLE_DOWNLOAD = 0x400, + ASM_BINDF_INSPECTION_ONLY = 0x800, + ASM_BINDF_DISALLOW_APP_BASE_PROBING = 0x1000, + ASM_BINDF_SUPPRESS_SECURITY_CHECKS = 0x2000 +} ASM_BIND_FLAGS; + +typedef enum tagDEVOVERRIDEMODE { + DEVOVERRIDE_LOCAL = 0x1, + DEVOVERRIDE_GLOBAL = 0x2 +} DEVOVERRIDEMODE; + +typedef enum tagWALK_LEVEL +{ + LEVEL_STARTING, // only basic info + LEVEL_WINRTCHECK, // WinRT specific checks + LEVEL_GACCHECK, // until find something outside of the GAC + LEVEL_COMPLETE, // no reason to request higher than this + LEVEL_FXPREDICTED, // full walk, but FX assemblies were predicted + LEVEL_FXPROBED // full walk, but FX assemblies could not be predicted +} WALK_LEVEL; + +/////////////////////////////////////////////////////////////////////////////// +// +// IHistoryAssembly +// +/////////////////////////////////////////////////////////////////////////////// +[ + local, + object, + uuid(e6096a07-e188-4a49-8d50-2a0172a0d205), + pointer_default(unique) +] +interface IHistoryAssembly : IUnknown +{ + HRESULT GetAssemblyName + ( + [out, annotation("__out")] LPWSTR wzAsmName, + [in, out, annotation("__inout")] DWORD *pdwSize + ); + + HRESULT GetPublicKeyToken + ( + [out, annotation("__out")] LPWSTR wzPublicKeyToken, + [in, out, annotation("__inout")] DWORD *pdwSize + ); + + HRESULT GetCulture + ( + [out, annotation("__out")] LPWSTR wzCulture, + [in, out, annotation("__inout")] DWORD *pdwSize + ); + + HRESULT GetReferenceVersion + ( + [out, annotation("__out")] LPWSTR wzVerRef, + [in, out, annotation("__inout")] DWORD *pdwSize + ); + + HRESULT GetActivationDate + ( + [out, annotation("__out")] LPWSTR wzActivationDate, + [in, out, annotation("__inout")] DWORD *pdwSize + ); + + HRESULT GetAppCfgVersion + ( + [out, annotation("__out")] LPWSTR pwzVerAppCfg, + [in, out, annotation("__inout")] DWORD *pdwSize + ); + + HRESULT GetPublisherCfgVersion + ( + [out, annotation("__out")] LPWSTR pwzVerPublisherCfg, + [in, out, annotation("__inout")] DWORD *pdwSize + ); + + HRESULT GetAdminCfgVersion + ( + [out, annotation("__out")] LPWSTR pwzAdminCfg, + [in, out, annotation("__inout")] DWORD *pdwSize + ); +} + +/////////////////////////////////////////////////////////////////////////////// +// +// IHistoryReader +// +/////////////////////////////////////////////////////////////////////////////// +[ + local, + object, + uuid(1d23df4d-a1e2-4b8b-93d6-6ea3dc285a54), + pointer_default(unique) +] +interface IHistoryReader : IUnknown +{ + HRESULT GetFilePath + ( + [out, annotation("__out")] LPWSTR wzFilePath, + [in, out, annotation("__inout")] DWORD *pdwSize + ); + + HRESULT GetApplicationName + ( + [out, annotation("__out")] LPWSTR wzAppName, + [in, out, annotation("__inout")] DWORD *pdwSize + ); + + HRESULT GetEXEModulePath + ( + [out, annotation("__out")] LPWSTR wzExePath, + [in, out, annotation("__inout")] DWORD *pdwSize + ); + + + HRESULT GetNumActivations + ( + [out] DWORD *pdwNumActivations + ); + + HRESULT GetActivationDate + ( + [in] DWORD dwIdx, + [out] FILETIME *pftDate + ); + + HRESULT GetRunTimeVersion + ( + [in] FILETIME *pftActivationDate, + [out, annotation("__out")] LPWSTR wzRunTimeVersion, + [in, out, annotation("__inout")] DWORD *pdwSize + ); + + HRESULT GetNumAssemblies + ( + [in] FILETIME *pftActivationDate, + [out] DWORD *pdwNumAsms + ); + + HRESULT GetHistoryAssembly + ( + [in] FILETIME *pftActivationDate, + [in] DWORD dwIdx, + [out] IHistoryAssembly **ppHistAsm + ); +} + +typedef enum { + LOADCTX_TYPE_DEFAULT, + LOADCTX_TYPE_LOADFROM, + LOADCTX_TYPE_UNKNOWN, + LOADCTX_TYPE_HOSTED, // Assembly bind was provided by hosted binder. +} LOADCTX_TYPE; + +// Log for normal assembly binding +cpp_quote("#define FUSION_BIND_LOG_CATEGORY_DEFAULT 0") +// Log for native image binding +cpp_quote("#define FUSION_BIND_LOG_CATEGORY_NGEN 1") +// max entry for bind log kinds. Should always point to the biggest one +cpp_quote("#define FUSION_BIND_LOG_CATEGORY_MAX 2") + +/////////////////////////////////////////////////////////////////////////////// +// +// IFusionBindLog +// +/////////////////////////////////////////////////////////////////////////////// + +[ + local, + object, + uuid(67E9F87D-8B8A-4a90-9D3E-85ED5B2DCC83), + pointer_default(unique) +] +interface IFusionBindLog : IUnknown +{ + HRESULT SetResultCode + ( + [in] DWORD dwLogCategory, + [in] HRESULT hr + ); + + HRESULT GetResultCode + ( + [in] DWORD dwLogCategory, + [out] HRESULT *pHr + ); + + HRESULT GetBindLog + ( + [in] DWORD dwDetailLevel, + [in] DWORD dwLogCategory, + [out, annotation("__out_opt")] LPWSTR pwzDebugLog, + [in, out, annotation("__inout")] DWORD *pcbDebugLog + ); + + HRESULT LogMessage + ( + [in] DWORD dwDetailLevel, + [in] DWORD dwLogCategory, + [in] LPCWSTR pwzDebugLog + ); + + HRESULT Flush + ( + [in] DWORD dwDetailLevel, + [in] DWORD dwLogCategory + ); + + HRESULT GetBindingID + ( + [out] ULONGLONG *pullBindingID + ); + + HRESULT ETWTraceLogMessage + ( + [in] DWORD dwETWLogCategory, + [in] IAssemblyName *pAsm + ); +} + +/////////////////////////////////////////////////////////////////////////////// +// +// 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), annotation("__out_ecount_full(*pccModulePath)")] LPOLESTR szModulePath, + [in, out] LPDWORD pccModulePath); + + HRESULT GetInternalMDImport( + [out] IMetaDataAssemblyImport **ppMDImport); + + HRESULT LoadDataFromMDImport( + [in] IMetaDataAssemblyImport *ppMDImport); +} + +/////////////////////////////////////////////////////////////////////////////// +// +// 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\"") + cpp_quote("#define ACTAG_APP_CFG_LOCAL_FILEPATH L\"APP_CFG_LOCAL_FILEPATH\"") + cpp_quote("#define ACTAG_ZAP_STRING L\"ZAP_STRING\"") + cpp_quote("#define ACTAG_ZAP_CONFIG_FLAGS L\"ZAP_CONFIG_FLAGS\"") + cpp_quote("#define ACTAG_APP_DOMAIN_ID L\"APPDOMAIN_ID\"") + cpp_quote("#define ACTAG_APP_CONFIG_BLOB L\"APP_CONFIG_BLOB\"") + cpp_quote("#define ACTAG_FX_ONLY L\"FX_ONLY\"") + + 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\"") + cpp_quote("#define ACTAG_DISALLOW_APPLYPUBLISHERPOLICY L\"DISALLOW_APP\"") + cpp_quote("#define ACTAG_DISALLOW_APP_BINDING_REDIRECTS L\"DISALLOW_APP_REDIRECTS\"") + cpp_quote("#define ACTAG_DISALLOW_APP_BASE_PROBING L\"DISALLOW_APP_BASE_PROBING\"") + cpp_quote("#define ACTAG_CODE_DOWNLOAD_DISABLED L\"CODE_DOWNLOAD_DISABLED\"") + cpp_quote("#define ACTAG_DISABLE_FX_ASM_UNIFICATION L\"DISABLE_FX_ASM_UNIFICATION\"") + + 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, annotation("__out_ecount_opt(*pdwSize)")] LPWSTR wzDynamicDir, + [in, out] LPDWORD pdwSize); + + HRESULT GetAppCacheDirectory( + [out, annotation("__out_ecount_opt(*pdwSize)")] LPWSTR wzAppCacheDir, + [in, out] LPDWORD pdwSize); + + HRESULT RegisterKnownAssembly( + [in] IAssemblyName *pName, + [in] LPCWSTR pwzAsmURL, + [out] IAssembly **ppAsmOut); + + HRESULT PrefetchAppConfigFile(); + + // This will give a IAssemblyBindingClosure object without really walking + // the closure. Any of the APIs on IAssemblyBindingClosure may trigger a + // real walking. + // + // This closure is not cached in fusion. Caller is responsible to cache the closure. + // + // pUnk is the result of a previous bind within the same application context. + // It could be IHostAssembly or IAssembly. The assembly has to be strongly named. + // + // dwSharingFlags cannot be 0 now. + HRESULT GetAssemblyBindingClosure( + [in] IUnknown *pUnk, + [in] LPCWSTR pwzNativeImagePath, + [out] IAssemblyBindingClosure **ppAsmClosure + ); +} + +[ + local, + object, + uuid(56972d9d-0f6c-47de-a038-e82d5de3a777), + pointer_default(unique) +] +interface IAssemblyNameBinder : IUnknown +{ + HRESULT BindToObject( + [in] REFIID refIID, + [in] IUnknown *pUnkSink, + [in] IUnknown *pUnkContext, + [in] LPCOLESTR szCodeBase, + [in] LONGLONG llFlags, + [in] LPVOID pParentAssembly, + [in] DWORD cbReserved, + [out] LPVOID *ppv, + [out] LPVOID *ppvNI); +} + +/////////////////////////////////////////////////////////////////////////////// +// +// IAssembly +// +/////////////////////////////////////////////////////////////////////////////// +[ + local, + object, + uuid(ff08d7d4-04c2-11d3-94aa-00c04fc308ff), + pointer_default(unique) +] +interface IAssembly : IUnknown +{ + typedef [unique] IAssembly *LPASSEMBLY; + + cpp_quote("#define ASMLOC_LOCATION_MASK 0x0000001B") + cpp_quote("#define ASMLOC_UNKNOWN 0x00000000") + cpp_quote("#define ASMLOC_GAC 0x00000001") + cpp_quote("#define ASMLOC_DOWNLOAD_CACHE 0x00000002") + cpp_quote("#define ASMLOC_RUN_FROM_SOURCE 0x00000003") + cpp_quote("#define ASMLOC_CODEBASE_HINT 0x00000004") + cpp_quote("#define ASMLOC_ZAP 0x00000008") + cpp_quote("#define ASMLOC_DEV_OVERRIDE 0x00000010") + + 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), annotation("__out_ecount_full_opt(*pccModulePath)")] LPOLESTR szModulePath, + [in, out] LPDWORD pccModulePath); + + HRESULT GetAssemblyPath( + [out, size_is(*lpcwBuffer), annotation("__out_ecount_full_opt(*lpcwBuffer)")] LPOLESTR pStr, + [in, out] LPDWORD lpcwBuffer); + + HRESULT GetAssemblyLocation( + [out] DWORD *pdwAsmLocation); + + LOADCTX_TYPE GetFusionLoadContext(); + + HRESULT GetNextHardBoundDependency( + [in] DWORD dwIndex, + [out] IAssembly **ppILAsm, + [out] IAssembly **ppNIAsm); +} + +/////////////////////////////////////////////////////////////////////////////// +// +// IAssemblyBindingClosureEnumerator +// +/////////////////////////////////////////////////////////////////////////////// +[ + local, + object, + uuid(b3f1e4ed-cb09-4b85-9a1b-6809582f1ebc), + pointer_default(unique) +] +interface IAssemblyBindingClosureEnumerator : IUnknown +{ + // Get the next assembly in the closure's path + HRESULT GetNextAssemblyPath( + [out] LPCOLESTR *ppPath, + [out] LPCOLESTR *ppniPath); +} + +/////////////////////////////////////////////////////////////////////////////// +// +// IAssemblyBindingClosure +// +/////////////////////////////////////////////////////////////////////////////// +[ + local, + object, + uuid(415c226a-e513-41ba-9651-9c48e97aa5de), + pointer_default(unique) +] +interface IAssemblyBindingClosure : IUnknown +{ + // Test if all the assemblies in the closure are in GAC. + // return: + // S_OK all assemblies are in GAC. + // S_FALSE not all assemblies are in GAC. + // otherwise failure. + HRESULT IsAllAssembliesInGAC(); + + // Test to see if two closures are semantically the same + // under the specified sharing context. + // return: + // S_OK Equal. + // S_FALSE Not Equal. + // otherwise failure. + HRESULT IsEqual( + [in] IAssemblyBindingClosure *pAssemblyClosure + ); + + HRESULT GetNextFailureAssembly( + [in] DWORD dwIndex, + [out] IAssemblyName **ppName, + [out] HRESULT *pHResult); + + // ensure enough data is available + HRESULT EnsureWalked( + [in] IUnknown *pStartingAssembly, + [in] IApplicationContext *pAppCtx, + [in] WALK_LEVEL level); + + // Iterate over assembly paths in the closure + HRESULT EnumerateAssemblies( + [out] IAssemblyBindingClosureEnumerator **ppEnumerator); + + HRESULT HasBeenWalked([in] WALK_LEVEL level); + + // Test if the assembly might have unknonwn dependecies because of WinRT + // return: + // S_OK May. + // S_FALSE No, all dependecies are traceable or FX. + // otherwise failure. + HRESULT MayHaveUnknownDependencies(); + + + // The closure walker asks the profiler (when present) for any additional + // assembly references the profiler wishes to add. This method is then called + // back by the profiler for each such assembly reference. + HRESULT AddProfilerAssemblyReference( + [in] LPVOID pbPublicKeyOrToken, + [in] ULONG cbPublicKeyOrToken, + [in] LPCWSTR szName, + [in] LPVOID pMetaData, + [in] void *pbHashValue, + [in] ULONG cbHashValue, + [in] DWORD dwAssemblyRefFlags, + [in] struct AssemblyReferenceClosureWalkContextForProfAPI * pContext); +} + +/////////////////////////////////////////////////////////////////////////////// +// +// IAssemblyBindSink +// +/////////////////////////////////////////////////////////////////////////////// +[ + local, + object, + uuid(af0bc960-0b9a-11d3-95ca-00a024a85b51), + pointer_default(unique) +] +interface IAssemblyBindSink : IUnknown +{ + typedef [unique] IAssemblyBindSink *LPASSEMBLY_BIND_SINK; + + typedef struct _tagFusionBindInfo + { + IFusionBindLog *pdbglog; + IAssemblyName *pNamePolicy; + DWORD dwPoliciesApplied; + } FusionBindInfo; + + typedef enum + { + ASM_NOTIFICATION_START, + ASM_NOTIFICATION_PROGRESS, + ASM_NOTIFICATION_SUSPEND, + ASM_NOTIFICATION_ATTEMPT_NEXT_CODEBASE, + ASM_NOTIFICATION_BIND_INFO, + ASM_NOTIFICATION_DONE, + ASM_NOTIFICATION_NATIVE_IMAGE_DONE + } ASM_NOTIFICATION; + + + HRESULT OnProgress( + [in] DWORD dwNotification, + [in] HRESULT hrNotification, + [in] LPCWSTR szNotification, + [in] DWORD dwProgress, + [in] DWORD dwProgressMax, + [in] LPVOID pvBindInfo, + [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); +} + +/////////////////////////////////////////////////////////////////////////////// +// +// 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), annotation("__out_ecount_full_opt(*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), annotation("__out_ecount_full_opt(*pccModulePath)")] LPOLESTR szModulePath, + [in, out] LPDWORD pccModulePath); + + BOOL IsAvailable(); + + HRESULT BindToObject( + [in] IAssemblyBindSink *pBindSink, + [in] IApplicationContext *pAppCtx, + [in] LONGLONG llFlags, + [out] LPVOID *ppv); +} + + +/////////////////////////////////////////////////////////////////////////////// +// +// 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 + ); +} + + +/////////////////////////////////////////////////////////////////////////////// + +[ + local, + object, + uuid(D8FB9BD6-3969-11d3-B4AF-00C04F8ECB26), + pointer_default(unique) +] +interface ICodebaseList : IUnknown +{ + HRESULT AddCodebase + ( + [in] LPCWSTR wzCodebase, + [in] DWORD dwFlags + ); + + HRESULT RemoveCodebase + ( + [in] DWORD dwIndex + ); + + HRESULT RemoveAll(); + + HRESULT GetCount + ( + [out] DWORD *pdwCount + ); + + HRESULT GetCodebase + ( + [in] DWORD dwIndex, + [out] DWORD *pdwFlags, + [out, annotation("__out_ecount_opt(*pcbCodebase)")] + LPWSTR wzCodebase, + [in, out] DWORD *pcbCodebase + ); +} + +[ + local, + object, + uuid(0A6F16F8-ACD7-11d3-B4ED-00C04F8ECB26), + pointer_default(unique) +] +interface IDownloadMgr : IUnknown +{ + HRESULT PreDownloadCheck + ( + [out] void **ppv, + [out] void **ppvNI + ); + + HRESULT DoSetup + ( + [in] LPCWSTR wzSourceUrl, + [in] LPCWSTR wzFilePath, + [in] const FILETIME *pftLastMod, + [out] IUnknown **ppUnk, + [out] IUnknown **ppAsmNI + ); + + HRESULT ProbeFailed + ( + [out] IUnknown **ppUnk + ); + + HRESULT IsDuplicate + ( + [out] IDownloadMgr *ppDLMgr + ); + + HRESULT LogResult(); + + HRESULT DownloadEnabled + ( + [out] BOOL *pbEnabled + ); + + HRESULT GetBindInfo + ( + [out] FusionBindInfo *pBindInfo + ); + + HRESULT CacheBindingResult + ( + [in] HRESULT hrResult + ); +} + + +[ + local, + object, + uuid(711f7c2d-8234-4505-b02f-7554f46cbf29), + pointer_default(unique) +] +interface IHostAssembly : IUnknown +{ + typedef [unique] IHostAssembly *LPHOSTASSEMBLY; + + HRESULT GetAssemblyNameDef( + [out] IAssemblyName **ppAssemblyName); + + HRESULT GetNextAssemblyNameRef( + [in] DWORD nIndex, + [out] IAssemblyName **ppAssemblyName); + + HRESULT GetNextAssemblyModule( + [in] DWORD nIndex, + [out] IHostAssemblyModuleImport **ppModImport); + + HRESULT GetModuleByName( + [in] LPCOLESTR szModuleName, + [out] IHostAssemblyModuleImport **ppModImport); + + // Always release the copy in fusion + HRESULT GetAssemblyStream( + [out] IStream **ppStreamAsm); + + HRESULT GetAssemblyId( + [out] UINT64 *pAssemblyId); + + // Always release the copy in fusion + HRESULT GetAssemblyDebugStream( + [out] IStream **ppDebugStream); + + LOADCTX_TYPE GetFusionLoadContext( + ); + + HRESULT GetAssemblyContext( + [out] UINT64 *pdwAssemblyContext); +} + +[ + local, + object, + uuid(b6f2729d-6c0f-4944-b692-e5a2ce2c6e7a), + pointer_default(unique) +] +interface IHostAssemblyModuleImport : IUnknown +{ + typedef [unique] IHostAssemblyModuleImport *LPHOSTASSEMBLY_MODULE_IMPORT; + + HRESULT GetModuleName( + [out, size_is(*pccModuleName), annotation("__out_ecount_full(*pccModuleName)")] LPOLESTR szModuleName, + [in, out] LPDWORD pccModuleName); + + HRESULT GetModuleStream( + [out] IStream **ppStreamModule); + + HRESULT GetModuleId( + [out] DWORD *pdwModuleId); + + HRESULT GetModuleDebugStream( + [out] IStream **ppDebugStream); +} + + +#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(__out_ecount_opt(*pdwSize) LPWSTR wzDir, DWORD *pdwSize);") +#pragma midl_echo("STDAPI PreBindAssembly(IApplicationContext *pAppCtx, IAssemblyName *pName, IAssembly *pAsmParent, IAssemblyName **ppNamePostPolicy, LPVOID pvReserved); ") + +#pragma midl_echo("STDAPI CreateApplicationContext(IAssemblyName *pName, LPAPPLICATIONCONTEXT *ppCtx); ") +#pragma midl_echo("STDAPI IsRetargetableAssembly(IAssemblyName *pName, BOOL *pbIsRetargetable); ") +#pragma midl_echo("STDAPI IsOptionallyRetargetableAssembly(IAssemblyName *pName, BOOL *pbIsRetargetable); ") + + +cpp_quote("#define EXPLICITBIND_FLAGS_NON_BINDABLE 0x0") +cpp_quote("#define EXPLICITBIND_FLAGS_EXE 0x1") + +#ifndef FEATURE_CORECLR +#pragma midl_echo("HRESULT BindToSystem(IAssemblyName *pNameSystem, LPCWSTR pcwzSystemDirectory, IUnknown *pNIEva, IApplicationContext *pAppCtx, IAssembly **ppAsmOut, IBindResult **ppNIAsmOut, IFusionBindLog **ppdbglog);") + +#pragma midl_echo("HRESULT ExplicitBind(LPCWSTR wzPath, IApplicationContext *pAppCtx, DWORD dwFlags, IUnknown *pNIEva, IAssembly **ppAsmOut, IBindResult **ppNIAsmOut, IFusionBindLog **ppdbglog);") + +#pragma midl_echo("HRESULT GetBindContextFromApplicationContext(IApplicationContext *pAppCtx, IBindContext **ppBindCtx);") + +#pragma midl_echo("HRESULT SetApplicationContext_WinRTBinder(IApplicationContext * pAppCtx, IBindContext * pWinRTBinder);") + +// Used by InstallNativeImage() to extract dependency names from the NI's CORCOMPILE_DEPENDENCY_INFO records. +#pragma midl_echo("STDAPI FusionGetAssemblyNameRefFromMDImport(IMetaDataAssemblyImport *pMDImport, /* This is really an mdAssemblyRef */ DWORD mdar, DWORD dwFlags, IAssemblyName **ppName);") + +#endif //!FEATURE_CORECLR |