}
// ---------------------------------------------------------------------------
-// CAssemblyName::Finalize
-// ---------------------------------------------------------------------------
-STDMETHODIMP
-CAssemblyName::Finalize()
-{
- BEGIN_ENTRYPOINT_NOTHROW;
-
- _fIsFinalized = TRUE;
- END_ENTRYPOINT_NOTHROW;
-
- return S_OK;
-}
-// ---------------------------------------------------------------------------
-// CAssemblyName::GetDisplayName
-// ---------------------------------------------------------------------------
-STDMETHODIMP
-CAssemblyName::GetDisplayName( __out_ecount_opt(*pccDisplayName) LPOLESTR szDisplayName,
- __inout LPDWORD pccDisplayName,
- DWORD dwDisplayFlags)
-{
- HRESULT hr = S_OK;
-
- BEGIN_ENTRYPOINT_NOTHROW;
-
- if (!dwDisplayFlags) {
- dwDisplayFlags = ASM_DISPLAYF_DEFAULT;
- }
-
- // Validate input buffer.
- if(!pccDisplayName || (!szDisplayName && *pccDisplayName)) {
- hr = E_INVALIDARG;
- goto exit;
- }
-
- EX_TRY
- {
- NewHolder<BINDER_SPACE::AssemblyIdentity> pAssemblyIdentity = new BINDER_SPACE::AssemblyIdentity();
- FusionProperty prop;
- StackSString textualIdentity;
-
- // Name required
- prop = _rProp[ASM_NAME_NAME];
- if (prop.cb == 0) {
- hr = FUSION_E_INVALID_NAME;
- goto exit;
- }
- else {
- _ASSERTE(prop.cb >= sizeof(WCHAR));
-
- pAssemblyIdentity->m_simpleName.Set((const WCHAR *) prop.pv,
- (prop.cb - sizeof(WCHAR)) / sizeof(WCHAR));
- pAssemblyIdentity->SetHave(BINDER_SPACE::AssemblyIdentity::IDENTITY_FLAG_SIMPLE_NAME);
- }
-
- // Display version
- if (dwDisplayFlags & ASM_DISPLAYF_VERSION) {
- prop = _rProp[ASM_NAME_MAJOR_VERSION];
-
- // Set version if we have it
- if (prop.cb != 0) {
- DWORD dwVersionParts[4];
-
- for(DWORD i = 0; i < 4; i++) {
- prop = _rProp[ASM_NAME_MAJOR_VERSION + i];
-
- // Normalize non-existing version parts to zero
- if (prop.cb == sizeof(WORD)) {
- dwVersionParts[i] = (DWORD) (* ((WORD *) prop.pv));
- }
- else {
- dwVersionParts[i] = 0;
- }
- }
-
- pAssemblyIdentity->m_version.SetFeatureVersion(dwVersionParts[0], dwVersionParts[1]);
- pAssemblyIdentity->m_version.SetServiceVersion(dwVersionParts[2], dwVersionParts[3]);
- pAssemblyIdentity->SetHave(BINDER_SPACE::AssemblyIdentity::IDENTITY_FLAG_VERSION);
- }
- }
-
- // Display culture
- if (dwDisplayFlags & ASM_DISPLAYF_CULTURE) {
- prop = _rProp[ASM_NAME_CULTURE];
-
- if (prop.cb != 0) {
- _ASSERTE(prop.cb >= sizeof(WCHAR));
-
- if (((const WCHAR *) prop.pv)[0] != 0x00) {
- pAssemblyIdentity->m_cultureOrLanguage.
- Set((const WCHAR *) prop.pv,
- (prop.cb - sizeof(WCHAR)) / sizeof(WCHAR));
- }
-
- pAssemblyIdentity->SetHave(BINDER_SPACE::AssemblyIdentity::IDENTITY_FLAG_CULTURE);
- }
- }
-
- // Display public key token
- if ((dwDisplayFlags & ASM_DISPLAYF_PUBLIC_KEY_TOKEN) && _fPublicKeyToken) {
- prop = _rProp[ASM_NAME_PUBLIC_KEY_TOKEN];
-
- if (prop.cb != 0) {
- pAssemblyIdentity->m_publicKeyOrTokenBLOB.Set((const BYTE *) prop.pv, prop.cb);
- pAssemblyIdentity->SetHave(BINDER_SPACE::AssemblyIdentity::IDENTITY_FLAG_PUBLIC_KEY_TOKEN);
- }
- else {
- pAssemblyIdentity->
- SetHave(BINDER_SPACE::AssemblyIdentity::IDENTITY_FLAG_PUBLIC_KEY_TOKEN_NULL);
- }
- }
-
- // Display processor architecture
- if (dwDisplayFlags & ASM_DISPLAYF_PROCESSORARCHITECTURE) {
- if (_rProp[ASM_NAME_ARCHITECTURE].cb != 0) {
- DWORD PeKind = *((LPDWORD)_rProp[ASM_NAME_ARCHITECTURE].pv);
-
- if (PeKind != peNone) {
- pAssemblyIdentity->m_kProcessorArchitecture = (PEKIND) PeKind;
- pAssemblyIdentity->
- SetHave(BINDER_SPACE::AssemblyIdentity::IDENTITY_FLAG_PROCESSOR_ARCHITECTURE);
- }
- }
- }
-
- // Display retarget flag
- if (dwDisplayFlags & ASM_DISPLAYF_RETARGET) {
- prop = _rProp[ASM_NAME_RETARGET];
-
- if (prop.cb != 0) {
- BOOL fRetarget = *((LPBOOL) prop.pv);
-
- if (fRetarget)
- {
- pAssemblyIdentity->SetHave(BINDER_SPACE::AssemblyIdentity::IDENTITY_FLAG_RETARGETABLE);
- }
- }
- }
-
- // Display content type
- if (dwDisplayFlags & ASM_DISPLAYF_CONTENT_TYPE)
- {
- prop = _rProp[ASM_NAME_CONTENT_TYPE];
- if (prop.cb != 0)
- {
- DWORD dwContentType = *((LPDWORD)prop.pv);
- if (dwContentType != AssemblyContentType_Default)
- {
- pAssemblyIdentity->SetHave(BINDER_SPACE::AssemblyIdentity::IDENTITY_FLAG_CONTENT_TYPE);
- pAssemblyIdentity->m_kContentType = (AssemblyContentType)dwContentType;
- }
- }
- }
-
- // Display custom flag
- if ((dwDisplayFlags & ASM_DISPLAYF_CUSTOM) && _fCustom) {
- prop = _rProp[ASM_NAME_CUSTOM];
-
- if (prop.cb != 0) {
- pAssemblyIdentity->m_customBLOB.Set((const BYTE *) prop.pv, prop.cb);
- pAssemblyIdentity->SetHave(BINDER_SPACE::AssemblyIdentity::IDENTITY_FLAG_CUSTOM);
- }
- else {
- pAssemblyIdentity->SetHave(BINDER_SPACE::AssemblyIdentity::IDENTITY_FLAG_CUSTOM_NULL);
- }
- }
-
- // Create the textual identity
- hr = BINDER_SPACE::TextualIdentityParser::ToString(pAssemblyIdentity,
- pAssemblyIdentity->m_dwIdentityFlags,
- textualIdentity);
- if (FAILED(hr)) {
- goto exit;
- }
-
- // Determine required buffer size
- DWORD dwGivenSize = *pccDisplayName;
- DWORD dwRequiredSize = textualIdentity.GetCount() + 1;
-
- *pccDisplayName = dwRequiredSize;
-
- if (dwRequiredSize > dwGivenSize) {
- hr = HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER);
-
- if (szDisplayName) {
- szDisplayName[0] = 0x00;
- }
- goto exit;
- }
- else {
- hr = S_OK;
- memcpy(szDisplayName, textualIdentity.GetUnicode(), dwRequiredSize * sizeof(WCHAR));
- }
- }
- EX_CATCH_HRESULT(hr);
-
- exit:
- END_ENTRYPOINT_NOTHROW;
- return hr;
-}
-
-// ---------------------------------------------------------------------------
// CAssemblyName::GetName
// ---------------------------------------------------------------------------
STDMETHODIMP
}
// ---------------------------------------------------------------------------
-// CAssemblyName::GetVersion
-// ---------------------------------------------------------------------------
-STDMETHODIMP
-CAssemblyName::GetVersion(
- /* [out] */ LPDWORD pdwVersionHi,
- /* [out] */ LPDWORD pdwVersionLow)
-{
- HRESULT hr = S_OK;
- BEGIN_ENTRYPOINT_NOTHROW;
-
- // Get Assembly Version
- hr = GetVersion( ASM_NAME_MAJOR_VERSION, pdwVersionHi, pdwVersionLow);
-
- END_ENTRYPOINT_NOTHROW;
- return hr;
-}
-
-// ---------------------------------------------------------------------------
-// CAssemblyName::IsEqual
-// ---------------------------------------------------------------------------
-STDMETHODIMP
-CAssemblyName::IsEqual(LPASSEMBLYNAME pName, DWORD dwCmpFlags)
-{
- HRESULT hr = S_OK;
-
- BEGIN_ENTRYPOINT_NOTHROW;
-
- DWORD dwPartialCmpMask = 0;
- BOOL fIsPartial = FALSE;
- CAssemblyName *pCName = static_cast<CAssemblyName *>(pName);
-
- const DWORD SIMPLE_VERSION_MASK = ASM_CMPF_VERSION;
-
- FusionProperty propThis;
- FusionProperty propPara;
-
- if(!pName) {
- hr = S_FALSE;
- goto Exit;
- }
-
- // Get the ref partial comparison mask, if any.
- fIsPartial = CAssemblyName::IsPartial(this, &dwPartialCmpMask);
-
- if (dwCmpFlags == ASM_CMPF_DEFAULT) {
- // Set all comparison flags.
- dwCmpFlags = ASM_CMPF_IL_ALL | ASM_CMPF_ARCHITECTURE;
-
- // don't compare architecture if ref does not have architecture.
- if (!(dwPartialCmpMask & ASM_CMPF_ARCHITECTURE)) {
- dwCmpFlags &= ~ASM_CMPF_ARCHITECTURE;
- }
-
- // Otherwise, if ref is simple (possibly partial)
- // we mask off all version bits.
- if (!CAssemblyName::IsStronglyNamed(this))
- {
- // we don't have a public key token, but we don't know
- // it is because we are simply named assembly or we are
- // just partial on public key token.
- if (dwPartialCmpMask & ASM_CMPF_PUBLIC_KEY_TOKEN)
- {
- // now we know we are simply named assembly since we
- // have a public key token, but it is NULL.
- dwCmpFlags &= ~SIMPLE_VERSION_MASK;
- }
- // If neither of these two cases then public key token
- // is not set in ref , but def may be simple or strong.
- // The comparison mask is chosen based on def.
- else
- {
- if (!CAssemblyName::IsStronglyNamed(pName))
- dwCmpFlags &= ~SIMPLE_VERSION_MASK;
- }
- }
- }
-
- // Mask off flags (either passed in or generated
- // by default flag with the comparison mask generated
- // from the ref.
- dwCmpFlags &= dwPartialCmpMask;
-
-
- // The individual name fields can now be compared..
-
- // Compare name
-
- if (dwCmpFlags & ASM_CMPF_NAME)
- {
- propThis = _rProp[ASM_NAME_NAME];
- propPara = pCName->_rProp[ASM_NAME_NAME];
-
- if (propThis.cb != propPara.cb)
- {
- hr = S_FALSE;
- goto Exit;
- }
-
- if (propThis.cb && FusionCompareStringI((LPWSTR)propThis.pv, (LPWSTR)propPara.pv))
- {
- hr = S_FALSE;
- goto Exit;
- }
- }
-
- // Compare version
-
- if (dwCmpFlags & ASM_CMPF_MAJOR_VERSION)
- {
- propThis = _rProp[ASM_NAME_MAJOR_VERSION];
- propPara = pCName->_rProp[ASM_NAME_MAJOR_VERSION];
-
- if (*((LPWORD) propThis.pv) != *((LPWORD)propPara.pv))
- {
- hr = S_FALSE;
- goto Exit;
- }
- }
-
- if (dwCmpFlags & ASM_CMPF_MINOR_VERSION)
- {
- propThis = _rProp[ASM_NAME_MINOR_VERSION];
- propPara = pCName->_rProp[ASM_NAME_MINOR_VERSION];
-
- if (*((LPWORD) propThis.pv) != *((LPWORD)propPara.pv))
- {
- hr = S_FALSE;
- goto Exit;
- }
- }
-
- if (dwCmpFlags & ASM_CMPF_REVISION_NUMBER)
- {
- propThis = _rProp[ASM_NAME_REVISION_NUMBER];
- propPara = pCName->_rProp[ASM_NAME_REVISION_NUMBER];
-
- if (*((LPWORD) propThis.pv) != *((LPWORD)propPara.pv))
- {
- hr = S_FALSE;
- goto Exit;
- }
- }
-
- if (dwCmpFlags & ASM_CMPF_BUILD_NUMBER)
- {
- propThis = _rProp[ASM_NAME_BUILD_NUMBER];
- propPara = pCName->_rProp[ASM_NAME_BUILD_NUMBER];
-
- if (*((LPWORD) propThis.pv) != *((LPWORD)propPara.pv))
- {
- hr = S_FALSE;
- goto Exit;
- }
- }
-
- // Compare public key token
-
- if (dwCmpFlags & ASM_CMPF_PUBLIC_KEY_TOKEN)
- {
- // compare public key if both of them have public key set.
- propThis = _rProp[ASM_NAME_PUBLIC_KEY];
- propPara = pCName->_rProp[ASM_NAME_PUBLIC_KEY];
- if (!propThis.cb || !propPara.cb) {
- // otherwise, compare public key token
- propThis = _rProp[ASM_NAME_PUBLIC_KEY_TOKEN];
- propPara = pCName->_rProp[ASM_NAME_PUBLIC_KEY_TOKEN];
- }
-
- if (propThis.cb != propPara.cb) {
- hr = S_FALSE;
- goto Exit;
- }
-
- if (propThis.cb && memcmp(propThis.pv, propPara.pv, propThis.cb)) {
- hr = S_FALSE;
- goto Exit;
- }
- }
-
- // Compare Culture
-
- if (dwCmpFlags & ASM_CMPF_CULTURE)
- {
- propThis = _rProp[ASM_NAME_CULTURE];
- propPara = pCName->_rProp[ASM_NAME_CULTURE];
-
- if (propThis.cb != propPara.cb)
- {
- hr = S_FALSE;
- goto Exit;
- }
-
- if (propThis.cb && FusionCompareStringI((LPWSTR)propThis.pv, (LPWSTR)propPara.pv))
- {
- hr = S_FALSE;
- goto Exit;
- }
- }
-
- // Compare Custom attribute.
-
- if (dwCmpFlags & ASM_CMPF_CUSTOM)
- {
- propThis = _rProp[ASM_NAME_PUBLIC_KEY_TOKEN];
- propPara = pCName->_rProp[ASM_NAME_PUBLIC_KEY_TOKEN];
-
- if (propThis.cb != propPara.cb) {
- hr = S_FALSE;
- goto Exit;
- }
-
- if (propThis.cb && memcmp(propThis.pv, propPara.pv, propThis.cb)) {
- hr = S_FALSE;
- goto Exit;
- }
- }
-
- // Compare Retarget flag
- if (dwCmpFlags & ASM_CMPF_RETARGET)
- {
- propThis = _rProp[ASM_NAME_RETARGET];
- propPara = pCName->_rProp[ASM_NAME_RETARGET];
-
- if (*((LPDWORD) propThis.pv) != *((LPDWORD)propPara.pv))
- {
- hr = S_FALSE;
- goto Exit;
- }
- }
-
- // compare config mask
- if (dwCmpFlags & ASM_CMPF_CONFIG_MASK)
- {
- propThis = _rProp[ASM_NAME_CONFIG_MASK];
- propPara = pCName->_rProp[ASM_NAME_CONFIG_MASK];
-
- if (*((LPDWORD) propThis.pv) != *((LPDWORD)propPara.pv))
- {
- hr = S_FALSE;
- goto Exit;
- }
-
- }
-
- // compare architecture
- if (dwCmpFlags & ASM_CMPF_ARCHITECTURE)
- {
- propThis = _rProp[ASM_NAME_ARCHITECTURE];
- propPara = pCName->_rProp[ASM_NAME_ARCHITECTURE];
-
- if (propThis.cb != propPara.cb) {
- hr = S_FALSE;
- goto Exit;
- }
-
- if (propThis.cb) {
- if (*((LPDWORD) propThis.pv) != *((LPDWORD)propPara.pv)) {
- hr = S_FALSE;
- goto Exit;
- }
- }
- }
-
- // Compare content type
- if (dwCmpFlags & ASM_CMPF_CONTENT_TYPE)
- {
- propThis = _rProp[ASM_NAME_CONTENT_TYPE];
- propPara = pCName->_rProp[ASM_NAME_CONTENT_TYPE];
-
- if (*((LPDWORD)propThis.pv) != *((LPDWORD)propPara.pv))
- {
- hr = S_FALSE;
- goto Exit;
- }
- }
-
- // compare MVID
- if (dwCmpFlags & ASM_CMPF_MVID)
- {
- propThis = _rProp[ASM_NAME_MVID];
- propPara = pCName->_rProp[ASM_NAME_MVID];
-
- if (propThis.cb != propPara.cb) {
- hr = S_FALSE;
- goto Exit;
- }
-
- if (propThis.cb && memcmp(propThis.pv, propPara.pv, propThis.cb)) {
- hr = S_FALSE;
- goto Exit;
- }
- }
-
- // compare Signature
- if (dwCmpFlags & ASM_CMPF_SIGNATURE)
- {
- propThis = _rProp[ASM_NAME_SIGNATURE_BLOB];
- propPara = pCName->_rProp[ASM_NAME_SIGNATURE_BLOB];
-
- if (propThis.cb != propPara.cb) {
- hr = S_FALSE;
- goto Exit;
- }
-
- if (propThis.cb && memcmp(propThis.pv, propPara.pv, propThis.cb)) {
- hr = S_FALSE;
- goto Exit;
- }
- }
-
- hr = S_OK;
-Exit:
- END_ENTRYPOINT_NOTHROW;
- return hr;
-}
-
-// ---------------------------------------------------------------------------
-// CAssemblyName::Reserved
-// ---------------------------------------------------------------------------
-STDMETHODIMP
-CAssemblyName::Reserved(
- /* in */ REFIID refIID,
- /* in */ IUnknown *pUnkBindSink,
- /* in */ IUnknown *pUnkAppCtx,
- /* in */ LPCOLESTR szCodebaseIn,
- /* in */ LONGLONG llFlags,
- /* in */ LPVOID pvReserved,
- /* in */ DWORD cbReserved,
- /* out */ VOID **ppv)
-{
- return E_NOTIMPL;
-}
-
-// ---------------------------------------------------------------------------
-// CAssemblyName::Clone
-// ---------------------------------------------------------------------------
-HRESULT CAssemblyName::Clone(IAssemblyName **ppName)
-{
- HRESULT hr = S_OK;
-
- BEGIN_ENTRYPOINT_NOTHROW;
-
- CAssemblyName *pClone = NULL;
-
- if (!ppName) {
- hr = E_INVALIDARG;
- goto Exit;
- }
-
- *ppName = NULL;
-
- pClone = NEW(CAssemblyName);
- if( !pClone ) {
- hr = E_OUTOFMEMORY;
- goto Exit;
- }
-
- hr = CopyProperties(this, pClone, NULL, 0);
- if (FAILED(hr)) {
- goto Exit;
- }
-
- *ppName = pClone;
- (*ppName)->AddRef();
-
-Exit:
- SAFERELEASE(pClone);
-
- END_ENTRYPOINT_NOTHROW;
-
- return hr;
-}
-
-// ---------------------------------------------------------------------------
// CAssemblyName::SetPropertyInternal
// ---------------------------------------------------------------------------
HRESULT CAssemblyName::SetPropertyInternal(DWORD PropertyId,
LPBYTE pbSN = NULL;
DWORD cbSN = 0;
- // Fail if finalized.
- if (_fIsFinalized)
- {
- _ASSERTE(!"SetProperty on a IAssemblyName while the name is finalized!");
- hr = E_UNEXPECTED;
- goto exit;
- }
-
if (PropertyId >= ASM_NAME_MAX_PARAMS
|| (!pvProperty && cbProperty))
{
return hr;
}
-
-
-// ---------------------------------------------------------------------------
-// CheckFieldsForFriendAssembly
-// ---------------------------------------------------------------------------
-STDAPI
-CheckFieldsForFriendAssembly(
- LPASSEMBLYNAME pAssemblyName)
-{
- HRESULT hr = S_OK;
- DWORD dwSize=0;
-
- // Let's look at the information they gave us in the friends declaration.
- // If they put in a Processor Architecture, Culture, or Version, then we'll return an error.
-
- if (FAILED(hr = pAssemblyName->GetProperty(ASM_NAME_MAJOR_VERSION, NULL, &dwSize)) ||
- FAILED(hr = pAssemblyName->GetProperty(ASM_NAME_MINOR_VERSION, NULL, &dwSize)) ||
- FAILED(hr = pAssemblyName->GetProperty(ASM_NAME_BUILD_NUMBER, NULL, &dwSize)) ||
- FAILED(hr = pAssemblyName->GetProperty(ASM_NAME_REVISION_NUMBER, NULL, &dwSize)) ||
- FAILED(hr = pAssemblyName->GetProperty(ASM_NAME_CULTURE, NULL, &dwSize)) ||
- FAILED(hr = pAssemblyName->GetProperty(ASM_NAME_ARCHITECTURE, NULL, &dwSize)))
- {
- // If any of these calls failed due to an insufficient buffer, then that means
- // the assembly name contained them
- if (hr == HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER))
- hr = META_E_CA_BAD_FRIENDS_ARGS;
- } else {
- if (FAILED(hr = pAssemblyName->GetProperty(ASM_NAME_PUBLIC_KEY_TOKEN, NULL, &dwSize))) {
-
- //
- // Public Key token should not be passed to InternalsVisibleTo
- // attribute. This translates to the ASM_NAME_PUBLIC_KEY_TOKEN
- // property being set, while the full public key is not.
- //
-
- if (hr == HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER)) {
-
- dwSize = 0;
-
- if (FAILED(hr = pAssemblyName->GetProperty(ASM_NAME_PUBLIC_KEY, NULL, &dwSize))) {
- if (hr == HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER))
- hr = S_OK;
- } else {
- hr = META_E_CA_BAD_FRIENDS_ARGS;
- }
-
- }
- } else {
- hr = S_OK;
- }
- }
-
-
- return hr;
-}
-
// ---------------------------------------------------------------------------
// CreateAssemblyNameObject
// ---------------------------------------------------------------------------
CreateAssemblyNameObject(
LPASSEMBLYNAME *ppAssemblyName,
LPCOLESTR szAssemblyName,
- DWORD dwFlags,
- LPVOID pvReserved)
+ bool parseDisplayName)
{
HRESULT hr = S_OK;
goto exit;
}
- if (dwFlags & CANOF_PARSE_DISPLAY_NAME)
+ if (parseDisplayName)
{
hr = pName->Init(NULL, NULL);
if (FAILED(hr)) {
hr = pName->Init(szAssemblyName, NULL);
}
-
- if (SUCCEEDED(hr) && ((dwFlags & CANOF_VERIFY_FRIEND_ASSEMBLYNAME)))
- {
- hr = CheckFieldsForFriendAssembly(pName);
- }
-
-
if (FAILED(hr))
{
SAFERELEASE(pName);
CreateAssemblyNameObjectFromMetaData(
LPASSEMBLYNAME *ppAssemblyName,
LPCOLESTR szAssemblyName,
- ASSEMBLYMETADATA *pamd,
- LPVOID pvReserved)
+ ASSEMBLYMETADATA *pamd)
{
HRESULT hr = S_OK;
CAssemblyName::CAssemblyName()
{
_dwSig = 0x454d414e; /* 'EMAN' */
- _fIsFinalized = FALSE;
_fPublicKeyToken = FALSE;
_fCustom = TRUE;
_cRef = 1;
}
// ---------------------------------------------------------------------------
-// CAssemblyName::IsStronglyNamed
-// ---------------------------------------------------------------------------
-BOOL CAssemblyName::IsStronglyNamed(IAssemblyName *pName)
-{
- CAssemblyName *pCName = static_cast<CAssemblyName *> (pName);
- _ASSERTE(pCName);
-
- return (pCName->_rProp[ASM_NAME_PUBLIC_KEY_TOKEN].cb != 0);
-}
-
-// ---------------------------------------------------------------------------
-// CAssemblyName::IsPartial
-// ---------------------------------------------------------------------------
-BOOL CAssemblyName::IsPartial(IAssemblyName *pIName,
- LPDWORD pdwCmpMask)
-{
- DWORD dwCmpMask = 0;
- BOOL fPartial = FALSE;
-
- static const ASM_NAME rNameFlags[] ={ASM_NAME_NAME,
- ASM_NAME_CULTURE,
- ASM_NAME_PUBLIC_KEY_TOKEN,
- ASM_NAME_MAJOR_VERSION,
- ASM_NAME_MINOR_VERSION,
- ASM_NAME_BUILD_NUMBER,
- ASM_NAME_REVISION_NUMBER,
- ASM_NAME_CUSTOM
- };
-
- static const ASM_CMP_FLAGS rCmpFlags[] = {ASM_CMPF_NAME,
- ASM_CMPF_CULTURE,
- ASM_CMPF_PUBLIC_KEY_TOKEN,
- ASM_CMPF_MAJOR_VERSION,
- ASM_CMPF_MINOR_VERSION,
- ASM_CMPF_BUILD_NUMBER,
- ASM_CMPF_REVISION_NUMBER,
- ASM_CMPF_CUSTOM
- };
-
- CAssemblyName *pName = static_cast<CAssemblyName*> (pIName); // dynamic_cast
- _ASSERTE(pName);
-
- DWORD iNumOfComparison = sizeof(rNameFlags) / sizeof(rNameFlags[0]);
-
- for (DWORD i = 0; i < iNumOfComparison; i++)
- {
- if (pName->_rProp[rNameFlags[i]].cb
- || (rNameFlags[i] == ASM_NAME_PUBLIC_KEY_TOKEN
- && pName->_fPublicKeyToken)
- || (rNameFlags[i] == ASM_NAME_CUSTOM
- && pName->_fCustom))
- {
- dwCmpMask |= rCmpFlags[i];
- }
- else {
- fPartial = TRUE;
- }
- }
-
- if(pName->_rProp[ASM_NAME_ARCHITECTURE].cb) {
- dwCmpMask |= ASM_CMPF_ARCHITECTURE;
- }
-
- if (pName->_rProp[ASM_NAME_RETARGET].cb) {
- dwCmpMask |= ASM_CMPF_RETARGET;
- }
-
- if (pName->_rProp[ASM_NAME_CONTENT_TYPE].cb != 0)
- {
- dwCmpMask |= ASM_CMPF_CONTENT_TYPE;
- }
-
- if (pName->_rProp[ASM_NAME_CONFIG_MASK].cb) {
- dwCmpMask |= ASM_CMPF_CONFIG_MASK;
- }
-
- if (pName->_rProp[ASM_NAME_MVID].cb) {
- dwCmpMask |= ASM_CMPF_MVID;
- }
-
- if (pName->_rProp[ASM_NAME_SIGNATURE_BLOB].cb) {
- dwCmpMask |= ASM_CMPF_SIGNATURE;
- }
-
- if (pdwCmpMask)
- *pdwCmpMask = dwCmpMask;
-
- return fPartial;
-}
-
-// ---------------------------------------------------------------------------
// CAssemblyName::Init
// ---------------------------------------------------------------------------
HRESULT
return hr;
}
-// ---------------------------------------------------------------------------
-// CAssemblyName::GetVersion
-// ---------------------------------------------------------------------------
-HRESULT
-CAssemblyName::GetVersion(
- /* [in] */ DWORD dwMajorVersionEnumValue,
- /* [out] */ LPDWORD pdwVersionHi,
- /* [out] */ LPDWORD pdwVersionLow)
-{
- HRESULT hr = S_OK;
- DWORD cb = sizeof(WORD);
- WORD wVerMajor = 0, wVerMinor = 0, wRevNo = 0, wBldNo = 0;
-
- if(!pdwVersionHi || !pdwVersionLow) {
- hr = E_INVALIDARG;
- goto Exit;
- }
-
- *pdwVersionHi = *pdwVersionLow = 0;
-
- if(FAILED( (hr = GetProperty(dwMajorVersionEnumValue, &wVerMajor, &(cb = sizeof(WORD))))))
- goto Exit;
- if (cb == 0) {
- hr = FUSION_E_INVALID_NAME;
- goto Exit;
- }
-
- if(FAILED( (hr = GetProperty(dwMajorVersionEnumValue+1, &wVerMinor, &(cb = sizeof(WORD))))))
- goto Exit;
-
- if (cb == 0) {
- hr = FUSION_E_INVALID_NAME;
- goto Exit;
- }
-
- if(FAILED( (hr = GetProperty(dwMajorVersionEnumValue+2, &wBldNo, &(cb = sizeof(WORD))))))
- goto Exit;
- if (cb == 0) {
- hr = FUSION_E_INVALID_NAME;
- goto Exit;
- }
-
- if(FAILED( (hr = GetProperty(dwMajorVersionEnumValue+3, &wRevNo, &(cb = sizeof(WORD))))))
- goto Exit;
-
- if (cb == 0) {
- hr = FUSION_E_INVALID_NAME;
- goto Exit;
- }
-
- *pdwVersionHi = MAKELONG(wVerMinor, wVerMajor);
- *pdwVersionLow = MAKELONG(wRevNo, wBldNo);
-
-Exit:
- return hr;
-}
-
-// ---------------------------------------------------------------------------
-// CAssemblyName::CopyProperties
-// ---------------------------------------------------------------------------
-HRESULT
-CAssemblyName::CopyProperties(CAssemblyName *pSource,
- CAssemblyName *pTarget,
- const DWORD properties[],
- DWORD dwSize)
-{
- HRESULT hr = S_OK;
- DWORD i = 0;
- FusionProperty prop;
-
- _ASSERTE(pSource && pTarget);
-
- if (!dwSize) {
- for( i = 0; i < ASM_NAME_MAX_PARAMS; i ++) {
- prop = pSource->_rProp[i];
-
- if (prop.cb) {
- if (FAILED(hr = pTarget->SetProperty(i, prop.pv, prop.cb))) {
- goto Exit;
- }
- }
- }
- }
- else {
- for (i = 0; i<dwSize; i++) {
- _ASSERTE(properties[i] < ASM_NAME_MAX_PARAMS);
- prop = pSource->_rProp[properties[i]];
- if (prop.cb) {
- if (FAILED(hr = pTarget->SetProperty(properties[i], prop.pv, prop.cb))) {
- goto Exit;
- }
- }
- }
- }
-
- pTarget->_fPublicKeyToken = pSource->_fPublicKeyToken;
- pTarget->_fCustom = pSource->_fCustom;
-
- if (pSource->_pwzPathModifier) {
- pTarget->_pwzPathModifier = WSTRDupDynamic(pSource->_pwzPathModifier);
- if(!pTarget->_pwzPathModifier) {
- hr = E_OUTOFMEMORY;
- goto Exit;
- }
- }
-
-Exit:
- return hr;
-}
-
-namespace LegacyFusion
-{
- HRESULT SetStringProperty(IAssemblyName *pIAssemblyName,
- DWORD dwPropertyId,
- SString &value)
- {
- CAssemblyName *pAssemblyName = static_cast<CAssemblyName *>(pIAssemblyName);
- const WCHAR *pValue = value.GetUnicode();
- DWORD dwCBValue = (value.GetCount() + 1) * sizeof(WCHAR);
-
- return pAssemblyName->SetPropertyInternal(dwPropertyId,
- const_cast<WCHAR *>(pValue),
- dwCBValue);
- }
-
- HRESULT SetBufferProperty(IAssemblyName *pIAssemblyName,
- DWORD dwPropertyId,
- SBuffer &value)
- {
- CAssemblyName *pAssemblyName = static_cast<CAssemblyName *>(pIAssemblyName);
- const BYTE *pValue = value; // special operator
- DWORD dwCBValue = value.GetSize() * sizeof(BYTE);
-
- return pAssemblyName->SetPropertyInternal(dwPropertyId,
- const_cast<BYTE *>(pValue),
- dwCBValue);
- }
-
- HRESULT SetWordProperty(IAssemblyName *pIAssemblyName,
- DWORD dwPropertyId,
- DWORD dwValue)
- {
- CAssemblyName *pAssemblyName = static_cast<CAssemblyName *>(pIAssemblyName);
- WORD wValue = static_cast<WORD>(dwValue);
- DWORD wCBValue = sizeof(WORD);
-
- // This file-internal function is and must be only used to set version fields
- PREFIX_ASSUME((dwPropertyId == ASM_NAME_MAJOR_VERSION) ||
- (dwPropertyId == ASM_NAME_MINOR_VERSION) ||
- (dwPropertyId == ASM_NAME_BUILD_NUMBER) ||
- (dwPropertyId == ASM_NAME_REVISION_NUMBER));
-
- return pAssemblyName->SetPropertyInternal(dwPropertyId, &wValue, wCBValue);
- }
-
- HRESULT SetDwordProperty(IAssemblyName *pIAssemblyName,
- DWORD dwPropertyId,
- DWORD dwValue)
- {
- CAssemblyName *pAssemblyName = static_cast<CAssemblyName *>(pIAssemblyName);
- DWORD dwCBValue = sizeof(DWORD);
-
- return pAssemblyName->SetPropertyInternal(dwPropertyId, &dwValue, dwCBValue);
- }
-};
namespace fusion
{
namespace util
IfFailRet(hr);
return hr;
}
-
-
}
}
/* this ALWAYS GENERATED file contains the definitions for the interfaces */
- /* File created by MIDL compiler version 8.00.0603 */
+ /* File created by MIDL compiler version 8.01.0622 */
/* @@MIDL_FILE_HEADING( ) */
#pragma warning( disable: 4049 ) /* more than 64k source lines */
#ifndef __RPCNDR_H_VERSION__
#error this stub requires an updated version of <rpcndr.h>
-#endif // __RPCNDR_H_VERSION__
+#endif /* __RPCNDR_H_VERSION__ */
#ifndef COM_NO_WINDOWS_H
#include "windows.h"
#ifdef _MSC_VER
#pragma once
#endif
-
-
-
-
-#ifndef PEKIND_ENUM_DEFINED
-#define PEKIND_ENUM_DEFINED
-typedef
-enum _tagPEKIND
- {
- peNone = 0,
- peMSIL = 0x1,
- peI386 = 0x2,
- peIA64 = 0x3,
- peAMD64 = 0x4,
- peARM = 0x5,
- peARM64 = 0x6,
- peInvalid = 0xffffffff
- } PEKIND;
-
-#endif
typedef
enum _tagAssemblyContentType
{
typedef /* [public] */
enum __MIDL_IAssemblyName_0001
{
- CANOF_PARSE_DISPLAY_NAME = 0x1,
- CANOF_SET_DEFAULT_VALUES = 0x2,
- CANOF_VERIFY_FRIEND_ASSEMBLYNAME = 0x4,
- CANOF_PARSE_FRIEND_DISPLAY_NAME = ( CANOF_PARSE_DISPLAY_NAME | CANOF_VERIFY_FRIEND_ASSEMBLYNAME )
- } CREATE_ASM_NAME_OBJ_FLAGS;
-
-typedef /* [public] */
-enum __MIDL_IAssemblyName_0002
- {
ASM_NAME_PUBLIC_KEY = 0,
ASM_NAME_PUBLIC_KEY_TOKEN = ( ASM_NAME_PUBLIC_KEY + 1 ) ,
ASM_NAME_HASH_VALUE = ( ASM_NAME_PUBLIC_KEY_TOKEN + 1 ) ,
} ASM_NAME;
typedef /* [public] */
-enum __MIDL_IAssemblyName_0003
+enum __MIDL_IAssemblyName_0002
{
ASM_DISPLAYF_VERSION = 0x1,
ASM_DISPLAYF_CULTURE = 0x2,
ASM_DISPLAYF_FULL = ( ( ( ( ( ASM_DISPLAYF_VERSION | ASM_DISPLAYF_CULTURE ) | ASM_DISPLAYF_PUBLIC_KEY_TOKEN ) | ASM_DISPLAYF_RETARGET ) | ASM_DISPLAYF_PROCESSORARCHITECTURE ) | ASM_DISPLAYF_CONTENT_TYPE )
} ASM_DISPLAY_FLAGS;
-typedef /* [public] */
-enum __MIDL_IAssemblyName_0004
- {
- ASM_CMPF_NAME = 0x1,
- ASM_CMPF_MAJOR_VERSION = 0x2,
- ASM_CMPF_MINOR_VERSION = 0x4,
- ASM_CMPF_BUILD_NUMBER = 0x8,
- ASM_CMPF_REVISION_NUMBER = 0x10,
- ASM_CMPF_VERSION = ( ( ( ASM_CMPF_MAJOR_VERSION | ASM_CMPF_MINOR_VERSION ) | ASM_CMPF_BUILD_NUMBER ) | ASM_CMPF_REVISION_NUMBER ) ,
- ASM_CMPF_PUBLIC_KEY_TOKEN = 0x20,
- ASM_CMPF_CULTURE = 0x40,
- ASM_CMPF_CUSTOM = 0x80,
- ASM_CMPF_DEFAULT = 0x100,
- ASM_CMPF_RETARGET = 0x200,
- ASM_CMPF_ARCHITECTURE = 0x400,
- ASM_CMPF_CONFIG_MASK = 0x800,
- ASM_CMPF_MVID = 0x1000,
- ASM_CMPF_SIGNATURE = 0x2000,
- ASM_CMPF_CONTENT_TYPE = 0x4000,
- ASM_CMPF_IL_ALL = ( ( ( ASM_CMPF_NAME | ASM_CMPF_VERSION ) | ASM_CMPF_PUBLIC_KEY_TOKEN ) | ASM_CMPF_CULTURE ) ,
- ASM_CMPF_IL_NO_VERSION = ( ( ASM_CMPF_NAME | ASM_CMPF_PUBLIC_KEY_TOKEN ) | ASM_CMPF_CULTURE )
- } ASM_CMP_FLAGS;
-
EXTERN_C const IID IID_IAssemblyName;
/* [out] */ LPVOID pvProperty,
/* [out][in] */ LPDWORD pcbProperty) = 0;
- virtual HRESULT STDMETHODCALLTYPE Finalize( void) = 0;
-
- virtual HRESULT STDMETHODCALLTYPE GetDisplayName(
- /* [annotation][out] */
- _Out_writes_opt_(*pccDisplayName) LPOLESTR szDisplayName,
- /* [out][in] */ LPDWORD pccDisplayName,
- /* [in] */ DWORD dwDisplayFlags) = 0;
-
- virtual HRESULT STDMETHODCALLTYPE Reserved(
- /* [in] */ REFIID refIID,
- /* [in] */ IUnknown *pUnkReserved1,
- /* [in] */ IUnknown *pUnkReserved2,
- /* [in] */ LPCOLESTR szReserved,
- /* [in] */ LONGLONG llReserved,
- /* [in] */ LPVOID pvReserved,
- /* [in] */ DWORD cbReserved,
- /* [out] */ LPVOID *ppReserved) = 0;
-
virtual HRESULT STDMETHODCALLTYPE GetName(
/* [annotation][out][in] */
_Inout_ LPDWORD lpcwBuffer,
/* [annotation][out] */
_Out_writes_opt_(*lpcwBuffer) WCHAR *pwzName) = 0;
- virtual HRESULT STDMETHODCALLTYPE GetVersion(
- /* [out] */ LPDWORD pdwVersionHi,
- /* [out] */ LPDWORD pdwVersionLow) = 0;
-
- virtual HRESULT STDMETHODCALLTYPE IsEqual(
- /* [in] */ IAssemblyName *pName,
- /* [in] */ DWORD dwCmpFlags) = 0;
-
- virtual HRESULT STDMETHODCALLTYPE Clone(
- /* [out] */ IAssemblyName **pName) = 0;
-
};
/* [out] */ LPVOID pvProperty,
/* [out][in] */ LPDWORD pcbProperty);
- HRESULT ( STDMETHODCALLTYPE *Finalize )(
- IAssemblyName * This);
-
- HRESULT ( STDMETHODCALLTYPE *GetDisplayName )(
- IAssemblyName * This,
- /* [annotation][out] */
- _Out_writes_opt_(*pccDisplayName) LPOLESTR szDisplayName,
- /* [out][in] */ LPDWORD pccDisplayName,
- /* [in] */ DWORD dwDisplayFlags);
-
- HRESULT ( STDMETHODCALLTYPE *Reserved )(
- IAssemblyName * This,
- /* [in] */ REFIID refIID,
- /* [in] */ IUnknown *pUnkReserved1,
- /* [in] */ IUnknown *pUnkReserved2,
- /* [in] */ LPCOLESTR szReserved,
- /* [in] */ LONGLONG llReserved,
- /* [in] */ LPVOID pvReserved,
- /* [in] */ DWORD cbReserved,
- /* [out] */ LPVOID *ppReserved);
-
HRESULT ( STDMETHODCALLTYPE *GetName )(
IAssemblyName * This,
/* [annotation][out][in] */
/* [annotation][out] */
_Out_writes_opt_(*lpcwBuffer) WCHAR *pwzName);
- HRESULT ( STDMETHODCALLTYPE *GetVersion )(
- IAssemblyName * This,
- /* [out] */ LPDWORD pdwVersionHi,
- /* [out] */ LPDWORD pdwVersionLow);
-
- HRESULT ( STDMETHODCALLTYPE *IsEqual )(
- IAssemblyName * This,
- /* [in] */ IAssemblyName *pName,
- /* [in] */ DWORD dwCmpFlags);
-
- HRESULT ( STDMETHODCALLTYPE *Clone )(
- IAssemblyName * This,
- /* [out] */ IAssemblyName **pName);
-
END_INTERFACE
} IAssemblyNameVtbl;
#define IAssemblyName_GetProperty(This,PropertyId,pvProperty,pcbProperty) \
( (This)->lpVtbl -> GetProperty(This,PropertyId,pvProperty,pcbProperty) )
-#define IAssemblyName_Finalize(This) \
- ( (This)->lpVtbl -> Finalize(This) )
-
-#define IAssemblyName_GetDisplayName(This,szDisplayName,pccDisplayName,dwDisplayFlags) \
- ( (This)->lpVtbl -> GetDisplayName(This,szDisplayName,pccDisplayName,dwDisplayFlags) )
-
-#define IAssemblyName_Reserved(This,refIID,pUnkReserved1,pUnkReserved2,szReserved,llReserved,pvReserved,cbReserved,ppReserved) \
- ( (This)->lpVtbl -> Reserved(This,refIID,pUnkReserved1,pUnkReserved2,szReserved,llReserved,pvReserved,cbReserved,ppReserved) )
-
#define IAssemblyName_GetName(This,lpcwBuffer,pwzName) \
( (This)->lpVtbl -> GetName(This,lpcwBuffer,pwzName) )
-#define IAssemblyName_GetVersion(This,pdwVersionHi,pdwVersionLow) \
- ( (This)->lpVtbl -> GetVersion(This,pdwVersionHi,pdwVersionLow) )
-
-#define IAssemblyName_IsEqual(This,pName,dwCmpFlags) \
- ( (This)->lpVtbl -> IsEqual(This,pName,dwCmpFlags) )
-
-#define IAssemblyName_Clone(This,pName) \
- ( (This)->lpVtbl -> Clone(This,pName) )
-
#endif /* COBJMACROS */
#endif /* __IAssemblyName_INTERFACE_DEFINED__ */
-/* interface __MIDL_itf_fusion_0000_0001 */
-/* [local] */
-
-STDAPI CreateAssemblyNameObject(LPASSEMBLYNAME *ppAssemblyNameObj, LPCWSTR szAssemblyName, DWORD dwFlags, LPVOID pvReserved);
-
-
-extern RPC_IF_HANDLE __MIDL_itf_fusion_0000_0001_v0_0_c_ifspec;
-extern RPC_IF_HANDLE __MIDL_itf_fusion_0000_0001_v0_0_s_ifspec;
-
/* Additional Prototypes for ALL interfaces */
/* end of Additional Prototypes */