diff options
Diffstat (limited to 'src/vm/clrprivbinderutil.cpp')
-rw-r--r-- | src/vm/clrprivbinderutil.cpp | 461 |
1 files changed, 0 insertions, 461 deletions
diff --git a/src/vm/clrprivbinderutil.cpp b/src/vm/clrprivbinderutil.cpp index b6871123d9..0eccf508c5 100644 --- a/src/vm/clrprivbinderutil.cpp +++ b/src/vm/clrprivbinderutil.cpp @@ -39,327 +39,6 @@ LPWSTR CopyStringThrowing( namespace CLRPrivBinderUtil { -#ifdef FEATURE_FUSION - //----------------------------------------------------------------------------------------------------------------- - CLRPrivAssemblyBindResultWrapper::CLRPrivAssemblyBindResultWrapper( - IAssemblyName *pIAssemblyName, - PCWSTR wzAssemblyPath, - IILFingerprintFactory *pILFingerprintFactory - ) : - m_wzAssemblyPath(DuplicateStringThrowing(wzAssemblyPath)), - m_pIAssemblyName(clr::SafeAddRef(pIAssemblyName)), - m_bIBindResultNISet(false), - m_pIBindResultNI(nullptr), - m_pIILFingerprint(nullptr), - m_pILFingerprintFactory(clr::SafeAddRef(pILFingerprintFactory)), - m_lock(CrstLeafLock) - { - STANDARD_VM_CONTRACT; - VALIDATE_ARG_THROW(pIAssemblyName != nullptr && wzAssemblyPath != nullptr); - } - - //----------------------------------------------------------------------------------------------------------------- - CLRPrivAssemblyBindResultWrapper::~CLRPrivAssemblyBindResultWrapper() - { - clr::SafeRelease(m_pIAssemblyName); - clr::SafeRelease(m_pIILFingerprint); - clr::SafeRelease(m_pIBindResultNI); - } - - //================================================================================================================= - // IBindResult methods - - //----------------------------------------------------------------------------------------------------------------- - HRESULT CLRPrivAssemblyBindResultWrapper::GetAssemblyNameDef( - /*out*/ IAssemblyName **ppIAssemblyNameDef) - { - LIMITED_METHOD_CONTRACT; - - VALIDATE_ARG_RET(ppIAssemblyNameDef != nullptr); - *ppIAssemblyNameDef = clr::SafeAddRef(m_pIAssemblyName); - return S_OK; - } - - //----------------------------------------------------------------------------------------------------------------- - HRESULT CLRPrivAssemblyBindResultWrapper::GetNextAssemblyModuleName( - /*in*/ DWORD dwNIndex, - __inout_ecount(*pdwCCModuleName) LPWSTR pwzModuleName, - /*in, out, annotation("__inout")*/ LPDWORD pdwCCModuleName) - { - STANDARD_BIND_CONTRACT; - _ASSERTE(!("E_NOTIMPL: " __FUNCTION__)); - return E_NOTIMPL; - } - - //----------------------------------------------------------------------------------------------------------------- - HRESULT CLRPrivAssemblyBindResultWrapper::GetAssemblyLocation( - /*out*/ IAssemblyLocation **ppIAssemblyLocation) - { - STANDARD_BIND_CONTRACT; - VALIDATE_ARG_RET(ppIAssemblyLocation != nullptr); - return this->QueryInterface(ppIAssemblyLocation); - } - - //----------------------------------------------------------------------------------------------------------------- - HRESULT CLRPrivAssemblyBindResultWrapper::GetNativeImage( - /*out*/ IBindResult **ppIBindResultNI, - /*out*/ BOOL *pfIBindResultNIProbed) - { - LIMITED_METHOD_CONTRACT; - - // m_bIBindResultNISet must always be read *before* m_pIBindResultNI - bool bIBindResultNISet = m_bIBindResultNISet; - - if (pfIBindResultNIProbed != nullptr) - *pfIBindResultNIProbed = bIBindResultNISet; - - if (bIBindResultNISet && ppIBindResultNI != nullptr) - *ppIBindResultNI = clr::SafeAddRef(m_pIBindResultNI); - - return S_OK; - } - - //----------------------------------------------------------------------------------------------------------------- - HRESULT CLRPrivAssemblyBindResultWrapper::SetNativeImage( - /*in*/ IBindResult *pIBindResultNI, - /*out*/ IBindResult **ppIBindResultNIFinal) - { - STANDARD_BIND_CONTRACT; - HRESULT hr = S_OK; - - EX_TRY - { - // Native Binder needs S_FALSE returned if it loses the race. - hr = S_FALSE; - - if (!m_bIBindResultNISet) - { - CrstHolder lock(&m_lock); - if (!m_bIBindResultNISet) - { - m_pIBindResultNI = clr::SafeAddRef(pIBindResultNI); - m_bIBindResultNISet = true; - - // Won the race! - hr = S_OK; - } - } - } - EX_CATCH_HRESULT(hr); - - if (ppIBindResultNIFinal != nullptr) - *ppIBindResultNIFinal = clr::SafeAddRef(m_pIBindResultNI); - - return hr; - } - - //----------------------------------------------------------------------------------------------------------------- - HRESULT CLRPrivAssemblyBindResultWrapper::IsEqual( - /*in*/ IUnknown *pIUnk) - { - STANDARD_BIND_CONTRACT; - HRESULT hr = S_OK; - - VALIDATE_ARG_RET(pIUnk != nullptr); - - ReleaseHolder<IBindResult> pIBindResult; - - hr = pIUnk->QueryInterface(__uuidof(IBindResult), (void **)&pIBindResult); - if (SUCCEEDED(hr)) - { - hr = pIBindResult == static_cast<IBindResult*>(this) ? S_OK : S_FALSE; - } - else if (hr == E_NOINTERFACE) - { - hr = S_FALSE; - } - - return hr; - } - - //----------------------------------------------------------------------------------------------------------------- - HRESULT CLRPrivAssemblyBindResultWrapper::GetNextAssemblyNameRef( - /*in*/ DWORD dwNIndex, - /*out*/ IAssemblyName **ppIAssemblyNameRef) - { - STANDARD_BIND_CONTRACT; - _ASSERTE(!("E_UNEXPECTED: " __FUNCTION__)); - return E_UNEXPECTED; - } - - //----------------------------------------------------------------------------------------------------------------- - HRESULT CLRPrivAssemblyBindResultWrapper::GetNextDependentAssembly( - /*in*/ DWORD dwNIndex, - /*out*/ IUnknown **ppIUnknownAssembly) - { - STANDARD_BIND_CONTRACT; - _ASSERTE(!("E_UNEXPECTED: " __FUNCTION__)); - return E_UNEXPECTED; - } - - //----------------------------------------------------------------------------------------------------------------- - HRESULT CLRPrivAssemblyBindResultWrapper::GetAssemblyLocationOfILImage( - /*out*/ IAssemblyLocation **ppAssemblyLocation) - { - LIMITED_METHOD_CONTRACT; - return this->QueryInterface(ppAssemblyLocation); - } - - //----------------------------------------------------------------------------------------------------------------- - HRESULT CLRPrivAssemblyBindResultWrapper::GetILFingerprint( - /*out*/ IILFingerprint **ppFingerprint) - { - STANDARD_BIND_CONTRACT; - HRESULT hr = S_OK; - - VALIDATE_ARG_RET(ppFingerprint != nullptr); - - EX_TRY - { - *ppFingerprint = m_pIILFingerprint; - if (*ppFingerprint == nullptr) - { - ReleaseHolder<IILFingerprint> pFingerprint; - if (SUCCEEDED(hr = m_pILFingerprintFactory->GetILFingerprintForPath(GetILAssemblyPath(), &pFingerprint))) - { - if (InterlockedCompareExchangeT<IILFingerprint>(&m_pIILFingerprint, pFingerprint, nullptr) == nullptr) - { - pFingerprint.SuppressRelease(); - } - } - } - *ppFingerprint = clr::SafeAddRef(m_pIILFingerprint); - } - EX_CATCH_HRESULT(hr); - - return hr; - } - - //----------------------------------------------------------------------------------------------------------------- - HRESULT CLRPrivAssemblyBindResultWrapper::GetSourceILTimestamp( - /*out*/ FILETIME* pFileTime) - { - STANDARD_BIND_CONTRACT; - HRESULT hr = S_OK; - - VALIDATE_ARG_RET(pFileTime != nullptr); - - EX_TRY - { - WIN32_FILE_ATTRIBUTE_DATA wfd; - if (!WszGetFileAttributesEx(GetILAssemblyPath(), GetFileExInfoStandard, &wfd)) - ThrowLastError(); - *pFileTime = wfd.ftLastWriteTime; - } - EX_CATCH_HRESULT(hr); - - return hr; - } - - //----------------------------------------------------------------------------------------------------------------- - HRESULT CLRPrivAssemblyBindResultWrapper::GetSourceILSize( - /*out*/ DWORD* pSize) - { - STANDARD_BIND_CONTRACT; - HRESULT hr = S_OK; - - VALIDATE_ARG_RET(pSize != nullptr); - - EX_TRY - { - WIN32_FILE_ATTRIBUTE_DATA wfd; - if (!WszGetFileAttributesEx(GetILAssemblyPath(), GetFileExInfoStandard, &wfd)) - ThrowLastError(); - if(wfd.nFileSizeHigh != 0) - ThrowHR(COR_E_OVERFLOW); - *pSize = wfd.nFileSizeLow; - } - EX_CATCH_HRESULT(hr); - - return hr; - } - - //----------------------------------------------------------------------------------------------------------------- - HRESULT CLRPrivAssemblyBindResultWrapper::GetNIInfo( - /*out*/ INativeImageInstallInfo** pInfo) - { - STANDARD_BIND_CONTRACT; - _ASSERTE(!("E_UNEXPECTED: " __FUNCTION__)); - return E_UNEXPECTED; - } - - //----------------------------------------------------------------------------------------------------------------- - HRESULT CLRPrivAssemblyBindResultWrapper::GetFlags( - /*out*/ DWORD * pdwFlags) - { - STANDARD_BIND_CONTRACT; - PRECONDITION(CheckPointer(pdwFlags)); - if (pdwFlags == nullptr) - { - return E_POINTER; - } - - // Currently, no effort is made to open assemblies and build a full IAssemblyName - this currently - // only contains the simple name. Since AppX packages cannot be in-place updated we can be confident - // that the binding environment will remain unchanged between NGEN and runtime. As such, return the - // flag to indicate that the native image binder should skip self assembly definition validation. - *pdwFlags = IBindResultFlag_AssemblyNameDefIncomplete; - - return S_OK; - } - - //----------------------------------------------------------------------------------------------------------------- - HRESULT CLRPrivAssemblyBindResultWrapper::GetLocationType( - /*out*/DWORD *pdwLocationType) - { - LIMITED_METHOD_CONTRACT; - VALIDATE_ARG_RET(pdwLocationType != nullptr); - - if (pdwLocationType == nullptr) - return E_INVALIDARG; - *pdwLocationType = ASSEMBLY_LOCATION_PATH; - return S_OK; - } - - //----------------------------------------------------------------------------------------------------------------- - HRESULT CLRPrivAssemblyBindResultWrapper::GetPath( - __inout_ecount(*pdwccAssemblyPath) LPWSTR pwzAssemblyPath, - /*in, annotation("__inout")*/ LPDWORD pdwccAssemblyPath) - { - STANDARD_BIND_CONTRACT; - HRESULT hr = S_OK; - - VALIDATE_ARG_RET(pdwccAssemblyPath != nullptr); - - EX_TRY - { - DWORD cchILAssemblyPath = static_cast<DWORD>(wcslen(GetILAssemblyPath())) + 1; - if (pwzAssemblyPath != nullptr && cchILAssemblyPath <= *pdwccAssemblyPath) - { - IfFailThrow(StringCchCopy(pwzAssemblyPath, *pdwccAssemblyPath, GetILAssemblyPath())); - *pdwccAssemblyPath = cchILAssemblyPath; - hr = S_OK; - } - else - { - *pdwccAssemblyPath = cchILAssemblyPath; - hr = HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER); - } - } - EX_CATCH_HRESULT(hr); - - return hr; - } - - //----------------------------------------------------------------------------------------------------------------- - HRESULT CLRPrivAssemblyBindResultWrapper::GetHostID( - /*out*/ UINT64 *puiHostID) - { - STANDARD_BIND_CONTRACT; - _ASSERTE(!("E_UNEXPECTED: " __FUNCTION__)); - return E_UNEXPECTED; - } -#endif //FEATURE_FUSION //----------------------------------------------------------------------------------------------------------------- HRESULT VerifyBind( @@ -661,49 +340,6 @@ namespace CLRPrivBinderUtil return hr; } -#ifdef FEATURE_FUSION - //===================================================================================================================== - HRESULT AssemblyIdentity::Initialize( - AssemblySpec * pSpec) - { - CONTRACTL - { - NOTHROW; - GC_NOTRIGGER; - FORBID_FAULT; - MODE_ANY; - CAN_TAKE_LOCK; - } - CONTRACTL_END - - HRESULT hr = S_OK; - - if (0 == WszMultiByteToWideChar( - CP_UTF8, 0 /*flags*/, pSpec->GetName(), -1, Name, (int) (sizeof(Name) / sizeof(Name[0])))) - { - return HRESULT_FROM_GetLastError(); - } - - AssemblyMetaDataInternal * pAMDI = pSpec->GetContext(); - if (pAMDI != nullptr) - { - Version.wMajor = pAMDI->usMajorVersion; - Version.wMinor = pAMDI->usMinorVersion; - Version.wBuild = pAMDI->usBuildNumber; - Version.wRevision = pAMDI->usRevisionNumber; - } - - if (pSpec->HasPublicKeyToken()) - { - PBYTE pbKey; - DWORD cbKey; - pSpec->GetPublicKeyToken(&pbKey, &cbKey); - IfFailRet(KeyToken.Initialize(pbKey, cbKey)); - } - - return hr; - } -#endif //===================================================================================================================== @@ -731,101 +367,4 @@ namespace CLRPrivBinderUtil //////////////////////////////////////////////////////////////////////////////////////////////////// ///// ----------------------------- Direct calls to VM ------------------------------------------- //////////////////////////////////////////////////////////////////////////////////////////////////// -#if defined(FEATURE_APPX_BINDER) - ICLRPrivAssembly* RaiseAssemblyResolveEvent(IAssemblyName *pAssemblyName, ICLRPrivAssembly* pRequestingAssembly) - { - CONTRACT(ICLRPrivAssembly*) - { - THROWS; - GC_TRIGGERS; - MODE_ANY; - PRECONDITION(AppX::IsAppXProcess()); - PRECONDITION(AppDomain::GetCurrentDomain()->IsDefaultDomain()); - POSTCONDITION(CheckPointer(RETVAL, NULL_OK)); - INJECT_FAULT(COMPlusThrowOM();); - } - CONTRACT_END; - - BinderMethodID methodId; - - methodId = METHOD__APP_DOMAIN__ON_ASSEMBLY_RESOLVE; // post-bind execution event (the classic V1.0 event) - - // Elevate threads allowed loading level. This allows the host to load an assembly even in a restricted - // condition. Note, however, that this exposes us to possible recursion failures, if the host tries to - // load the assemblies currently being loaded. (Such cases would then throw an exception.) - - OVERRIDE_LOAD_LEVEL_LIMIT(FILE_ACTIVE); - OVERRIDE_TYPE_LOAD_LEVEL_LIMIT(CLASS_LOADED); - - DomainAssembly* pDomainAssembly = AppDomain::GetCurrentDomain()->FindAssembly(pRequestingAssembly); - - GCX_COOP(); - - Assembly* pAssembly = NULL; - - struct _gc { - OBJECTREF AppDomainRef; - OBJECTREF AssemblyRef; - STRINGREF str; - } gc; - ZeroMemory(&gc, sizeof(gc)); - - SString ssAssemblyName; - FusionBind::GetAssemblyNameDisplayName(pAssemblyName, ssAssemblyName); - - GCPROTECT_BEGIN(gc); - if ((gc.AppDomainRef = GetAppDomain()->GetRawExposedObject()) != NULL) - { - gc.AssemblyRef = pDomainAssembly->GetExposedAssemblyObject(); - - MethodDescCallSite onAssemblyResolve(methodId, &gc.AppDomainRef); - - gc.str = StringObject::NewString(ssAssemblyName.GetUnicode()); - ARG_SLOT args[3] = { - ObjToArgSlot(gc.AppDomainRef), - ObjToArgSlot(gc.AssemblyRef), - ObjToArgSlot(gc.str) - }; - ASSEMBLYREF ResultingAssemblyRef = (ASSEMBLYREF) onAssemblyResolve.Call_RetOBJECTREF(args); - if (ResultingAssemblyRef != NULL) - { - pAssembly = ResultingAssemblyRef->GetAssembly(); - } - } - GCPROTECT_END(); - - if (pAssembly != NULL) - { - if (pAssembly->IsIntrospectionOnly()) - { - // Cannot return an introspection assembly from an execution callback or vice-versa - COMPlusThrow(kFileLoadException, IDS_CLASSLOAD_ASSEMBLY_RESOLVE_RETURNED_INTROSPECTION ); - } - if (pAssembly->IsCollectible()) - { - COMPlusThrow(kNotSupportedException, W("NotSupported_CollectibleAssemblyResolve")); - } - - // Check that the public key token matches the one specified in the spec - // MatchPublicKeys throws as appropriate. - - StackScratchBuffer ssBuffer; - AssemblySpec spec; - IfFailThrow(spec.Init(ssAssemblyName.GetUTF8(ssBuffer))); - spec.MatchPublicKeys(pAssembly); - - } - - if (pAssembly == nullptr) - ThrowHR(COR_E_FILENOTFOUND); - - RETURN pAssembly->GetManifestFile()->GetHostAssembly(); - } - - BOOL CompareHostBinderSpecs(AssemblySpec * a1, AssemblySpec * a2) - { - WRAPPER_NO_CONTRACT; - return a1->CompareEx(a2, AssemblySpec::ASC_Default); - } -#endif // FEATURE_APPX } // namespace CLRPrivBinderUtil |