1 | // Licensed to the .NET Foundation under one or more agreements. |
2 | // The .NET Foundation licenses this file to you under the MIT license. |
3 | // See the LICENSE file in the project root for more information. |
4 | |
5 | /*============================================================ |
6 | ** |
7 | ** Header: AssemblyNative.hpp |
8 | ** |
9 | ** Purpose: Implements FCalls for managed Assembly class |
10 | ** |
11 | ** |
12 | |
13 | |
14 | ** |
15 | ===========================================================*/ |
16 | #ifndef _ASSEMBLYNATIVE_H |
17 | #define _ASSEMBLYNATIVE_H |
18 | |
19 | class CLRPrivBinderAssemblyLoadContext; |
20 | |
21 | class AssemblyNative |
22 | { |
23 | friend class Assembly; |
24 | friend class BaseDomain; |
25 | friend class DomainAssembly; |
26 | |
27 | public: |
28 | // static FCALLs |
29 | static |
30 | void QCALLTYPE GetEntryAssembly(QCall::ObjectHandleOnStack retAssembly); |
31 | |
32 | static |
33 | void QCALLTYPE GetExecutingAssembly(QCall::StackCrawlMarkHandle stackMark, QCall::ObjectHandleOnStack retAssembly); |
34 | |
35 | static FCDECL7(Object*, Load, AssemblyNameBaseObject* assemblyNameUNSAFE, |
36 | StringObject* codeBaseUNSAFE, |
37 | AssemblyBaseObject* requestingAssemblyUNSAFE, |
38 | StackCrawlMark* stackMark, |
39 | ICLRPrivBinder * pPrivHostBinder, |
40 | CLR_BOOL fThrowOnFileNotFound, |
41 | INT_PTR ptrLoadContextBinder); |
42 | |
43 | // |
44 | // instance FCALLs |
45 | // |
46 | |
47 | static |
48 | void QCALLTYPE GetLocale(QCall::AssemblyHandle pAssembly, QCall::StringHandleOnStack retString); |
49 | |
50 | static |
51 | INT32 QCALLTYPE GetHashAlgorithm(QCall::AssemblyHandle pAssembly); |
52 | |
53 | |
54 | static |
55 | void QCALLTYPE GetSimpleName(QCall::AssemblyHandle pAssembly, QCall::StringHandleOnStack retSimpleName); |
56 | |
57 | static |
58 | void QCALLTYPE GetPublicKey(QCall::AssemblyHandle pAssembly, QCall::ObjectHandleOnStack retPublicKey); |
59 | |
60 | static |
61 | INT32 QCALLTYPE GetFlags(QCall::AssemblyHandle pAssembly); |
62 | |
63 | static |
64 | void QCALLTYPE GetFullName(QCall::AssemblyHandle pAssembly, QCall::StringHandleOnStack retString); |
65 | |
66 | static |
67 | void QCALLTYPE GetLocation(QCall::AssemblyHandle pAssembly, QCall::StringHandleOnStack retString); |
68 | |
69 | static |
70 | void QCALLTYPE GetCodeBase(QCall::AssemblyHandle pAssembly, BOOL fCopiedName, QCall::StringHandleOnStack retString); |
71 | |
72 | static |
73 | BYTE * QCALLTYPE GetResource(QCall::AssemblyHandle pAssembly, LPCWSTR wszName, DWORD * length); |
74 | |
75 | static |
76 | BOOL QCALLTYPE GetNeutralResourcesLanguageAttribute(QCall::AssemblyHandle pAssembly, QCall::StringHandleOnStack cultureName, INT16& outFallbackLocation); |
77 | |
78 | static |
79 | FCDECL1(FC_BOOL_RET, IsDynamic, AssemblyBaseObject * pAssemblyUNSAFE); |
80 | |
81 | static |
82 | void QCALLTYPE GetVersion(QCall::AssemblyHandle pAssembly, INT32* pMajorVersion, INT32* pMinorVersion, INT32*pBuildNumber, INT32* pRevisionNumber); |
83 | |
84 | static |
85 | void QCALLTYPE GetType(QCall::AssemblyHandle pAssembly, LPCWSTR wszName, BOOL bThrowOnError, BOOL bIgnoreCase, QCall::ObjectHandleOnStack retType, QCall::ObjectHandleOnStack keepAlive); |
86 | |
87 | static |
88 | void QCALLTYPE GetForwardedType(QCall::AssemblyHandle pAssembly, mdToken mdtExternalType, QCall::ObjectHandleOnStack retType); |
89 | |
90 | static |
91 | INT32 QCALLTYPE GetManifestResourceInfo(QCall::AssemblyHandle pAssembly, LPCWSTR wszName, QCall::ObjectHandleOnStack retAssembly, QCall::StringHandleOnStack retFileName); |
92 | |
93 | static |
94 | void QCALLTYPE GetModules(QCall::AssemblyHandle pAssembly, BOOL fLoadIfNotFound, BOOL fGetResourceModules, QCall::ObjectHandleOnStack retModules); |
95 | |
96 | static |
97 | void QCALLTYPE GetModule(QCall::AssemblyHandle pAssembly, LPCWSTR wszFileName, QCall::ObjectHandleOnStack retModule); |
98 | |
99 | static |
100 | void QCALLTYPE GetExportedTypes(QCall::AssemblyHandle pAssembly, QCall::ObjectHandleOnStack retTypes); |
101 | |
102 | static |
103 | void QCALLTYPE GetForwardedTypes(QCall::AssemblyHandle pAssembly, QCall::ObjectHandleOnStack retTypes); |
104 | |
105 | static FCDECL1(Object*, GetManifestResourceNames, AssemblyBaseObject * pAssemblyUNSAFE); |
106 | static FCDECL1(Object*, GetReferencedAssemblies, AssemblyBaseObject * pAssemblyUNSAFE); |
107 | |
108 | static |
109 | void QCALLTYPE GetEntryPoint(QCall::AssemblyHandle pAssembly, QCall::ObjectHandleOnStack retMethod); |
110 | |
111 | static FCDECL1(ReflectModuleBaseObject *, GetInMemoryAssemblyModule, AssemblyBaseObject * pAssemblyUNSAFE); |
112 | |
113 | static |
114 | void QCALLTYPE GetImageRuntimeVersion(QCall::AssemblyHandle pAssembly, QCall::StringHandleOnStack retString); |
115 | |
116 | static BOOL QCALLTYPE GetIsCollectible(QCall::AssemblyHandle pAssembly); |
117 | |
118 | // |
119 | // PEFile QCalls |
120 | // |
121 | |
122 | static INT_PTR QCALLTYPE InitializeAssemblyLoadContext(INT_PTR ptrManagedAssemblyLoadContext, BOOL fRepresentsTPALoadContext, BOOL fIsCollectible); |
123 | static void QCALLTYPE PrepareForAssemblyLoadContextRelease(INT_PTR ptrNativeAssemblyLoadContext, INT_PTR ptrManagedStrongAssemblyLoadContext); |
124 | static void QCALLTYPE LoadFromPath(INT_PTR ptrNativeAssemblyLoadContext, LPCWSTR pwzILPath, LPCWSTR pwzNIPath, QCall::ObjectHandleOnStack retLoadedAssembly); |
125 | static INT_PTR QCALLTYPE InternalLoadUnmanagedDllFromPath(LPCWSTR unmanagedLibraryPath); |
126 | static void QCALLTYPE LoadFromStream(INT_PTR ptrNativeAssemblyLoadContext, INT_PTR ptrAssemblyArray, INT32 cbAssemblyArrayLength, INT_PTR ptrSymbolArray, INT32 cbSymbolArrayLength, QCall::ObjectHandleOnStack retLoadedAssembly); |
127 | static Assembly* LoadFromPEImage(ICLRPrivBinder* pBinderContext, PEImage *pILImage, PEImage *pNIImage); |
128 | static INT_PTR QCALLTYPE GetLoadContextForAssembly(QCall::AssemblyHandle pAssembly); |
129 | |
130 | static BOOL QCALLTYPE InternalTryGetRawMetadata(QCall::AssemblyHandle assembly, UINT8 **blobRef, INT32 *lengthRef); |
131 | }; |
132 | |
133 | #endif |
134 | |
135 | |