diff options
Diffstat (limited to 'src/vm/pefile.h')
-rw-r--r-- | src/vm/pefile.h | 322 |
1 files changed, 1 insertions, 321 deletions
diff --git a/src/vm/pefile.h b/src/vm/pefile.h index 413d08c185..b7c7bd3e7c 100644 --- a/src/vm/pefile.h +++ b/src/vm/pefile.h @@ -26,11 +26,6 @@ #include "loaderheap.h" #include "sstring.h" #include "ex.h" -#ifdef FEATURE_FUSION -#include <fusion.h> -#include <fusionbind.h> -#include "binderngen.h" -#endif #include "assemblyspecbase.h" #include "eecontract.h" #include "metadatatracker.h" @@ -141,14 +136,6 @@ private: public: void LoadLibrary(BOOL allowNativeSkip = TRUE); -#ifdef FEATURE_MIXEDMODE -protected: - // Returns TRUE if this file references managed CRT (msvcmNN*). - BOOL ReferencesManagedCRT(); - - // Checks for unsupported loads of C++/CLI assemblies into multiple runtimes in this process. - void CheckForDisallowedInProcSxSLoad(); -#endif // FEATURE_MIXEDMODE private: void CheckForDisallowedInProcSxSLoadWorker(); @@ -194,9 +181,6 @@ public: BOOL Equals(PEImage *pImage); #endif // DACCESS_COMPILE -#ifndef FEATURE_CORECLR - BOOL IsShareable(); -#endif void GetMVID(GUID *pMvid); @@ -291,9 +275,6 @@ public: LPCSTR GetLocale(); DWORD GetFlags(); HRESULT GetFlagsNoTrigger(DWORD * pdwFlags); -#ifdef FEATURE_CAS_POLICY - COR_TRUST *GetAuthenticodeSignature(); -#endif // ------------------------------------------------------------ // PE file access // ------------------------------------------------------------ @@ -347,9 +328,6 @@ public: ULONG GetILImageTimeDateStamp(); -#ifdef FEATURE_CAS_POLICY - SAFEHANDLE GetSafeHandle(); -#endif // FEATURE_CAS_POLICY // ------------------------------------------------------------ // Image memory access @@ -400,6 +378,7 @@ public: PEImage *GetNativeImageWithRef(); PEImage *GetPersistentNativeImage(); #endif + BOOL HasNativeOrReadyToRunImage(); BOOL HasNativeImage(); PTR_PEImageLayout GetLoaded(); PTR_PEImageLayout GetLoadedNative(); @@ -520,10 +499,6 @@ protected: void ConvertMDInternalToReadWrite(); void ReleaseMetadataInterfaces(BOOL bDestructor, BOOL bKeepNativeData=FALSE); -#ifdef FEATURE_CAS_POLICY - // Check the Authenticode signature of a PE file - void CheckAuthenticodeSignature(); -#endif // FEATURE_CAS_POLICY friend class Module; #ifdef FEATURE_PREJIT @@ -572,21 +547,11 @@ protected: #endif IMetaDataImport2 *m_pImporter; IMetaDataEmit *m_pEmitter; -#ifndef FEATURE_CORECLR - IMetaDataAssemblyImport *m_pAssemblyImporter; - IMetaDataAssemblyEmit *m_pAssemblyEmitter; -#endif SimpleRWLock *m_pMetadataLock; Volatile<LONG> m_refCount; SBuffer *m_hash; // cached SHA1 hash value int m_flags; BOOL m_fStrongNameVerified; -#ifdef FEATURE_CAS_POLICY - COR_TRUST *m_certificate; - BOOL m_fCheckedCertificate; - IInternetSecurityManager *m_pSecurityManager; - Crst m_securityManagerLock; -#endif // FEATURE_CAS_POLICY #ifdef DEBUGGING_SUPPORTED #ifdef FEATURE_PREJIT @@ -659,7 +624,6 @@ public: protected: PTR_ICLRPrivAssembly m_pHostAssembly; -#if defined(FEATURE_HOST_ASSEMBLY_RESOLVER) // For certain assemblies, we do not have m_pHostAssembly since they are not bound using an actual binder. // An example is Ref-Emitted assemblies. Thus, when such assemblies trigger load of their dependencies, // we need to ensure they are loaded in appropriate load context. @@ -668,13 +632,10 @@ protected: // assembly that created the dynamic assembly. If the creator assembly is dynamic itself, then its fallback // load context would be propagated to the assembly being dynamically generated. ICLRPrivBinder *m_pFallbackLoadContextBinder; -#endif // defined(FEATURE_HOST_ASSEMBLY_RESOLVER) protected: - friend class CLRPrivBinderFusion; #ifndef DACCESS_COMPILE - // CLRPrivBinderFusion calls this for Fusion-bound assemblies in AppX processes. void SetHostAssembly(ICLRPrivAssembly * pHostAssembly) { LIMITED_METHOD_CONTRACT; m_pHostAssembly = clr::SafeAddRef(pHostAssembly); } #endif //DACCESS_COMPILE @@ -696,7 +657,6 @@ public: bool CanUseWithBindingCache() { LIMITED_METHOD_CONTRACT; return !HasHostAssembly(); } -#if defined(FEATURE_HOST_ASSEMBLY_RESOLVER) void SetFallbackLoadContextBinder(ICLRPrivBinder *pFallbackLoadContextBinder) { LIMITED_METHOD_CONTRACT; @@ -709,7 +669,6 @@ public: return m_pFallbackLoadContextBinder; } -#endif //defined(FEATURE_HOST_ASSEMBLY_RESOLVER) }; // class PEFile @@ -728,19 +687,6 @@ class PEAssembly : public PEFile // Public API // ------------------------------------------------------------ -#if !defined(FEATURE_CORECLR) - static PEAssembly * Open( - PEAssembly * pParentAssembly, - PEImage * pPEImageIL, - PEImage * pPEImageNI, - ICLRPrivAssembly * pHostAssembly, - BOOL fIsIntrospectionOnly); - - static PEAssembly * Open( - PEAssembly * pParentAssembly, - PEImage * pPEImageIL, - BOOL isIntrospectionOnly = FALSE); -#else //!FEATURE_CORECLR // CoreCLR's PrivBinder PEAssembly creation entrypoint static PEAssembly * Open( PEAssembly * pParent, @@ -748,69 +694,17 @@ class PEAssembly : public PEFile PEImage * pPEImageNI, ICLRPrivAssembly * pHostAssembly, BOOL fIsIntrospectionOnly = FALSE); -#endif //!FEATURE_CORECLR // This opens the canonical mscorlib.dll -#ifdef FEATURE_FUSION - static PEAssembly *OpenSystem(IApplicationContext *pAppCtx); -#else static PEAssembly *OpenSystem(IUnknown *pAppCtx); -#endif #ifdef DACCESS_COMPILE virtual void EnumMemoryRegions(CLRDataEnumMemoryFlags flags); #endif -#ifdef FEATURE_FUSION - static PEAssembly *Open( - IAssembly *pIAssembly, - IBindResult *pNativeFusionAssembly, - IFusionBindLog *pFusionLog = NULL, - BOOL isSystemAssembly = FALSE, - BOOL isIntrospectionOnly = FALSE); - - static PEAssembly *Open( - IHostAssembly *pIHostAssembly, - BOOL isSystemAssembly = FALSE, - BOOL isIntrospectionOnly = FALSE); - -#ifdef FEATURE_MIXEDMODE - // Use for main exe loading - // NOTE: This may also be used for "spontaneous" (IJW) dll loading where - // we need to deliver DllMain callbacks, but we should eliminate this case - - static PEAssembly *OpenHMODULE( - HMODULE hMod, - IAssembly *pFusionAssembly, - IBindResult *pNativeFusionAssembly, - IFusionBindLog *pFusionLog = NULL, - BOOL isIntrospectionOnly = FALSE); -#endif // FEATURE_MIXEDMODE - - static PEAssembly *DoOpen( - IAssembly *pIAssembly, - IBindResult *pNativeFusionAssembly, - IFusionBindLog *pFusionLog, - BOOL isSystemAssembly, - BOOL isIntrospectionOnly = FALSE); - - static PEAssembly *DoOpen( - IHostAssembly *pIHostAssembly, - BOOL isSystemAssembly, - BOOL isIntrospectionOnly = FALSE); -#ifdef FEATURE_MIXEDMODE - static PEAssembly *DoOpenHMODULE( - HMODULE hMod, - IAssembly *pFusionAssembly, - IBindResult *pNativeFusionAssembly, - IFusionBindLog *pFusionLog, - BOOL isIntrospectionOnly = FALSE); -#endif // FEATURE_MIXEDMODE -#else static PEAssembly *Open( CoreBindResult* pBindResult, BOOL isSystem, BOOL isIntrospectionOnly); -#endif // FEATURE_FUSION static PEAssembly *Create( PEAssembly *pParentAssembly, @@ -833,11 +727,7 @@ class PEAssembly : public PEFile private: // Private helpers for crufty exception handling reasons -#ifdef FEATURE_FUSION - static PEAssembly *DoOpenSystem(IApplicationContext *pAppCtx); -#else static PEAssembly *DoOpenSystem(IUnknown *pAppCtx); -#endif public: @@ -846,50 +736,9 @@ class PEAssembly : public PEFile // ------------------------------------------------------------ BOOL IsSourceGAC(); -#ifdef FEATURE_CORECLR BOOL IsProfileAssembly(); -#endif // FEATURE_CORECLR ULONG HashIdentity(); -#ifdef FEATURE_FUSION - - BOOL FusionLoggingEnabled() - { - LIMITED_METHOD_CONTRACT; - return m_bFusionLogEnabled && (m_pFusionLog != NULL); - }; - void DisableFusionLogging() - { - m_bFusionLogEnabled = FALSE; - }; - - IFusionBindLog *GetFusionBindLog() - { - LIMITED_METHOD_CONTRACT; -#ifdef FEATURE_FUSION - return (m_bFusionLogEnabled && (m_pFusionLog != NULL)) ? m_pFusionLog : NULL; -#else - return NULL; -#endif - } - - - BOOL IsBindingCodeBase(); - - BOOL IsSourceDownloadCache(); - - LOADCTX_TYPE GetLoadContext(); - BOOL IsContextLoad(); - - // Can we avoid exposing these? - IAssembly *GetFusionAssembly(); - IHostAssembly *GetIHostAssembly(); - IAssemblyName *GetFusionAssemblyName(); - IAssemblyName *GetFusionAssemblyNameNoCreate(); - IAssemblyLocation* GetNativeAssemblyLocation(); - DWORD GetLocationFlags(); - PEKIND GetFusionProcessorArchitecture(); -#endif #ifndef DACCESS_COMPILE virtual void ReleaseIL(); @@ -947,49 +796,12 @@ class PEAssembly : public PEFile #ifdef FEATURE_PREJIT void ExternalVLog(DWORD facility, DWORD level, const WCHAR *fmt, va_list args) DAC_EMPTY(); void FlushExternalLog() DAC_EMPTY(); -#ifdef FEATURE_FUSION - void ETWTraceLogMessage(DWORD dwETWLogCategory, PEAssembly *pAsm) - { - LIMITED_METHOD_CONTRACT - if (FusionLoggingEnabled() && - (ETW_TRACING_CATEGORY_ENABLED(MICROSOFT_WINDOWS_DOTNETRUNTIME_PRIVATE_PROVIDER_Context, TRACE_LEVEL_INFORMATION, CLR_PRIVATEFUSION_KEYWORD))) - { - m_pFusionLog->ETWTraceLogMessage(dwETWLogCategory, (pAsm?pAsm->m_pFusionAssemblyName:NULL)); - } - } - ULONGLONG GetBindingID() - { - LIMITED_METHOD_CONTRACT; - ULONGLONG ullBindingID = 0; - if (FusionLoggingEnabled()) - m_pFusionLog->GetBindingID(&ullBindingID); - return ullBindingID; - } -#endif #endif -#ifndef FEATURE_CORECLR - BOOL IsReportedToUsageLog(); - void SetReportedToUsageLog(); -#endif // !FEATURE_CORECLR protected: #ifndef DACCESS_COMPILE -#ifdef FEATURE_FUSION - PEAssembly( - PEImage *image, - IMetaDataEmit *pEmit, - IAssembly *pIAssembly, - IBindResult *pNativeFusionAssembly, - PEImage *pNIImage, - IFusionBindLog *pFusionLog, - IHostAssembly *pIHostAssembly, - PEFile *creator, - BOOL system, - BOOL introspectionOnly = FALSE, - ICLRPrivAssembly * pHostAssembly = NULL); -#else PEAssembly( CoreBindResult* pBindResultInfo, IMetaDataEmit *pEmit, @@ -1000,7 +812,6 @@ class PEAssembly : public PEFile PEImage * pPEImageNI = NULL, ICLRPrivAssembly * pHostAssembly = NULL ); -#endif virtual ~PEAssembly(); #endif @@ -1011,28 +822,11 @@ class PEAssembly : public PEFile friend class DomainAssembly; #ifdef FEATURE_PREJIT -#ifdef FEATURE_FUSION - void SetNativeImage(IBindResult *pNativeFusionAssembly); -#else void SetNativeImage(PEImage *image); -#endif BOOL CheckNativeImageVersion(PEImage *image); -#ifdef FEATURE_FUSION - void ClearNativeImage(); - void SetNativeImageClosure(IAssemblyBindingClosure *pClosure) - { - LIMITED_METHOD_CONTRACT; - if (m_pNativeImageClosure!=NULL) - m_pNativeImageClosure->Release(); - if (pClosure) - pClosure->AddRef(); - m_pNativeImageClosure=pClosure; - }; - BOOL HasEqualNativeClosure(DomainAssembly* pDomainAssembly); -#endif //FEATURE_FUSION #endif // FEATURE_PREJIT @@ -1049,29 +843,13 @@ class PEAssembly : public PEFile // ------------------------------------------------------------ PTR_PEFile m_creator; -#ifdef FEATURE_FUSION - IAssemblyName *m_pFusionAssemblyName; - IAssembly *m_pFusionAssembly; - IFusionBindLog *m_pFusionLog; - BOOL m_bFusionLogEnabled; - IHostAssembly *m_pIHostAssembly; - IAssemblyLocation *m_pNativeAssemblyLocation; - IAssemblyBindingClosure *m_pNativeImageClosure; //present only for shared - LOADCTX_TYPE m_loadContext; - DWORD m_dwLocationFlags; -#else BOOL m_bIsFromGAC; BOOL m_bIsOnTpaList; // Using a separate entry and not m_pHostAssembly because otherwise // HasHostAssembly becomes true that trips various other code paths resulting in bad // things SString m_sTextualIdentity; -#endif -#ifdef FEATURE_CORECLR int m_fProfileAssembly; // Tri-state cache -#else - BOOL m_fStrongNameBypassed; -#endif public: PTR_PEFile GetCreator() @@ -1090,98 +868,15 @@ class PEAssembly : public PEFile inline bool CanUseWithBindingCache() { STATIC_CONTRACT_WRAPPER; -#if !defined(FEATURE_APPX_BINDER) return (HasBindableIdentity()); -#else - return (PEFile::CanUseWithBindingCache() && HasBindableIdentity()); -#endif // FEATURE_CORECLR } }; -#ifdef FEATURE_MULTIMODULE_ASSEMBLIES - -class PEModule : public PEFile -{ - VPTR_VTABLE_CLASS(PEModule, PEFile) - - public: - - // ------------------------------------------------------------ - // Public API - // ------------------------------------------------------------ - - static PEModule *Open(PEAssembly *assembly, mdFile token, - const SString &fileName); - - static PEModule *OpenMemory(PEAssembly *assembly, mdFile kToken, - const void *flat, COUNT_T size); - - static PEModule *Create(PEAssembly *assembly, mdFile kToken, IMetaDataEmit *pEmit); - -#ifdef DACCESS_COMPILE - virtual void EnumMemoryRegions(CLRDataEnumMemoryFlags flags); -#endif - - private: - // Private helpers for crufty exception handling reasons - static PEModule *DoOpen(PEAssembly *assembly, mdFile token, - const SString &fileName); - - static PEModule *DoOpenMemory(PEAssembly *assembly, mdFile kToken, - const void *flat, COUNT_T size); - public: - - // ------------------------------------------------------------ - // Metadata access - // ------------------------------------------------------------ - - PEAssembly *GetAssembly(); - mdFile GetToken(); - BOOL IsResource(); - BOOL IsIStream(); - LPCUTF8 GetSimpleName(); - - // ------------------------------------------------------------ - // Logging - // ------------------------------------------------------------ -#ifdef FEATURE_PREJIT - void ExternalVLog(DWORD facility, DWORD level, const WCHAR *fmt, va_list args) DAC_EMPTY(); - void FlushExternalLog() DAC_EMPTY(); -#endif -private: - // ------------------------------------------------------------ - // Loader access API - // ------------------------------------------------------------ - - friend class DomainModule; -#ifdef FEATURE_PREJIT - void SetNativeImage(const SString &fullPath); -#endif // FEATURE_PREJIT - -private: - -#ifndef DACCESS_COMPILE - PEModule(PEImage *image, PEAssembly *assembly, mdFile token, IMetaDataEmit *pEmit); - virtual ~PEModule(); -#endif - - // ------------------------------------------------------------ - // Instance fields - // ------------------------------------------------------------ - - PTR_PEAssembly m_assembly; - mdFile m_token; - BOOL m_bIsResource; -}; -#endif // FEATURE_MULTIMODULE_ASSEMBLIES typedef ReleaseHolder<PEFile> PEFileHolder; typedef ReleaseHolder<PEAssembly> PEAssemblyHolder; -#ifdef FEATURE_MULTIMODULE_ASSEMBLIES -typedef ReleaseHolder<PEModule> PEModuleHolder; -#endif // FEATURE_MULTIMODULE_ASSEMBLIES // A small shim around PEAssemblies/IBindResult that allow us to write Fusion/CLR-agnostic @@ -1199,21 +894,6 @@ class LoggablePEAssembly : public LoggableAssembly return m_peAssembly->GetPath(); } -#ifdef FEATURE_FUSION - virtual IAssemblyName* FusionAssemblyName() - { - STANDARD_VM_CONTRACT; - - return m_peAssembly->GetFusionAssemblyName(); - } - - virtual IFusionBindLog* FusionBindLog() - { - STANDARD_VM_CONTRACT; - - return m_peAssembly->GetFusionBindLog(); - } -#endif // FEATURE_FUSION LoggablePEAssembly(PEAssembly *peAssembly) { |