diff options
Diffstat (limited to 'src/vm/assemblynative.hpp')
-rw-r--r-- | src/vm/assemblynative.hpp | 264 |
1 files changed, 264 insertions, 0 deletions
diff --git a/src/vm/assemblynative.hpp b/src/vm/assemblynative.hpp new file mode 100644 index 0000000000..ca03239d3e --- /dev/null +++ b/src/vm/assemblynative.hpp @@ -0,0 +1,264 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +/*============================================================ +** +** Header: AssemblyNative.hpp +** +** Purpose: Implements FCalls for managed Assembly class +** +** + + +** +===========================================================*/ +#ifndef _ASSEMBLYNATIVE_H +#define _ASSEMBLYNATIVE_H + +class CLRPrivBinderAssemblyLoadContext; + +class AssemblyNative +{ + friend class Assembly; + friend class BaseDomain; + friend class DomainAssembly; + +private: + static Assembly* GetPostPolicyAssembly(PEAssembly *pFile, + BOOL fForIntrospection, + AssemblyLoadSecurity *pLoadSecurity, + BOOL fIsLoadByteArray = FALSE); + + static Assembly* LoadFromBuffer(BOOL fForIntrospection, + const BYTE* pAssemblyData, + UINT64 uAssemblyLength, + const BYTE* pPDBData, + UINT64 uPDBLength, + StackCrawlMark* stackMark, + Object * securityUNSAFE, + SecurityContextSource securityContextSource); +public: + // static FCALLs + static + void QCALLTYPE GetEntryAssembly(QCall::ObjectHandleOnStack retAssembly); + + static + void QCALLTYPE GetExecutingAssembly(QCall::StackCrawlMarkHandle stackMark, QCall::ObjectHandleOnStack retAssembly); + + static FCDECL2(Object*, LoadFile, StringObject* pathUNSAFE, + Object* securityUNSAFE); + static FCDECL6(Object*, LoadImage, U1Array* PEByteArrayUNSAFE, U1Array* SymByteArrayUNSAFE, Object* securityUNSAFE, StackCrawlMark* stackMark, CLR_BOOL fForIntrospection, SecurityContextSource securityContextSource); + + static FCDECL10(Object*, Load, AssemblyNameBaseObject* assemblyNameUNSAFE, + StringObject* codeBaseUNSAFE, + Object* securityUNSAFE, + AssemblyBaseObject* requestingAssemblyUNSAFE, + StackCrawlMark* stackMark, + ICLRPrivBinder * pPrivHostBinder, + CLR_BOOL fThrowOnFileNotFound, + CLR_BOOL fForIntrospection, + CLR_BOOL fSuppressSecurityChecks, + INT_PTR ptrLoadContextBinder); + + static FCDECL1(FC_BOOL_RET, IsFrameworkAssembly, AssemblyNameBaseObject* refAssemblyNameUNSAFE); + static FCDECL1(FC_BOOL_RET, IsNewPortableAssembly, AssemblyNameBaseObject* refAssemblyNameUNSAFE); + + // + // instance FCALLs + // + + static + void QCALLTYPE GetLocale(QCall::AssemblyHandle pAssembly, QCall::StringHandleOnStack retString); + + static + INT32 QCALLTYPE GetHashAlgorithm(QCall::AssemblyHandle pAssembly); + +#ifndef FEATURE_CORECLR + static + BYTE QCALLTYPE GetSecurityRuleSet(QCall::AssemblyHandle pAssembly); +#endif // !FEATURE_CORECLR + + static + void QCALLTYPE GetSimpleName(QCall::AssemblyHandle pAssembly, QCall::StringHandleOnStack retSimpleName); + + static + void QCALLTYPE GetPublicKey(QCall::AssemblyHandle pAssembly, QCall::ObjectHandleOnStack retPublicKey); + + static + INT32 QCALLTYPE GetFlags(QCall::AssemblyHandle pAssembly); + + static + void QCALLTYPE GetFullName(QCall::AssemblyHandle pAssembly, QCall::StringHandleOnStack retString); + + static + void QCALLTYPE GetLocation(QCall::AssemblyHandle pAssembly, QCall::StringHandleOnStack retString); + + static + FCDECL1(FC_BOOL_RET, IsReflectionOnly, AssemblyBaseObject * pAssemblyUNSAFE); + + static + void QCALLTYPE GetCodeBase(QCall::AssemblyHandle pAssembly, BOOL fCopiedName, QCall::StringHandleOnStack retString); + + static + BYTE * QCALLTYPE GetResource(QCall::AssemblyHandle pAssembly, LPCWSTR wszName, UINT64 * length, QCall::StackCrawlMarkHandle stackMark, BOOL skipSecurityCheck); + + static + BOOL QCALLTYPE GetNeutralResourcesLanguageAttribute(QCall::AssemblyHandle pAssembly, QCall::StringHandleOnStack cultureName, INT16& outFallbackLocation); + + static + FCDECL1(FC_BOOL_RET, IsDynamic, AssemblyBaseObject * pAssemblyUNSAFE); + + static + void QCALLTYPE GetVersion(QCall::AssemblyHandle pAssembly, INT32* pMajorVersion, INT32* pMinorVersion, INT32*pBuildNumber, INT32* pRevisionNumber); + + static + void QCALLTYPE LoadModule(QCall::AssemblyHandle pAssembly, + LPCWSTR wszModuleName, + LPCBYTE pRawModule, INT32 cbModule, + LPCBYTE pRawSymbolStore, INT32 cbSymbolStore, + QCall::ObjectHandleOnStack retModule); + + static + void QCALLTYPE GetType(QCall::AssemblyHandle pAssembly, LPCWSTR wszName, BOOL bThrowOnError, BOOL bIgnoreCase, QCall::ObjectHandleOnStack retType, QCall::ObjectHandleOnStack keepAlive); + + static + INT32 QCALLTYPE GetManifestResourceInfo(QCall::AssemblyHandle pAssembly, LPCWSTR wszName, QCall::ObjectHandleOnStack retAssembly, QCall::StringHandleOnStack retFileName, QCall::StackCrawlMarkHandle stackMark); + + static + BOOL QCALLTYPE UseRelativeBindForSatellites(); + + static + void QCALLTYPE GetModules(QCall::AssemblyHandle pAssembly, BOOL fLoadIfNotFound, BOOL fGetResourceModules, QCall::ObjectHandleOnStack retModules); + + static + void QCALLTYPE GetModule(QCall::AssemblyHandle pAssembly, LPCWSTR wszFileName, QCall::ObjectHandleOnStack retModule); + + static + void QCALLTYPE GetExportedTypes(QCall::AssemblyHandle pAssembly, QCall::ObjectHandleOnStack retTypes); + + static + void QCALLTYPE GetForwardedTypes(QCall::AssemblyHandle pAssembly, QCall::ObjectHandleOnStack retTypes); + + static FCDECL1(Object*, GetManifestResourceNames, AssemblyBaseObject * pAssemblyUNSAFE); + static FCDECL1(Object*, GetReferencedAssemblies, AssemblyBaseObject * pAssemblyUNSAFE); + + static + void QCALLTYPE GetEntryPoint(QCall::AssemblyHandle pAssembly, QCall::ObjectHandleOnStack retMethod); + + static FCDECL1(ReflectModuleBaseObject *, GetOnDiskAssemblyModule, AssemblyBaseObject * pAssemblyUNSAFE); + static FCDECL1(ReflectModuleBaseObject *, GetInMemoryAssemblyModule, AssemblyBaseObject * pAssemblyUNSAFE); + +#ifndef FEATURE_CORECLR + static + FCDECL1(FC_BOOL_RET, IsGlobalAssemblyCache, AssemblyBaseObject* pAssemblyUNSAFE); +#endif // !FEATURE_CORECLR + + static + void QCALLTYPE GetGrantSet(QCall::AssemblyHandle pAssembly, QCall::ObjectHandleOnStack retGranted, QCall::ObjectHandleOnStack retDenied); + + static + BOOL QCALLTYPE IsAllSecurityCritical(QCall::AssemblyHandle pAssembly); + + static + BOOL QCALLTYPE IsAllSecuritySafeCritical(QCall::AssemblyHandle pAssembly); + + static + BOOL QCALLTYPE IsAllPublicAreaSecuritySafeCritical(QCall::AssemblyHandle pAssembly); + + static + BOOL QCALLTYPE IsAllSecurityTransparent(QCall::AssemblyHandle pAssembly); + + static + void QCALLTYPE GetImageRuntimeVersion(QCall::AssemblyHandle pAssembly, QCall::StringHandleOnStack retString); + + static + INT64 QCALLTYPE GetHostContext(QCall::AssemblyHandle pAssembly); + +#ifdef FEATURE_CAS_POLICY + static + BOOL QCALLTYPE IsStrongNameVerified(QCall::AssemblyHandle pAssembly); +#endif // FEATURE_CAS_POLICY + + // + // AssemblyBuilder FCALLs + // + + static + void QCALLTYPE PrepareForSavingManifestToDisk(QCall::AssemblyHandle pAssembly, QCall::ModuleHandle pAssemblyModule); + +#ifndef FEATURE_CORECLR + static + void QCALLTYPE SaveManifestToDisk(QCall::AssemblyHandle pAssembly, + LPCWSTR wszManifestFileName, + INT32 entrypoint, + INT32 fileKind, + INT32 portableExecutableKind, + INT32 imageFileMachine); + + static + mdExportedType QCALLTYPE AddExportedTypeOnDisk(QCall::AssemblyHandle pAssembly, LPCWSTR wzzCOMTypeName, INT32 tkImpl, INT32 tkTypeDef, INT32 flags); + + static + mdExportedType QCALLTYPE AddExportedTypeInMemory(QCall::AssemblyHandle pAssembly, LPCWSTR wzzCOMTypeName, INT32 tkImpl, INT32 tkTypeDef, INT32 flags); + +#endif // FEATURE_CORECLR + + static + mdFile QCALLTYPE AddFile(QCall::AssemblyHandle pAssembly, LPCWSTR wszFileName); + + static + void QCALLTYPE SetFileHashValue(QCall::AssemblyHandle pAssembly, INT32 tkFile, LPCWSTR wszFullFileName); + + static + void QCALLTYPE AddStandAloneResource(QCall::AssemblyHandle pAssembly, LPCWSTR wszName, LPCWSTR wszFileName, LPCWSTR wszFullFileName, INT32 iAttribute); + + static + void QCALLTYPE AddDeclarativeSecurity(QCall::AssemblyHandle pAssembly, INT32 action, PVOID blob, INT32 length); + +#ifndef FEATURE_CORECLR + static + void QCALLTYPE CreateVersionInfoResource(LPCWSTR pwzFilename, + LPCWSTR pwzTitle, + LPCWSTR pwzIconFilename, + LPCWSTR pwzDescription, + LPCWSTR pwzCopyright, + LPCWSTR pwzTrademark, + LPCWSTR pwzCompany, + LPCWSTR pwzProduct, + LPCWSTR pwzProductVersion, + LPCWSTR pwzFileVersion, + INT32 lcid, + BOOL fIsDll, + QCall::StringHandleOnStack retFileName); +#endif // !FEATURE_CORECLR + + static + void QCALLTYPE GetRawBytes(QCall::AssemblyHandle pAssembly, QCall::ObjectHandleOnStack retRawBytes); + + // + // PEFile QCalls + // + + static + void QCALLTYPE ReleaseSafePEFileHandle(PEFile *pPEFile); + +#ifdef FEATURE_APPX + static + BOOL QCALLTYPE IsDesignerBindingContext(QCall::AssemblyHandle pAssembly); +#endif + + static INT_PTR QCALLTYPE InitializeAssemblyLoadContext(INT_PTR ptrManagedAssemblyLoadContext, BOOL fRepresentsTPALoadContext); + static BOOL QCALLTYPE OverrideDefaultAssemblyLoadContextForCurrentDomain(INT_PTR ptrNativeAssemblyLoadContext); + static BOOL QCALLTYPE CanUseAppPathAssemblyLoadContextInCurrentDomain(); + static void QCALLTYPE LoadFromPath(INT_PTR ptrNativeAssemblyLoadContext, LPCWSTR pwzILPath, LPCWSTR pwzNIPath, QCall::ObjectHandleOnStack retLoadedAssembly); + static INT_PTR QCALLTYPE InternalLoadUnmanagedDllFromPath(LPCWSTR unmanagedLibraryPath); + static void QCALLTYPE LoadFromStream(INT_PTR ptrNativeAssemblyLoadContext, INT_PTR ptrAssemblyArray, INT32 cbAssemblyArrayLength, INT_PTR ptrSymbolArray, INT32 cbSymbolArrayLength, QCall::ObjectHandleOnStack retLoadedAssembly); + static Assembly* LoadFromPEImage(ICLRPrivBinder* pBinderContext, PEImage *pILImage, PEImage *pNIImage); + static INT_PTR QCALLTYPE GetLoadContextForAssembly(QCall::AssemblyHandle pAssembly); + + static BOOL QCALLTYPE InternalTryGetRawMetadata(QCall::AssemblyHandle assembly, UINT8 **blobRef, INT32 *lengthRef); +}; + +#endif + |