diff options
-rw-r--r-- | src/inc/winrtprojectedtypes.h | 2 | ||||
-rw-r--r-- | src/md/winmd/adapter.cpp | 2 | ||||
-rw-r--r-- | src/md/winmd/inc/adapter.h | 3 | ||||
-rw-r--r-- | src/vm/appdomain.cpp | 27 | ||||
-rw-r--r-- | src/vm/appdomain.hpp | 1 |
5 files changed, 32 insertions, 3 deletions
diff --git a/src/inc/winrtprojectedtypes.h b/src/inc/winrtprojectedtypes.h index 140493801f..f8e0d11bb3 100644 --- a/src/inc/winrtprojectedtypes.h +++ b/src/inc/winrtprojectedtypes.h @@ -140,7 +140,7 @@ DEFINE_PROJECTED_STRUCT ("Windows.Foundation", "Point", DEFINE_PROJECTED_STRUCT ("Windows.Foundation", "Rect", "Windows.Foundation", "Rect", SystemRuntimeWindowsRuntime, SystemRuntimeWindowsRuntime, Windows_Foundation_Rect, Windows_Foundation_Rect_clr, STRUCT_FIELDS(W("Single"), W("Single"), W("Single"), W("Single"))) DEFINE_PROJECTED_STRUCT ("Windows.Foundation", "Size", "Windows.Foundation", "Size", SystemRuntimeWindowsRuntime, SystemRuntimeWindowsRuntime, Windows_Foundation_Size, Windows_Foundation_Size_clr, STRUCT_FIELDS(W("Single"), W("Single"))) DEFINE_PROJECTED_STRUCT ("Windows.Foundation", "TimeSpan", "System", "TimeSpan", Mscorlib, SystemRuntime, Windows_Foundation_TimeSpan, System_TimeSpan, STRUCT_FIELDS(W("Int64"))) -DEFINE_PROJECTED_RUNTIMECLASS("Windows.Foundation", "Uri", "System", "Uri", System, SystemRuntime, Windows_Foundation_Uri, System_Uri, "Windows.Foundation.IUriRuntimeClass", __uuidof(ABI::Windows::Foundation::IUriRuntimeClass)) +DEFINE_PROJECTED_RUNTIMECLASS("Windows.Foundation", "Uri", "System", "Uri", InternalUri, SystemRuntime, Windows_Foundation_Uri, System_Uri, "Windows.Foundation.IUriRuntimeClass", __uuidof(ABI::Windows::Foundation::IUriRuntimeClass)) DEFINE_PROJECTED_INTERFACE ("Windows.Foundation", "IClosable", "System", "IDisposable", Mscorlib, SystemRuntime, Windows_Foundation_IClosable, System_IDisposable, PIID(0x30d5a829, 0x7fa4, 0x4026, {0x83, 0xbb, 0xd7, 0x5b, 0xae, 0x4e, 0xa9, 0x9e})) diff --git a/src/md/winmd/adapter.cpp b/src/md/winmd/adapter.cpp index 0a93f88d58..64cc25ce49 100644 --- a/src/md/winmd/adapter.cpp +++ b/src/md/winmd/adapter.cpp @@ -1134,7 +1134,7 @@ void WinMDAdapter::GetExtraAssemblyRefProps(FrameworkAssemblyIndex index, else #endif { - if (index == FrameworkAssembly_SystemNumericsVectors) + if (index == FrameworkAssembly_SystemNumericsVectors || index == FrameworkAssembly_InternalUri) { *ppPublicKeytoken = s_pbContractPublicKeyToken; *pTokenLength = sizeof(s_pbContractPublicKeyToken); diff --git a/src/md/winmd/inc/adapter.h b/src/md/winmd/inc/adapter.h index 8b1be4cfb9..14a26b56b1 100644 --- a/src/md/winmd/inc/adapter.h +++ b/src/md/winmd/inc/adapter.h @@ -87,6 +87,7 @@ public: FrameworkAssembly_SystemRuntimeWindowsRuntime, FrameworkAssembly_SystemRuntimeWindowsRuntimeUIXaml, FrameworkAssembly_SystemNumericsVectors, + FrameworkAssembly_InternalUri, FrameworkAssembly_Count, }; @@ -633,6 +634,8 @@ public: return "System.Runtime.WindowsRuntime.UI.Xaml"; case FrameworkAssembly_SystemNumericsVectors: return "System.Numerics.Vectors"; + case FrameworkAssembly_InternalUri: + return "Internal.Uri"; default: _ASSERTE(!"Invalid AssemblyRef token!"); return NULL; diff --git a/src/vm/appdomain.cpp b/src/vm/appdomain.cpp index 9188c26c05..4c02f35f7f 100644 --- a/src/vm/appdomain.cpp +++ b/src/vm/appdomain.cpp @@ -4869,6 +4869,7 @@ AppDomain::AppDomain() m_pSystemRuntimeWindowsRuntimeDll = nullptr; m_pSystemRuntimeWindowsRuntimeUIXamlDll = nullptr; m_pSystemNumericsVectors = nullptr; + m_pInternalUri = nullptr; #endif // FEATURE_COMINTEROP m_pUMEntryThunkCache = NULL; @@ -5949,6 +5950,11 @@ bool AppDomain::FindRedirectedAssembly(Assembly* pAssembly, WinMDAdapter::Framew *pIndex = WinMDAdapter::FrameworkAssembly_SystemNumericsVectors; return true; } + else if (pDomainAssembly == m_pInternalUri) + { + *pIndex = WinMDAdapter::FrameworkAssembly_InternalUri; + return true; + } return false; } @@ -5964,7 +5970,7 @@ BOOL AppDomain::FindRedirectedAssemblyFromIndexIfLoaded(WinMDAdapter::FrameworkA LIMITED_METHOD_CONTRACT; // If new redirected assemblies are added, this function probably needs to be updated - C_ASSERT(WinMDAdapter::FrameworkAssembly_Count == 5); + C_ASSERT(WinMDAdapter::FrameworkAssembly_Count == 6); DomainAssembly * pDomainAssembly = NULL; @@ -5989,6 +5995,10 @@ BOOL AppDomain::FindRedirectedAssemblyFromIndexIfLoaded(WinMDAdapter::FrameworkA { pDomainAssembly = m_pSystemNumericsVectors; } + else if (index == WinMDAdapter::FrameworkAssembly_InternalUri) + { + pDomainAssembly = m_pInternalUri; + } if (pDomainAssembly != NULL) { @@ -6108,6 +6118,21 @@ void AppDomain::AddAssembly(DomainAssembly * assem) } } } + if (m_pInternalUri == nullptr) + { + PEAssembly *pPEAssembly = assem->GetFile(); + + if (strcmp("Internal.Uri", pPEAssembly->GetSimpleName()) == 0) + { + DWORD cbPublicKey; + const BYTE *pbPublicKey = static_cast<const BYTE *>(pPEAssembly->GetPublicKey(&cbPublicKey)); + + if (cbPublicKey == sizeof(s_pbContractPublicKey) && memcmp(pbPublicKey, s_pbContractPublicKey, cbPublicKey) == 0) + { + m_pInternalUri = assem; + } + } + } #endif // FEATURE_COMINTEROP } diff --git a/src/vm/appdomain.hpp b/src/vm/appdomain.hpp index 4840b904df..49e6a72759 100644 --- a/src/vm/appdomain.hpp +++ b/src/vm/appdomain.hpp @@ -3413,6 +3413,7 @@ private: PTR_DomainAssembly m_pSystemRuntimeWindowsRuntimeDll; // System.Runtime.WindowsRuntime.dll loaded into this domain PTR_DomainAssembly m_pSystemRuntimeWindowsRuntimeUIXamlDll; // System.Runtime.WindowsRuntime.UI.Xaml.dll loaded into this domain PTR_DomainAssembly m_pSystemNumericsVectors; // System.Numerics.Vectors.dll loaded into this domain + PTR_DomainAssembly m_pInternalUri; // Internal.Uri.dll loaded into this domain public: BOOL FindRedirectedAssemblyFromIndexIfLoaded(WinMDAdapter::FrameworkAssemblyIndex index, Assembly** ppAssembly); |