summaryrefslogtreecommitdiff
path: root/src/vm/profilermetadataemitvalidator.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/vm/profilermetadataemitvalidator.cpp')
-rw-r--r--src/vm/profilermetadataemitvalidator.cpp1792
1 files changed, 1792 insertions, 0 deletions
diff --git a/src/vm/profilermetadataemitvalidator.cpp b/src/vm/profilermetadataemitvalidator.cpp
new file mode 100644
index 0000000000..007bffd2b4
--- /dev/null
+++ b/src/vm/profilermetadataemitvalidator.cpp
@@ -0,0 +1,1792 @@
+// 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.
+
+
+
+#include "common.h"
+#include "profilermetadataemitvalidator.h"
+
+ProfilerMetadataEmitValidator::ProfilerMetadataEmitValidator(IMetaDataEmit* pInnerEmit) :
+m_cRefCount(0)
+{
+ LIMITED_METHOD_CONTRACT;
+
+ ReleaseHolder<IGetIMDInternalImport> pGetIMDInternalImport;
+ pInnerEmit->QueryInterface(IID_IGetIMDInternalImport, (void**)&pGetIMDInternalImport);
+ pGetIMDInternalImport->GetIMDInternalImport(&m_pInnerInternalImport);
+
+ pInnerEmit->QueryInterface(IID_IMetaDataImport2, (void**)&m_pInnerImport);
+ pInnerEmit->QueryInterface(IID_IMetaDataAssemblyImport, (void**)&m_pInnerAssemblyImport);
+ pInnerEmit->QueryInterface(IID_IMetaDataEmit2, (void**) &m_pInner);
+ pInnerEmit->QueryInterface(IID_IMetaDataAssemblyEmit, (void**) &m_pInnerAssembly);
+
+ // GetCountWithTokenType does not count the 0 RID token, thus the max valid RID = count
+ // Confusingly the method treats TypeDef specially by ignoring 0x02000001 as well. For TypeDef max RID is count+1
+ maxInitialTypeDef = TokenFromRid(m_pInnerInternalImport->GetCountWithTokenKind(mdtTypeDef) + 1, mdtTypeDef);
+ maxInitialMethodDef = TokenFromRid(m_pInnerInternalImport->GetCountWithTokenKind(mdtMethodDef), mdtMethodDef);
+ maxInitialFieldDef = TokenFromRid(m_pInnerInternalImport->GetCountWithTokenKind(mdtFieldDef), mdtFieldDef);
+ maxInitialMemberRef = TokenFromRid(m_pInnerInternalImport->GetCountWithTokenKind(mdtMemberRef), mdtMemberRef);
+ maxInitialParamDef = TokenFromRid(m_pInnerInternalImport->GetCountWithTokenKind(mdtParamDef), mdtParamDef);
+ maxInitialCustomAttribute = TokenFromRid(m_pInnerInternalImport->GetCountWithTokenKind(mdtCustomAttribute), mdtCustomAttribute);
+ maxInitialEvent = TokenFromRid(m_pInnerInternalImport->GetCountWithTokenKind(mdtEvent), mdtEvent);
+ maxInitialProperty = TokenFromRid(m_pInnerInternalImport->GetCountWithTokenKind(mdtProperty), mdtProperty);
+ maxInitialGenericParam = TokenFromRid(m_pInnerInternalImport->GetCountWithTokenKind(mdtGenericParam), mdtGenericParam);
+}
+
+ProfilerMetadataEmitValidator::~ProfilerMetadataEmitValidator()
+{
+ LIMITED_METHOD_CONTRACT;
+}
+
+ //IUnknown
+HRESULT ProfilerMetadataEmitValidator::QueryInterface(REFIID riid, void** ppInterface)
+{
+ if(riid == IID_IUnknown)
+ {
+ *ppInterface = static_cast<IUnknown*>(static_cast<IMetaDataEmit*>(this));
+ AddRef();
+ }
+ else if(riid == IID_IMetaDataEmit)
+ {
+ *ppInterface = static_cast<IMetaDataEmit*>(this);
+ AddRef();
+ }
+ else if(riid == IID_IMetaDataEmit2)
+ {
+ *ppInterface = static_cast<IMetaDataEmit2*>(this);
+ AddRef();
+ }
+ else if(riid == IID_IMetaDataAssemblyEmit)
+ {
+ *ppInterface = static_cast<IMetaDataAssemblyEmit*>(this);
+ AddRef();
+ }
+ else if (riid == IID_IMetaDataImport)
+ {
+ *ppInterface = static_cast<IMetaDataImport*>(this);
+ AddRef();
+ }
+ else if (riid == IID_IMetaDataImport2)
+ {
+ *ppInterface = static_cast<IMetaDataImport2*>(this);
+ AddRef();
+ }
+ else if (riid == IID_IMetaDataAssemblyImport)
+ {
+ *ppInterface = static_cast<IMetaDataAssemblyImport*>(this);
+ AddRef();
+ }
+ else
+ {
+ return E_NOINTERFACE;
+ }
+
+ return S_OK;
+}
+
+ULONG ProfilerMetadataEmitValidator::AddRef()
+{
+ return InterlockedIncrement(&m_cRefCount);
+}
+
+ULONG ProfilerMetadataEmitValidator::Release()
+{
+ ULONG ret = InterlockedDecrement(&m_cRefCount);
+ if(ret == 0)
+ {
+ delete this;
+ }
+ return ret;
+}
+
+ //IMetaDataEmit
+HRESULT ProfilerMetadataEmitValidator::SetModuleProps(
+ LPCWSTR szName)
+{
+ LIMITED_METHOD_CONTRACT;
+ return COR_E_NOTSUPPORTED;
+}
+
+HRESULT ProfilerMetadataEmitValidator::Save(
+ LPCWSTR szFile,
+ DWORD dwSaveFlags)
+{
+ LIMITED_METHOD_CONTRACT;
+ return COR_E_NOTSUPPORTED;
+}
+
+HRESULT ProfilerMetadataEmitValidator::SaveToStream(
+ IStream *pIStream,
+ DWORD dwSaveFlags)
+{
+ LIMITED_METHOD_CONTRACT;
+ return COR_E_NOTSUPPORTED;
+}
+
+HRESULT ProfilerMetadataEmitValidator::GetSaveSize(
+ CorSaveSize fSave,
+ DWORD *pdwSaveSize)
+{
+ LIMITED_METHOD_CONTRACT;
+ return COR_E_NOTSUPPORTED;
+}
+
+HRESULT ProfilerMetadataEmitValidator::DefineTypeDef(
+ LPCWSTR szTypeDef,
+ DWORD dwTypeDefFlags,
+ mdToken tkExtends,
+ mdToken rtkImplements[],
+ mdTypeDef *ptd)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInner->DefineTypeDef(szTypeDef, dwTypeDefFlags, tkExtends, rtkImplements, ptd);
+}
+
+HRESULT ProfilerMetadataEmitValidator::DefineNestedType(
+ LPCWSTR szTypeDef,
+ DWORD dwTypeDefFlags,
+ mdToken tkExtends,
+ mdToken rtkImplements[],
+ mdTypeDef tdEncloser,
+ mdTypeDef *ptd)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInner->DefineNestedType(szTypeDef, dwTypeDefFlags, tkExtends, rtkImplements, tdEncloser, ptd);
+}
+
+HRESULT ProfilerMetadataEmitValidator::SetHandler(
+ IUnknown *pUnk)
+{
+ LIMITED_METHOD_CONTRACT;
+ return COR_E_NOTSUPPORTED;
+}
+
+HRESULT ProfilerMetadataEmitValidator::DefineMethod(
+ mdTypeDef td,
+ LPCWSTR szName,
+ DWORD dwMethodFlags,
+ PCCOR_SIGNATURE pvSigBlob,
+ ULONG cbSigBlob,
+ ULONG ulCodeRVA,
+ DWORD dwImplFlags,
+ mdMethodDef *pmd)
+{
+ LIMITED_METHOD_CONTRACT;
+ //modifying pre-existing types is not allowed
+ if (td <= maxInitialTypeDef)
+ {
+ return COR_E_NOTSUPPORTED;
+ }
+ return m_pInner->DefineMethod(td, szName, dwMethodFlags, pvSigBlob, cbSigBlob, ulCodeRVA, dwImplFlags, pmd);
+}
+
+HRESULT ProfilerMetadataEmitValidator::DefineMethodImpl(
+ mdTypeDef td,
+ mdToken tkBody,
+ mdToken tkDecl)
+{
+ LIMITED_METHOD_CONTRACT;
+ //modifying pre-existing types is not allowed
+ if (td <= maxInitialTypeDef)
+ {
+ return COR_E_NOTSUPPORTED;
+ }
+ return m_pInner->DefineMethodImpl(td, tkBody, tkDecl);
+}
+
+HRESULT ProfilerMetadataEmitValidator::DefineTypeRefByName(
+ mdToken tkResolutionScope,
+ LPCWSTR szName,
+ mdTypeRef *ptr)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInner->DefineTypeRefByName(tkResolutionScope, szName, ptr);
+}
+
+HRESULT ProfilerMetadataEmitValidator::DefineImportType(
+ IMetaDataAssemblyImport *pAssemImport,
+ const void *pbHashValue,
+ ULONG cbHashValue,
+ IMetaDataImport *pImport,
+ mdTypeDef tdImport,
+ IMetaDataAssemblyEmit *pAssemEmit,
+ mdTypeRef *ptr)
+{
+ LIMITED_METHOD_CONTRACT;
+ return COR_E_NOTSUPPORTED;
+}
+
+HRESULT ProfilerMetadataEmitValidator::DefineMemberRef(
+ mdToken tkImport,
+ LPCWSTR szName,
+ PCCOR_SIGNATURE pvSigBlob,
+ ULONG cbSigBlob,
+ mdMemberRef *pmr)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInner->DefineMemberRef(tkImport, szName, pvSigBlob, cbSigBlob, pmr);
+}
+
+HRESULT ProfilerMetadataEmitValidator::DefineImportMember(
+ IMetaDataAssemblyImport *pAssemImport,
+ const void *pbHashValue,
+ ULONG cbHashValue,
+ IMetaDataImport *pImport,
+ mdToken mbMember,
+ IMetaDataAssemblyEmit *pAssemEmit,
+ mdToken tkParent,
+ mdMemberRef *pmr)
+{
+ LIMITED_METHOD_CONTRACT;
+ return COR_E_NOTSUPPORTED;
+}
+
+HRESULT ProfilerMetadataEmitValidator::DefineEvent(
+ mdTypeDef td,
+ LPCWSTR szEvent,
+ DWORD dwEventFlags,
+ mdToken tkEventType,
+ mdMethodDef mdAddOn,
+ mdMethodDef mdRemoveOn,
+ mdMethodDef mdFire,
+ mdMethodDef rmdOtherMethods[],
+ mdEvent *pmdEvent)
+{
+ LIMITED_METHOD_CONTRACT;
+ //modifying pre-existing types is not allowed
+ if (td <= maxInitialTypeDef)
+ {
+ return COR_E_NOTSUPPORTED;
+ }
+ return m_pInner->DefineEvent(td, szEvent, dwEventFlags, tkEventType, mdAddOn, mdRemoveOn, mdFire, rmdOtherMethods, pmdEvent);
+}
+
+HRESULT ProfilerMetadataEmitValidator::SetClassLayout(
+ mdTypeDef td,
+ DWORD dwPackSize,
+ COR_FIELD_OFFSET rFieldOffsets[],
+ ULONG ulClassSize)
+{
+ LIMITED_METHOD_CONTRACT;
+ //modifying pre-existing types is not allowed
+ if (td <= maxInitialTypeDef)
+ {
+ return COR_E_NOTSUPPORTED;
+ }
+ return m_pInner->SetClassLayout(td, dwPackSize, rFieldOffsets, ulClassSize);
+}
+
+HRESULT ProfilerMetadataEmitValidator::DeleteClassLayout(
+ mdTypeDef td)
+{
+ LIMITED_METHOD_CONTRACT;
+ return COR_E_NOTSUPPORTED;
+}
+
+HRESULT ProfilerMetadataEmitValidator::SetFieldMarshal(
+ mdToken tk,
+ PCCOR_SIGNATURE pvNativeType,
+ ULONG cbNativeType)
+{
+ LIMITED_METHOD_CONTRACT;
+ //modifying pre-existing field/property is not allowed
+ if ((TypeFromToken(tk) == mdtProperty && tk <= maxInitialProperty) ||
+ (TypeFromToken(tk) == mdtFieldDef && tk <= maxInitialFieldDef))
+ {
+ return COR_E_NOTSUPPORTED;
+ }
+ //if the token wasn't a field/param we let it through just to get
+ //the appropriate error behavior from the inner emitter
+ return m_pInner->SetFieldMarshal(tk, pvNativeType, cbNativeType);
+}
+
+HRESULT ProfilerMetadataEmitValidator::DeleteFieldMarshal(
+ mdToken tk)
+{
+ LIMITED_METHOD_CONTRACT;
+ return COR_E_NOTSUPPORTED;
+}
+
+HRESULT ProfilerMetadataEmitValidator::DefinePermissionSet(
+ mdToken tk,
+ DWORD dwAction,
+ void const *pvPermission,
+ ULONG cbPermission,
+ mdPermission *ppm)
+{
+ LIMITED_METHOD_CONTRACT;
+ return COR_E_NOTSUPPORTED;
+}
+
+HRESULT ProfilerMetadataEmitValidator::SetRVA(
+ mdMethodDef md,
+ ULONG ulRVA)
+{
+ LIMITED_METHOD_CONTRACT;
+ return COR_E_NOTSUPPORTED;
+}
+
+HRESULT ProfilerMetadataEmitValidator::GetTokenFromSig(
+ PCCOR_SIGNATURE pvSig,
+ ULONG cbSig,
+ mdSignature *pmsig)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInner->GetTokenFromSig(pvSig, cbSig, pmsig);
+}
+
+HRESULT ProfilerMetadataEmitValidator::DefineModuleRef(
+ LPCWSTR szName,
+ mdModuleRef *pmur)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInner->DefineModuleRef(szName, pmur);
+}
+
+HRESULT ProfilerMetadataEmitValidator::SetParent(
+ mdMemberRef mr,
+ mdToken tk)
+{
+ LIMITED_METHOD_CONTRACT;
+ //modifying pre-existing memberref is not allowed
+ if (mr <= maxInitialMemberRef)
+ {
+ return COR_E_NOTSUPPORTED;
+ }
+ return m_pInner->SetParent(mr, tk);
+}
+
+HRESULT ProfilerMetadataEmitValidator::GetTokenFromTypeSpec(
+ PCCOR_SIGNATURE pvSig,
+ ULONG cbSig,
+ mdTypeSpec *ptypespec)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInner->GetTokenFromTypeSpec(pvSig, cbSig, ptypespec);
+}
+
+HRESULT ProfilerMetadataEmitValidator::SaveToMemory(
+ void *pbData,
+ ULONG cbData)
+{
+ LIMITED_METHOD_CONTRACT;
+ return COR_E_NOTSUPPORTED;
+}
+
+HRESULT ProfilerMetadataEmitValidator::DefineUserString(
+ LPCWSTR szString,
+ ULONG cchString,
+ mdString *pstk)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInner->DefineUserString(szString, cchString, pstk);
+}
+
+HRESULT ProfilerMetadataEmitValidator::DeleteToken(
+ mdToken tkObj)
+{
+ LIMITED_METHOD_CONTRACT;
+ return COR_E_NOTSUPPORTED;
+}
+
+HRESULT ProfilerMetadataEmitValidator::SetMethodProps(
+ mdMethodDef md,
+ DWORD dwMethodFlags,
+ ULONG ulCodeRVA,
+ DWORD dwImplFlags)
+{
+ LIMITED_METHOD_CONTRACT;
+ //modifying pre-existing methods is not allowed
+ if (md <= maxInitialMethodDef)
+ {
+ return COR_E_NOTSUPPORTED;
+ }
+ return m_pInner->SetMethodProps(md, dwMethodFlags, ulCodeRVA, dwImplFlags);
+}
+
+HRESULT ProfilerMetadataEmitValidator::SetTypeDefProps(
+ mdTypeDef td,
+ DWORD dwTypeDefFlags,
+ mdToken tkExtends,
+ mdToken rtkImplements[])
+{
+ LIMITED_METHOD_CONTRACT;
+ //modifying pre-existing types is not allowed
+ if (td <= maxInitialTypeDef)
+ {
+ return COR_E_NOTSUPPORTED;
+ }
+ return m_pInner->SetTypeDefProps(td, dwTypeDefFlags, tkExtends, rtkImplements);
+}
+
+HRESULT ProfilerMetadataEmitValidator::SetEventProps(
+ mdEvent ev,
+ DWORD dwEventFlags,
+ mdToken tkEventType,
+ mdMethodDef mdAddOn,
+ mdMethodDef mdRemoveOn,
+ mdMethodDef mdFire,
+ mdMethodDef rmdOtherMethods[])
+{
+ LIMITED_METHOD_CONTRACT;
+ //modifying pre-existing events is not allowed
+ if (ev <= maxInitialEvent)
+ {
+ return COR_E_NOTSUPPORTED;
+ }
+ return m_pInner->SetEventProps(ev, dwEventFlags, tkEventType, mdAddOn, mdRemoveOn, mdFire, rmdOtherMethods);
+}
+
+HRESULT ProfilerMetadataEmitValidator::SetPermissionSetProps(
+ mdToken tk,
+ DWORD dwAction,
+ void const *pvPermission,
+ ULONG cbPermission,
+ mdPermission *ppm)
+{
+ LIMITED_METHOD_CONTRACT;
+ return COR_E_NOTSUPPORTED;
+}
+
+HRESULT ProfilerMetadataEmitValidator::DefinePinvokeMap(
+ mdToken tk,
+ DWORD dwMappingFlags,
+ LPCWSTR szImportName,
+ mdModuleRef mrImportDLL)
+{
+ LIMITED_METHOD_CONTRACT;
+ //modifying pre-existing methods is not allowed
+ if (tk <= maxInitialMethodDef)
+ {
+ return COR_E_NOTSUPPORTED;
+ }
+ return m_pInner->DefinePinvokeMap(tk, dwMappingFlags, szImportName, mrImportDLL);
+}
+
+HRESULT ProfilerMetadataEmitValidator::SetPinvokeMap(
+ mdToken tk,
+ DWORD dwMappingFlags,
+ LPCWSTR szImportName,
+ mdModuleRef mrImportDLL)
+{
+ LIMITED_METHOD_CONTRACT;
+ //modifying pre-existing types is not allowed
+ if (tk <= maxInitialTypeDef)
+ {
+ return COR_E_NOTSUPPORTED;
+ }
+ return m_pInner->SetPinvokeMap(tk, dwMappingFlags, szImportName, mrImportDLL);
+}
+
+HRESULT ProfilerMetadataEmitValidator::DeletePinvokeMap(
+ mdToken tk)
+{
+ LIMITED_METHOD_CONTRACT;
+ return COR_E_NOTSUPPORTED;
+}
+
+HRESULT ProfilerMetadataEmitValidator::DefineCustomAttribute(
+ mdToken tkOwner,
+ mdToken tkCtor,
+ void const *pCustomAttribute,
+ ULONG cbCustomAttribute,
+ mdCustomAttribute *pcv)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInner->DefineCustomAttribute(tkOwner, tkCtor, pCustomAttribute, cbCustomAttribute, pcv);
+}
+
+HRESULT ProfilerMetadataEmitValidator::SetCustomAttributeValue(
+ mdCustomAttribute pcv,
+ void const *pCustomAttribute,
+ ULONG cbCustomAttribute)
+{
+ LIMITED_METHOD_CONTRACT;
+ //modifying pre-existing CAs is not allowed
+ if (pcv <= maxInitialCustomAttribute)
+ {
+ return COR_E_NOTSUPPORTED;
+ }
+ return m_pInner->SetCustomAttributeValue(pcv, pCustomAttribute, cbCustomAttribute);
+}
+
+HRESULT ProfilerMetadataEmitValidator::DefineField(
+ mdTypeDef td,
+ LPCWSTR szName,
+ DWORD dwFieldFlags,
+ PCCOR_SIGNATURE pvSigBlob,
+ ULONG cbSigBlob,
+ DWORD dwCPlusTypeFlag,
+ void const *pValue,
+ ULONG cchValue,
+ mdFieldDef *pmd)
+{
+ LIMITED_METHOD_CONTRACT;
+ //modifying pre-existing types is not allowed
+ if (td <= maxInitialTypeDef)
+ {
+ return COR_E_NOTSUPPORTED;
+ }
+ return m_pInner->DefineField(td, szName, dwFieldFlags, pvSigBlob, cbSigBlob, dwCPlusTypeFlag, pValue, cchValue, pmd);
+}
+
+HRESULT ProfilerMetadataEmitValidator::DefineProperty(
+ mdTypeDef td,
+ LPCWSTR szProperty,
+ DWORD dwPropFlags,
+ PCCOR_SIGNATURE pvSig,
+ ULONG cbSig,
+ DWORD dwCPlusTypeFlag,
+ void const *pValue,
+ ULONG cchValue,
+ mdMethodDef mdSetter,
+ mdMethodDef mdGetter,
+ mdMethodDef rmdOtherMethods[],
+ mdProperty *pmdProp)
+{
+ LIMITED_METHOD_CONTRACT;
+ //modifying pre-existing types is not allowed
+ if (td <= maxInitialTypeDef)
+ {
+ return COR_E_NOTSUPPORTED;
+ }
+ return m_pInner->DefineProperty(td, szProperty, dwPropFlags, pvSig, cbSig, dwCPlusTypeFlag, pValue, cchValue, mdSetter, mdGetter, rmdOtherMethods, pmdProp);
+}
+
+HRESULT ProfilerMetadataEmitValidator::DefineParam(
+ mdMethodDef md,
+ ULONG ulParamSeq,
+ LPCWSTR szName,
+ DWORD dwParamFlags,
+ DWORD dwCPlusTypeFlag,
+ void const *pValue,
+ ULONG cchValue,
+ mdParamDef *ppd)
+{
+ LIMITED_METHOD_CONTRACT;
+ //modifying pre-existing methods is not allowed
+ if (md <= maxInitialMethodDef)
+ {
+ return COR_E_NOTSUPPORTED;
+ }
+ return m_pInner->DefineParam(md, ulParamSeq, szName, dwParamFlags, dwCPlusTypeFlag, pValue, cchValue, ppd);
+}
+
+HRESULT ProfilerMetadataEmitValidator::SetFieldProps(
+ mdFieldDef fd,
+ DWORD dwFieldFlags,
+ DWORD dwCPlusTypeFlag,
+ void const *pValue,
+ ULONG cchValue)
+{
+ LIMITED_METHOD_CONTRACT;
+ //modifying pre-existing fields is not allowed
+ if (fd <= maxInitialFieldDef)
+ {
+ return COR_E_NOTSUPPORTED;
+ }
+ return m_pInner->SetFieldProps(fd, dwFieldFlags, dwCPlusTypeFlag, pValue, cchValue);
+}
+
+HRESULT ProfilerMetadataEmitValidator::SetPropertyProps(
+ mdProperty pr,
+ DWORD dwPropFlags,
+ DWORD dwCPlusTypeFlag,
+ void const *pValue,
+ ULONG cchValue,
+ mdMethodDef mdSetter,
+ mdMethodDef mdGetter,
+ mdMethodDef rmdOtherMethods[])
+{
+ LIMITED_METHOD_CONTRACT;
+ //modifying pre-existing properties is not allowed
+ if (pr <= maxInitialProperty)
+ {
+ return COR_E_NOTSUPPORTED;
+ }
+ return m_pInner->SetPropertyProps(pr, dwPropFlags, dwCPlusTypeFlag, pValue, cchValue, mdSetter, mdGetter, rmdOtherMethods);
+}
+
+HRESULT ProfilerMetadataEmitValidator::SetParamProps(
+ mdParamDef pd,
+ LPCWSTR szName,
+ DWORD dwParamFlags,
+ DWORD dwCPlusTypeFlag,
+ void const *pValue,
+ ULONG cchValue)
+{
+ LIMITED_METHOD_CONTRACT;
+ //modifying pre-existing params is not allowed
+ if (pd <= maxInitialParamDef)
+ {
+ return COR_E_NOTSUPPORTED;
+ }
+ return m_pInner->SetParamProps(pd, szName, dwParamFlags, dwCPlusTypeFlag, pValue, cchValue);
+}
+
+HRESULT ProfilerMetadataEmitValidator::DefineSecurityAttributeSet(
+ mdToken tkObj,
+ COR_SECATTR rSecAttrs[],
+ ULONG cSecAttrs,
+ ULONG *pulErrorAttr)
+{
+ LIMITED_METHOD_CONTRACT;
+ return COR_E_NOTSUPPORTED;
+}
+
+HRESULT ProfilerMetadataEmitValidator::ApplyEditAndContinue(
+ IUnknown *pImport)
+{
+ LIMITED_METHOD_CONTRACT;
+ return COR_E_NOTSUPPORTED;
+}
+
+HRESULT ProfilerMetadataEmitValidator::TranslateSigWithScope(
+ IMetaDataAssemblyImport *pAssemImport,
+ const void *pbHashValue,
+ ULONG cbHashValue,
+ IMetaDataImport *import,
+ PCCOR_SIGNATURE pbSigBlob,
+ ULONG cbSigBlob,
+ IMetaDataAssemblyEmit *pAssemEmit,
+ IMetaDataEmit *emit,
+ PCOR_SIGNATURE pvTranslatedSig,
+ ULONG cbTranslatedSigMax,
+ ULONG *pcbTranslatedSig)
+{
+ LIMITED_METHOD_CONTRACT;
+ return COR_E_NOTSUPPORTED;
+}
+
+HRESULT ProfilerMetadataEmitValidator::SetMethodImplFlags(
+ mdMethodDef md,
+ DWORD dwImplFlags)
+{
+ LIMITED_METHOD_CONTRACT;
+ //modifying pre-existing methods is not supported
+ if (md <= maxInitialMethodDef)
+ {
+ return COR_E_NOTSUPPORTED;
+ }
+ return m_pInner->SetMethodImplFlags(md, dwImplFlags);
+}
+
+HRESULT ProfilerMetadataEmitValidator::SetFieldRVA(
+ mdFieldDef fd,
+ ULONG ulRVA)
+{
+ LIMITED_METHOD_CONTRACT;
+ return COR_E_NOTSUPPORTED;
+}
+
+HRESULT ProfilerMetadataEmitValidator::Merge(
+ IMetaDataImport *pImport,
+ IMapToken *pHostMapToken,
+ IUnknown *pHandler)
+{
+ LIMITED_METHOD_CONTRACT;
+ return COR_E_NOTSUPPORTED;
+}
+
+HRESULT ProfilerMetadataEmitValidator::MergeEnd()
+{
+ LIMITED_METHOD_CONTRACT;
+ return COR_E_NOTSUPPORTED;
+}
+
+ // IMetaDataEmit2
+HRESULT ProfilerMetadataEmitValidator::DefineMethodSpec(
+ mdToken tkParent,
+ PCCOR_SIGNATURE pvSigBlob,
+ ULONG cbSigBlob,
+ mdMethodSpec *pmi)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInner->DefineMethodSpec(tkParent, pvSigBlob, cbSigBlob, pmi);
+}
+
+HRESULT ProfilerMetadataEmitValidator::GetDeltaSaveSize(
+ CorSaveSize fSave,
+ DWORD *pdwSaveSize)
+{
+ LIMITED_METHOD_CONTRACT;
+ return COR_E_NOTSUPPORTED;
+}
+
+HRESULT ProfilerMetadataEmitValidator::SaveDelta(
+ LPCWSTR szFile,
+ DWORD dwSaveFlags)
+{
+ LIMITED_METHOD_CONTRACT;
+ return COR_E_NOTSUPPORTED;
+}
+
+HRESULT ProfilerMetadataEmitValidator::SaveDeltaToStream(
+ IStream *pIStream,
+ DWORD dwSaveFlags)
+{
+ LIMITED_METHOD_CONTRACT;
+ return COR_E_NOTSUPPORTED;
+}
+
+HRESULT ProfilerMetadataEmitValidator::SaveDeltaToMemory(
+ void *pbData,
+ ULONG cbData)
+{
+ LIMITED_METHOD_CONTRACT;
+ return COR_E_NOTSUPPORTED;
+}
+
+HRESULT ProfilerMetadataEmitValidator::DefineGenericParam(
+ mdToken tk,
+ ULONG ulParamSeq,
+ DWORD dwParamFlags,
+ LPCWSTR szname,
+ DWORD reserved,
+ mdToken rtkConstraints[],
+ mdGenericParam *pgp)
+{
+ LIMITED_METHOD_CONTRACT;
+ //modifying pre-existing methods/types is not allowed
+ if ((TypeFromToken(tk) == mdtTypeDef && tk <= maxInitialTypeDef) ||
+ (TypeFromToken(tk) == mdtMethodDef && tk <= maxInitialMethodDef))
+ {
+ return COR_E_NOTSUPPORTED;
+ }
+ return m_pInner->DefineGenericParam(tk, ulParamSeq, dwParamFlags, szname, reserved, rtkConstraints, pgp);
+}
+
+HRESULT ProfilerMetadataEmitValidator::SetGenericParamProps(
+ mdGenericParam gp,
+ DWORD dwParamFlags,
+ LPCWSTR szName,
+ DWORD reserved,
+ mdToken rtkConstraints[])
+{
+ LIMITED_METHOD_CONTRACT;
+ //modifying pre-existing generic param is not allowed
+ if (gp <= maxInitialGenericParam)
+ {
+ return COR_E_NOTSUPPORTED;
+ }
+ return m_pInner->SetGenericParamProps(gp, dwParamFlags, szName, reserved, rtkConstraints);
+}
+
+HRESULT ProfilerMetadataEmitValidator::ResetENCLog()
+{
+ LIMITED_METHOD_CONTRACT;
+ return COR_E_NOTSUPPORTED;
+}
+
+ //IMetaDataAssemblyEmit
+HRESULT ProfilerMetadataEmitValidator::DefineAssembly(
+ const void *pbPublicKey,
+ ULONG cbPublicKey,
+ ULONG ulHashAlgId,
+ LPCWSTR szName,
+ const ASSEMBLYMETADATA *pMetaData,
+ DWORD dwAssemblyFlags,
+ mdAssembly *pma)
+{
+ LIMITED_METHOD_CONTRACT;
+ return COR_E_NOTSUPPORTED;
+}
+
+HRESULT ProfilerMetadataEmitValidator::DefineAssemblyRef(
+ const void *pbPublicKeyOrToken,
+ ULONG cbPublicKeyOrToken,
+ LPCWSTR szName,
+ const ASSEMBLYMETADATA *pMetaData,
+ const void *pbHashValue,
+ ULONG cbHashValue,
+ DWORD dwAssemblyRefFlags,
+ mdAssemblyRef *pmdar)
+{
+ LIMITED_METHOD_CONTRACT;
+ return COR_E_NOTSUPPORTED;
+}
+
+HRESULT ProfilerMetadataEmitValidator::DefineFile(
+ LPCWSTR szName,
+ const void *pbHashValue,
+ ULONG cbHashValue,
+ DWORD dwFileFlags,
+ mdFile *pmdf)
+{
+ LIMITED_METHOD_CONTRACT;
+ return COR_E_NOTSUPPORTED;
+}
+
+HRESULT ProfilerMetadataEmitValidator::DefineExportedType(
+ LPCWSTR szName,
+ mdToken tkImplementation,
+ mdTypeDef tkTypeDef,
+ DWORD dwExportedTypeFlags,
+ mdExportedType *pmdct)
+{
+ LIMITED_METHOD_CONTRACT;
+ return COR_E_NOTSUPPORTED;
+}
+
+HRESULT ProfilerMetadataEmitValidator::DefineManifestResource(
+ LPCWSTR szName,
+ mdToken tkImplementation,
+ DWORD dwOffset,
+ DWORD dwResourceFlags,
+ mdManifestResource *pmdmr)
+{
+ LIMITED_METHOD_CONTRACT;
+ return COR_E_NOTSUPPORTED;
+}
+
+HRESULT ProfilerMetadataEmitValidator::SetAssemblyProps(
+ mdAssembly pma,
+ const void *pbPublicKey,
+ ULONG cbPublicKey,
+ ULONG ulHashAlgId,
+ LPCWSTR szName,
+ const ASSEMBLYMETADATA *pMetaData,
+ DWORD dwAssemblyFlags)
+{
+ LIMITED_METHOD_CONTRACT;
+ return COR_E_NOTSUPPORTED;
+}
+
+HRESULT ProfilerMetadataEmitValidator::SetAssemblyRefProps(
+ mdAssemblyRef ar,
+ const void *pbPublicKeyOrToken,
+ ULONG cbPublicKeyOrToken,
+ LPCWSTR szName,
+ const ASSEMBLYMETADATA *pMetaData,
+ const void *pbHashValue,
+ ULONG cbHashValue,
+ DWORD dwAssemblyRefFlags)
+{
+ LIMITED_METHOD_CONTRACT;
+ return COR_E_NOTSUPPORTED;
+}
+
+HRESULT ProfilerMetadataEmitValidator::SetFileProps(
+ mdFile file,
+ const void *pbHashValue,
+ ULONG cbHashValue,
+ DWORD dwFileFlags)
+{
+ LIMITED_METHOD_CONTRACT;
+ return COR_E_NOTSUPPORTED;
+}
+
+HRESULT ProfilerMetadataEmitValidator::SetExportedTypeProps(
+ mdExportedType ct,
+ mdToken tkImplementation,
+ mdTypeDef tkTypeDef,
+ DWORD dwExportedTypeFlags)
+{
+ LIMITED_METHOD_CONTRACT;
+ return COR_E_NOTSUPPORTED;
+}
+
+HRESULT ProfilerMetadataEmitValidator::SetManifestResourceProps(
+ mdManifestResource mr,
+ mdToken tkImplementation,
+ DWORD dwOffset,
+ DWORD dwResourceFlags)
+{
+ LIMITED_METHOD_CONTRACT;
+ return COR_E_NOTSUPPORTED;
+}
+
+//IMetaDataImport
+void ProfilerMetadataEmitValidator::CloseEnum(HCORENUM hEnum)
+{
+ LIMITED_METHOD_CONTRACT;
+ m_pInnerImport->CloseEnum(hEnum);
+}
+
+HRESULT ProfilerMetadataEmitValidator::CountEnum(HCORENUM hEnum, ULONG *pulCount)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->CountEnum(hEnum, pulCount);
+}
+
+HRESULT ProfilerMetadataEmitValidator::ResetEnum(HCORENUM hEnum, ULONG ulPos)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->ResetEnum(hEnum, ulPos);
+}
+
+HRESULT ProfilerMetadataEmitValidator::EnumTypeDefs(HCORENUM *phEnum, mdTypeDef rTypeDefs[],
+ ULONG cMax, ULONG *pcTypeDefs)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->EnumTypeDefs(phEnum, rTypeDefs, cMax, pcTypeDefs);
+}
+
+HRESULT ProfilerMetadataEmitValidator::EnumInterfaceImpls(HCORENUM *phEnum, mdTypeDef td,
+ mdInterfaceImpl rImpls[], ULONG cMax,
+ ULONG* pcImpls)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->EnumInterfaceImpls(phEnum, td, rImpls, cMax, pcImpls);
+}
+
+HRESULT ProfilerMetadataEmitValidator::EnumTypeRefs(HCORENUM *phEnum, mdTypeRef rTypeRefs[],
+ ULONG cMax, ULONG* pcTypeRefs)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->EnumTypeRefs(phEnum, rTypeRefs, cMax, pcTypeRefs);
+}
+
+HRESULT ProfilerMetadataEmitValidator::FindTypeDefByName(
+ LPCWSTR szTypeDef,
+ mdToken tkEnclosingClass,
+ mdTypeDef *ptd)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->FindTypeDefByName(szTypeDef, tkEnclosingClass, ptd);
+}
+
+HRESULT ProfilerMetadataEmitValidator::GetScopeProps(
+ LPWSTR szName,
+ ULONG cchName,
+ ULONG *pchName,
+ GUID *pmvid)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->GetScopeProps(szName, cchName, pchName, pmvid);
+}
+
+HRESULT ProfilerMetadataEmitValidator::GetModuleFromScope(
+ mdModule *pmd)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->GetModuleFromScope(pmd);
+}
+
+HRESULT ProfilerMetadataEmitValidator::GetTypeDefProps(
+ mdTypeDef td,
+ LPWSTR szTypeDef,
+ ULONG cchTypeDef,
+ ULONG *pchTypeDef,
+ DWORD *pdwTypeDefFlags,
+ mdToken *ptkExtends)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->GetTypeDefProps(td, szTypeDef, cchTypeDef, pchTypeDef, pdwTypeDefFlags, ptkExtends);
+}
+
+HRESULT ProfilerMetadataEmitValidator::GetInterfaceImplProps(
+ mdInterfaceImpl iiImpl,
+ mdTypeDef *pClass,
+ mdToken *ptkIface)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->GetInterfaceImplProps(iiImpl, pClass, ptkIface);
+}
+
+HRESULT ProfilerMetadataEmitValidator::GetTypeRefProps(
+ mdTypeRef tr,
+ mdToken *ptkResolutionScope,
+ LPWSTR szName,
+ ULONG cchName,
+ ULONG *pchName)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->GetTypeRefProps(tr, ptkResolutionScope, szName, cchName, pchName);
+}
+
+HRESULT ProfilerMetadataEmitValidator::ResolveTypeRef(mdTypeRef tr, REFIID riid, IUnknown **ppIScope, mdTypeDef *ptd)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->ResolveTypeRef(tr, riid, ppIScope, ptd);
+}
+
+HRESULT ProfilerMetadataEmitValidator::EnumMembers(
+ HCORENUM *phEnum,
+ mdTypeDef cl,
+ mdToken rMembers[],
+ ULONG cMax,
+ ULONG *pcTokens)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->EnumMembers(phEnum, cl, rMembers, cMax, pcTokens);
+}
+
+HRESULT ProfilerMetadataEmitValidator::EnumMembersWithName(
+ HCORENUM *phEnum,
+ mdTypeDef cl,
+ LPCWSTR szName,
+ mdToken rMembers[],
+ ULONG cMax,
+ ULONG *pcTokens)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->EnumMembersWithName(phEnum, cl, szName, rMembers, cMax, pcTokens);
+}
+
+HRESULT ProfilerMetadataEmitValidator::EnumMethods(
+ HCORENUM *phEnum,
+ mdTypeDef cl,
+ mdMethodDef rMethods[],
+ ULONG cMax,
+ ULONG *pcTokens)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->EnumMethods(phEnum, cl, rMethods, cMax, pcTokens);
+}
+
+HRESULT ProfilerMetadataEmitValidator::EnumMethodsWithName(
+ HCORENUM *phEnum,
+ mdTypeDef cl,
+ LPCWSTR szName,
+ mdMethodDef rMethods[],
+ ULONG cMax,
+ ULONG *pcTokens)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->EnumMethodsWithName(phEnum, cl, szName, rMethods, cMax, pcTokens);
+}
+
+HRESULT ProfilerMetadataEmitValidator::EnumFields(
+ HCORENUM *phEnum,
+ mdTypeDef cl,
+ mdFieldDef rFields[],
+ ULONG cMax,
+ ULONG *pcTokens)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->EnumFields(phEnum, cl, rFields, cMax, pcTokens);
+}
+
+HRESULT ProfilerMetadataEmitValidator::EnumFieldsWithName(
+ HCORENUM *phEnum,
+ mdTypeDef cl,
+ LPCWSTR szName,
+ mdFieldDef rFields[],
+ ULONG cMax,
+ ULONG *pcTokens)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->EnumFieldsWithName(phEnum, cl, szName, rFields, cMax, pcTokens);
+}
+
+
+HRESULT ProfilerMetadataEmitValidator::EnumParams(
+ HCORENUM *phEnum,
+ mdMethodDef mb,
+ mdParamDef rParams[],
+ ULONG cMax,
+ ULONG *pcTokens)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->EnumParams(phEnum, mb, rParams, cMax, pcTokens);
+}
+
+HRESULT ProfilerMetadataEmitValidator::EnumMemberRefs(
+ HCORENUM *phEnum,
+ mdToken tkParent,
+ mdMemberRef rMemberRefs[],
+ ULONG cMax,
+ ULONG *pcTokens)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->EnumMemberRefs(phEnum, tkParent, rMemberRefs, cMax, pcTokens);
+}
+
+HRESULT ProfilerMetadataEmitValidator::EnumMethodImpls(
+ HCORENUM *phEnum,
+ mdTypeDef td,
+ mdToken rMethodBody[],
+ mdToken rMethodDecl[],
+ ULONG cMax,
+ ULONG *pcTokens)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->EnumMethodImpls(phEnum, td, rMethodBody, rMethodDecl, cMax, pcTokens);
+}
+
+HRESULT ProfilerMetadataEmitValidator::EnumPermissionSets(
+ HCORENUM *phEnum,
+ mdToken tk,
+ DWORD dwActions,
+ mdPermission rPermission[],
+ ULONG cMax,
+ ULONG *pcTokens)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->EnumPermissionSets(phEnum, tk, dwActions, rPermission, cMax, pcTokens);
+}
+
+HRESULT ProfilerMetadataEmitValidator::FindMember(
+ mdTypeDef td,
+ LPCWSTR szName,
+ PCCOR_SIGNATURE pvSigBlob,
+ ULONG cbSigBlob,
+ mdToken *pmb)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->FindMember(td, szName, pvSigBlob, cbSigBlob, pmb);
+}
+
+HRESULT ProfilerMetadataEmitValidator::FindMethod(
+ mdTypeDef td,
+ LPCWSTR szName,
+ PCCOR_SIGNATURE pvSigBlob,
+ ULONG cbSigBlob,
+ mdMethodDef *pmb)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->FindMethod(td, szName, pvSigBlob, cbSigBlob, pmb);
+}
+
+HRESULT ProfilerMetadataEmitValidator::FindField(
+ mdTypeDef td,
+ LPCWSTR szName,
+ PCCOR_SIGNATURE pvSigBlob,
+ ULONG cbSigBlob,
+ mdFieldDef *pmb)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->FindField(td, szName, pvSigBlob, cbSigBlob, pmb);
+}
+
+HRESULT ProfilerMetadataEmitValidator::FindMemberRef(
+ mdTypeRef td,
+ LPCWSTR szName,
+ PCCOR_SIGNATURE pvSigBlob,
+ ULONG cbSigBlob,
+ mdMemberRef *pmr)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->FindMemberRef(td, szName, pvSigBlob, cbSigBlob, pmr);
+}
+
+HRESULT ProfilerMetadataEmitValidator::GetMethodProps(
+ mdMethodDef mb,
+ mdTypeDef *pClass,
+ LPWSTR szMethod,
+ ULONG cchMethod,
+ ULONG *pchMethod,
+ DWORD *pdwAttr,
+ PCCOR_SIGNATURE *ppvSigBlob,
+ ULONG *pcbSigBlob,
+ ULONG *pulCodeRVA,
+ DWORD *pdwImplFlags)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->GetMethodProps(mb, pClass, szMethod, cchMethod, pchMethod, pdwAttr, ppvSigBlob, pcbSigBlob, pulCodeRVA, pdwImplFlags);
+}
+
+HRESULT ProfilerMetadataEmitValidator::GetMemberRefProps(
+ mdMemberRef mr,
+ mdToken *ptk,
+ LPWSTR szMember,
+ ULONG cchMember,
+ ULONG *pchMember,
+ PCCOR_SIGNATURE *ppvSigBlob,
+ ULONG *pbSig)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->GetMemberRefProps(mr, ptk, szMember, cchMember, pchMember, ppvSigBlob, pbSig);
+}
+
+HRESULT ProfilerMetadataEmitValidator::EnumProperties(
+ HCORENUM *phEnum,
+ mdTypeDef td,
+ mdProperty rProperties[],
+ ULONG cMax,
+ ULONG *pcProperties)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->EnumProperties(phEnum, td, rProperties, cMax, pcProperties);
+}
+
+HRESULT ProfilerMetadataEmitValidator::EnumEvents(
+ HCORENUM *phEnum,
+ mdTypeDef td,
+ mdEvent rEvents[],
+ ULONG cMax,
+ ULONG *pcEvents)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->EnumEvents(phEnum, td, rEvents, cMax, pcEvents);
+}
+
+HRESULT ProfilerMetadataEmitValidator::GetEventProps(
+ mdEvent ev,
+ mdTypeDef *pClass,
+ LPCWSTR szEvent,
+ ULONG cchEvent,
+ ULONG *pchEvent,
+ DWORD *pdwEventFlags,
+ mdToken *ptkEventType,
+ mdMethodDef *pmdAddOn,
+ mdMethodDef *pmdRemoveOn,
+ mdMethodDef *pmdFire,
+ mdMethodDef rmdOtherMethod[],
+ ULONG cMax,
+ ULONG *pcOtherMethod)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->GetEventProps(ev, pClass, szEvent, cchEvent, pchEvent, pdwEventFlags, ptkEventType, pmdAddOn, pmdRemoveOn, pmdFire, rmdOtherMethod, cMax, pcOtherMethod);
+}
+
+HRESULT ProfilerMetadataEmitValidator::EnumMethodSemantics(
+ HCORENUM *phEnum,
+ mdMethodDef mb,
+ mdToken rEventProp[],
+ ULONG cMax,
+ ULONG *pcEventProp)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->EnumMethodSemantics(phEnum, mb, rEventProp, cMax, pcEventProp);
+}
+
+HRESULT ProfilerMetadataEmitValidator::GetMethodSemantics(
+ mdMethodDef mb,
+ mdToken tkEventProp,
+ DWORD *pdwSemanticsFlags)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->GetMethodSemantics(mb, tkEventProp, pdwSemanticsFlags);
+}
+
+HRESULT ProfilerMetadataEmitValidator::GetClassLayout(
+ mdTypeDef td,
+ DWORD *pdwPackSize,
+ COR_FIELD_OFFSET rFieldOffset[],
+ ULONG cMax,
+ ULONG *pcFieldOffset,
+ ULONG *pulClassSize)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->GetClassLayout(td, pdwPackSize, rFieldOffset, cMax, pcFieldOffset, pulClassSize);
+}
+
+HRESULT ProfilerMetadataEmitValidator::GetFieldMarshal(
+ mdToken tk,
+ PCCOR_SIGNATURE *ppvNativeType,
+ ULONG *pcbNativeType)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->GetFieldMarshal(tk, ppvNativeType, pcbNativeType);
+}
+
+HRESULT ProfilerMetadataEmitValidator::GetRVA(
+ mdToken tk,
+ ULONG *pulCodeRVA,
+ DWORD *pdwImplFlags)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->GetRVA(tk, pulCodeRVA, pdwImplFlags);
+}
+
+HRESULT ProfilerMetadataEmitValidator::GetPermissionSetProps(
+ mdPermission pm,
+ DWORD *pdwAction,
+ void const **ppvPermission,
+ ULONG *pcbPermission)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->GetPermissionSetProps(pm, pdwAction, ppvPermission, pcbPermission);
+}
+
+HRESULT ProfilerMetadataEmitValidator::GetSigFromToken(
+ mdSignature mdSig,
+ PCCOR_SIGNATURE *ppvSig,
+ ULONG *pcbSig)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->GetSigFromToken(mdSig, ppvSig, pcbSig);
+}
+
+HRESULT ProfilerMetadataEmitValidator::GetModuleRefProps(
+ mdModuleRef mur,
+ LPWSTR szName,
+ ULONG cchName,
+ ULONG *pchName)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->GetModuleRefProps(mur, szName, cchName, pchName);
+}
+
+HRESULT ProfilerMetadataEmitValidator::EnumModuleRefs(
+ HCORENUM *phEnum,
+ mdModuleRef rModuleRefs[],
+ ULONG cmax,
+ ULONG *pcModuleRefs)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->EnumModuleRefs(phEnum, rModuleRefs, cmax, pcModuleRefs);
+}
+
+HRESULT ProfilerMetadataEmitValidator::GetTypeSpecFromToken(
+ mdTypeSpec typespec,
+ PCCOR_SIGNATURE *ppvSig,
+ ULONG *pcbSig)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->GetTypeSpecFromToken(typespec, ppvSig, pcbSig);
+}
+
+HRESULT ProfilerMetadataEmitValidator::GetNameFromToken(
+ mdToken tk,
+ MDUTF8CSTR *pszUtf8NamePtr)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->GetNameFromToken(tk, pszUtf8NamePtr);
+}
+
+HRESULT ProfilerMetadataEmitValidator::EnumUnresolvedMethods(
+ HCORENUM *phEnum,
+ mdToken rMethods[],
+ ULONG cMax,
+ ULONG *pcTokens)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->EnumUnresolvedMethods(phEnum, rMethods, cMax, pcTokens);
+}
+
+HRESULT ProfilerMetadataEmitValidator::GetUserString(
+ mdString stk,
+ LPWSTR szString,
+ ULONG cchString,
+ ULONG *pchString)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->GetUserString(stk, szString, cchString, pchString);
+}
+
+HRESULT ProfilerMetadataEmitValidator::GetPinvokeMap(
+ mdToken tk,
+ DWORD *pdwMappingFlags,
+ LPWSTR szImportName,
+ ULONG cchImportName,
+ ULONG *pchImportName,
+ mdModuleRef *pmrImportDLL)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->GetPinvokeMap(tk, pdwMappingFlags, szImportName, cchImportName, pchImportName, pmrImportDLL);
+}
+
+HRESULT ProfilerMetadataEmitValidator::EnumSignatures(
+ HCORENUM *phEnum,
+ mdSignature rSignatures[],
+ ULONG cmax,
+ ULONG *pcSignatures)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->EnumSignatures(phEnum, rSignatures, cmax, pcSignatures);
+}
+
+HRESULT ProfilerMetadataEmitValidator::EnumTypeSpecs(
+ HCORENUM *phEnum,
+ mdTypeSpec rTypeSpecs[],
+ ULONG cmax,
+ ULONG *pcTypeSpecs)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->EnumTypeSpecs(phEnum, rTypeSpecs, cmax, pcTypeSpecs);
+}
+
+HRESULT ProfilerMetadataEmitValidator::EnumUserStrings(
+ HCORENUM *phEnum,
+ mdString rStrings[],
+ ULONG cmax,
+ ULONG *pcStrings)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->EnumUserStrings(phEnum, rStrings, cmax, pcStrings);
+}
+
+HRESULT ProfilerMetadataEmitValidator::GetParamForMethodIndex(
+ mdMethodDef md,
+ ULONG ulParamSeq,
+ mdParamDef *ppd)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->GetParamForMethodIndex(md, ulParamSeq, ppd);
+}
+
+HRESULT ProfilerMetadataEmitValidator::EnumCustomAttributes(
+ HCORENUM *phEnum,
+ mdToken tk,
+ mdToken tkType,
+ mdCustomAttribute rCustomAttributes[],
+ ULONG cMax,
+ ULONG *pcCustomAttributes)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->EnumCustomAttributes(phEnum, tk, tkType, rCustomAttributes, cMax, pcCustomAttributes);
+}
+
+HRESULT ProfilerMetadataEmitValidator::GetCustomAttributeProps(
+ mdCustomAttribute cv,
+ mdToken *ptkObj,
+ mdToken *ptkType,
+ void const **ppBlob,
+ ULONG *pcbSize)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->GetCustomAttributeProps(cv, ptkObj, ptkType, ppBlob, pcbSize);
+}
+
+HRESULT ProfilerMetadataEmitValidator::FindTypeRef(
+ mdToken tkResolutionScope,
+ LPCWSTR szName,
+ mdTypeRef *ptr)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->FindTypeRef(tkResolutionScope, szName, ptr);
+}
+
+HRESULT ProfilerMetadataEmitValidator::GetMemberProps(
+ mdToken mb,
+ mdTypeDef *pClass,
+ LPWSTR szMember,
+ ULONG cchMember,
+ ULONG *pchMember,
+ DWORD *pdwAttr,
+ PCCOR_SIGNATURE *ppvSigBlob,
+ ULONG *pcbSigBlob,
+ ULONG *pulCodeRVA,
+ DWORD *pdwImplFlags,
+ DWORD *pdwCPlusTypeFlag,
+ UVCP_CONSTANT *ppValue,
+ ULONG *pcchValue)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->GetMemberProps(mb, pClass, szMember, cchMember, pchMember, pdwAttr, ppvSigBlob, pcbSigBlob, pulCodeRVA, pdwImplFlags, pdwCPlusTypeFlag, ppValue, pcchValue);
+}
+
+HRESULT ProfilerMetadataEmitValidator::GetFieldProps(
+ mdFieldDef mb,
+ mdTypeDef *pClass,
+ LPWSTR szField,
+ ULONG cchField,
+ ULONG *pchField,
+ DWORD *pdwAttr,
+ PCCOR_SIGNATURE *ppvSigBlob,
+ ULONG *pcbSigBlob,
+ DWORD *pdwCPlusTypeFlag,
+ UVCP_CONSTANT *ppValue,
+ ULONG *pcchValue)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->GetFieldProps(mb, pClass, szField, cchField, pchField, pdwAttr, ppvSigBlob, pcbSigBlob, pdwCPlusTypeFlag, ppValue, pcchValue);
+}
+
+HRESULT ProfilerMetadataEmitValidator::GetPropertyProps(
+ mdProperty prop,
+ mdTypeDef *pClass,
+ LPCWSTR szProperty,
+ ULONG cchProperty,
+ ULONG *pchProperty,
+ DWORD *pdwPropFlags,
+ PCCOR_SIGNATURE *ppvSig,
+ ULONG *pbSig,
+ DWORD *pdwCPlusTypeFlag,
+ UVCP_CONSTANT *ppDefaultValue,
+ ULONG *pcchDefaultValue,
+ mdMethodDef *pmdSetter,
+ mdMethodDef *pmdGetter,
+ mdMethodDef rmdOtherMethod[],
+ ULONG cMax,
+ ULONG *pcOtherMethod)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->GetPropertyProps(prop, pClass, szProperty, cchProperty, pchProperty, pdwPropFlags, ppvSig, pbSig, pdwCPlusTypeFlag, ppDefaultValue, pcchDefaultValue, pmdSetter, pmdGetter,
+ rmdOtherMethod, cMax, pcOtherMethod);
+}
+
+HRESULT ProfilerMetadataEmitValidator::GetParamProps(
+ mdParamDef tk,
+ mdMethodDef *pmd,
+ ULONG *pulSequence,
+ LPWSTR szName,
+ ULONG cchName,
+ ULONG *pchName,
+ DWORD *pdwAttr,
+ DWORD *pdwCPlusTypeFlag,
+ UVCP_CONSTANT *ppValue,
+ ULONG *pcchValue)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->GetParamProps(tk, pmd, pulSequence, szName, cchName, pchName, pdwAttr, pdwCPlusTypeFlag, ppValue, pcchValue);
+}
+
+HRESULT ProfilerMetadataEmitValidator::GetCustomAttributeByName(
+ mdToken tkObj,
+ LPCWSTR szName,
+ const void **ppData,
+ ULONG *pcbData)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->GetCustomAttributeByName(tkObj, szName, ppData, pcbData);
+}
+
+BOOL ProfilerMetadataEmitValidator::IsValidToken(
+ mdToken tk)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->IsValidToken(tk);
+}
+
+HRESULT ProfilerMetadataEmitValidator::GetNestedClassProps(
+ mdTypeDef tdNestedClass,
+ mdTypeDef *ptdEnclosingClass)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->GetNestedClassProps(tdNestedClass, ptdEnclosingClass);
+}
+
+HRESULT ProfilerMetadataEmitValidator::GetNativeCallConvFromSig(
+ void const *pvSig,
+ ULONG cbSig,
+ ULONG *pCallConv)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->GetNativeCallConvFromSig(pvSig, cbSig, pCallConv);
+}
+
+HRESULT ProfilerMetadataEmitValidator::IsGlobal(
+ mdToken pd,
+ int *pbGlobal)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->IsGlobal(pd, pbGlobal);
+}
+
+//IMetaDataImport2
+HRESULT ProfilerMetadataEmitValidator::EnumGenericParams(
+ HCORENUM *phEnum,
+ mdToken tk,
+ mdGenericParam rGenericParams[],
+ ULONG cMax,
+ ULONG *pcGenericParams)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->EnumGenericParams(phEnum, tk, rGenericParams, cMax, pcGenericParams);
+}
+
+
+HRESULT ProfilerMetadataEmitValidator::GetGenericParamProps(
+ mdGenericParam gp,
+ ULONG *pulParamSeq,
+ DWORD *pdwParamFlags,
+ mdToken *ptOwner,
+ DWORD *reserved,
+ LPWSTR wzname,
+ ULONG cchName,
+ ULONG *pchName)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->GetGenericParamProps(gp, pulParamSeq, pdwParamFlags, ptOwner, reserved, wzname, cchName, pchName);
+}
+
+HRESULT ProfilerMetadataEmitValidator::GetMethodSpecProps(
+ mdMethodSpec mi,
+ mdToken *tkParent,
+ PCCOR_SIGNATURE *ppvSigBlob,
+ ULONG *pcbSigBlob)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->GetMethodSpecProps(mi, tkParent, ppvSigBlob, pcbSigBlob);
+}
+
+HRESULT ProfilerMetadataEmitValidator::EnumGenericParamConstraints(
+ HCORENUM *phEnum,
+ mdGenericParam tk,
+ mdGenericParamConstraint rGenericParamConstraints[],
+ ULONG cMax,
+ ULONG *pcGenericParamConstraints)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->EnumGenericParamConstraints(phEnum, tk, rGenericParamConstraints, cMax, pcGenericParamConstraints);
+}
+
+HRESULT ProfilerMetadataEmitValidator::GetGenericParamConstraintProps(
+ mdGenericParamConstraint gpc,
+ mdGenericParam *ptGenericParam,
+ mdToken *ptkConstraintType)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->GetGenericParamConstraintProps(gpc, ptGenericParam, ptkConstraintType);
+}
+
+HRESULT ProfilerMetadataEmitValidator::GetPEKind(
+ DWORD* pdwPEKind,
+ DWORD* pdwMachine)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->GetPEKind(pdwPEKind, pdwMachine);
+}
+
+HRESULT ProfilerMetadataEmitValidator::GetVersionString(
+ LPWSTR pwzBuf,
+ DWORD ccBufSize,
+ DWORD *pccBufSize)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->GetVersionString(pwzBuf, ccBufSize, pccBufSize);
+}
+
+HRESULT ProfilerMetadataEmitValidator::EnumMethodSpecs(
+ HCORENUM *phEnum,
+ mdToken tk,
+ mdMethodSpec rMethodSpecs[],
+ ULONG cMax,
+ ULONG *pcMethodSpecs)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerImport->EnumMethodSpecs(phEnum, tk, rMethodSpecs, cMax, pcMethodSpecs);
+}
+
+
+// IMetaDataAssemblyImport
+HRESULT ProfilerMetadataEmitValidator::GetAssemblyProps(
+ mdAssembly mda,
+ const void **ppbPublicKey,
+ ULONG *pcbPublicKey,
+ ULONG *pulHashAlgId,
+ LPWSTR szName,
+ ULONG cchName,
+ ULONG *pchName,
+ ASSEMBLYMETADATA *pMetaData,
+ DWORD *pdwAssemblyFlags)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerAssemblyImport->GetAssemblyProps(mda, ppbPublicKey, pcbPublicKey, pulHashAlgId, szName, cchName, pchName, pMetaData, pdwAssemblyFlags);
+}
+
+HRESULT ProfilerMetadataEmitValidator::GetAssemblyRefProps(
+ mdAssemblyRef mdar,
+ const void **ppbPublicKeyOrToken,
+ ULONG *pcbPublicKeyOrToken,
+ LPWSTR szName,
+ ULONG cchName,
+ ULONG *pchName,
+ ASSEMBLYMETADATA *pMetaData,
+ const void **ppbHashValue,
+ ULONG *pcbHashValue,
+ DWORD *pdwAssemblyRefFlags)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerAssemblyImport->GetAssemblyRefProps(mdar, ppbPublicKeyOrToken, pcbPublicKeyOrToken, szName, cchName, pchName, pMetaData, ppbHashValue, pcbHashValue, pdwAssemblyRefFlags);
+}
+
+HRESULT ProfilerMetadataEmitValidator::GetFileProps(
+ mdFile mdf,
+ LPWSTR szName,
+ ULONG cchName,
+ ULONG *pchName,
+ const void **ppbHashValue,
+ ULONG *pcbHashValue,
+ DWORD *pdwFileFlags)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerAssemblyImport->GetFileProps(mdf, szName, cchName, pchName, ppbHashValue, pcbHashValue, pdwFileFlags);
+}
+
+HRESULT ProfilerMetadataEmitValidator::GetExportedTypeProps(
+ mdExportedType mdct,
+ LPWSTR szName,
+ ULONG cchName,
+ ULONG *pchName,
+ mdToken *ptkImplementation,
+ mdTypeDef *ptkTypeDef,
+ DWORD *pdwExportedTypeFlags)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerAssemblyImport->GetExportedTypeProps(mdct, szName, cchName, pchName, ptkImplementation, ptkTypeDef, pdwExportedTypeFlags);
+}
+
+HRESULT ProfilerMetadataEmitValidator::GetManifestResourceProps(
+ mdManifestResource mdmr,
+ LPWSTR szName,
+ ULONG cchName,
+ ULONG *pchName,
+ mdToken *ptkImplementation,
+ DWORD *pdwOffset,
+ DWORD *pdwResourceFlags)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerAssemblyImport->GetManifestResourceProps(mdmr, szName, cchName, pchName, ptkImplementation, pdwOffset, pdwResourceFlags);
+}
+
+HRESULT ProfilerMetadataEmitValidator::EnumAssemblyRefs(
+ HCORENUM *phEnum,
+ mdAssemblyRef rAssemblyRefs[],
+ ULONG cMax,
+ ULONG *pcTokens)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerAssemblyImport->EnumAssemblyRefs(phEnum, rAssemblyRefs, cMax, pcTokens);
+}
+
+HRESULT ProfilerMetadataEmitValidator::EnumFiles(
+ HCORENUM *phEnum,
+ mdFile rFiles[],
+ ULONG cMax,
+ ULONG *pcTokens)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerAssemblyImport->EnumFiles(phEnum, rFiles, cMax, pcTokens);
+}
+
+HRESULT ProfilerMetadataEmitValidator::EnumExportedTypes(
+ HCORENUM *phEnum,
+ mdExportedType rExportedTypes[],
+ ULONG cMax,
+ ULONG *pcTokens)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerAssemblyImport->EnumExportedTypes(phEnum, rExportedTypes, cMax, pcTokens);
+}
+
+HRESULT ProfilerMetadataEmitValidator::EnumManifestResources(
+ HCORENUM *phEnum,
+ mdManifestResource rManifestResources[],
+ ULONG cMax,
+ ULONG *pcTokens)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerAssemblyImport->EnumManifestResources(phEnum, rManifestResources, cMax, pcTokens);
+}
+
+HRESULT ProfilerMetadataEmitValidator::GetAssemblyFromScope(
+ mdAssembly *ptkAssembly)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerAssemblyImport->GetAssemblyFromScope(ptkAssembly);
+}
+
+HRESULT ProfilerMetadataEmitValidator::FindExportedTypeByName(
+ LPCWSTR szName,
+ mdToken mdtExportedType,
+ mdExportedType *ptkExportedType)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerAssemblyImport->FindExportedTypeByName(szName, mdtExportedType, ptkExportedType);
+}
+
+HRESULT ProfilerMetadataEmitValidator::FindManifestResourceByName(
+ LPCWSTR szName,
+ mdManifestResource *ptkManifestResource)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerAssemblyImport->FindManifestResourceByName(szName, ptkManifestResource);
+}
+
+HRESULT ProfilerMetadataEmitValidator::FindAssembliesByName(
+ LPCWSTR szAppBase,
+ LPCWSTR szPrivateBin,
+ LPCWSTR szAssemblyName,
+ IUnknown *ppIUnk[],
+ ULONG cMax,
+ ULONG *pcAssemblies)
+{
+ LIMITED_METHOD_CONTRACT;
+ return m_pInnerAssemblyImport->FindAssembliesByName(szAppBase, szPrivateBin, szAssemblyName, ppIUnk, cMax, pcAssemblies);
+}