Exemplo n.º 1
0
        static unsafe string GetFieldName(IMetaDataImport mdi, uint token)
        {
            if (mdi == null)
            {
                return(null);
            }
            uint chField, dwAttr;

            char[] nameBuf = null;
            int    hr      = mdi.GetFieldProps(token, IntPtr.Zero, IntPtr.Zero, 0, out chField, out dwAttr, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero);

            if (hr >= 0 && chField != 0)
            {
                nameBuf = new char[chField];

                fixed(char *p = &nameBuf[0])
                hr = mdi.GetFieldProps(token, IntPtr.Zero, new IntPtr(p), (uint)nameBuf.Length, out chField, out dwAttr, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero);
            }
            if (hr < 0)
            {
                return(null);
            }

            if (chField <= 1)
            {
                return(string.Empty);
            }
            return(new string(nameBuf, 0, (int)chField - 1));
        }
Exemplo n.º 2
0
        static FieldAttributes GetFieldAttributes(IMetaDataImport mdi, uint token)
        {
            uint chField, dwAttr;
            int  hr = mdi.GetFieldProps(token, IntPtr.Zero, IntPtr.Zero, 0, out chField, out dwAttr, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero);

            return(hr < 0 ? 0 : (FieldAttributes)dwAttr);
        }
Exemplo n.º 3
0
        public FieldProps GetFieldProps(uint fieldDef)
        {
            FieldProps ret       = new FieldProps();
            IntPtr     sigPtr    = IntPtr.Zero;
            uint       sigSize   = 0;
            IntPtr     constPtr  = IntPtr.Zero;
            uint       constSize = 0;

            ret.Token = fieldDef;
            ret.Name  = Util.GetString(delegate(uint pStringLenght, out uint stringLenght, System.IntPtr pString) {
                metaData.GetFieldProps(
                    ret.Token,
                    out ret.DeclaringClass,
                    pString, pStringLenght, out stringLenght,                     // The string to get
                    out ret.Flags,
                    out sigPtr,
                    out sigSize,
                    out ret.CPlusTypeFlag,
                    out constPtr,                     // TODO: What is this?
                    out constSize
                    );
            });
            ret.SigBlob       = new Blob(sigPtr, sigSize);
            ret.ConstantValue = new Blob(constPtr, constSize);
            return(ret);
        }
Exemplo n.º 4
0
        public unsafe FieldProps GetFieldProps(uint token)
        {
            FieldProps props;
            uint       pchName, maxcbName = 50, lenSigBlob;
            byte *     ptrBlob;

            byte[] buffer = new byte[2 * (maxcbName + 1)];
            IntPtr ppValue;
            uint   ppchValue;

            importer.GetFieldProps(token, out props.mClass, buffer, maxcbName, out pchName, out props.pdwAttr,
                                   out ptrBlob, out lenSigBlob, out props.pdwCPlusTypeFlag, out ppValue, out ppchValue);
            if (pchName > maxcbName)
            {
                buffer = new byte[2 * (pchName + 1)];
                importer.GetFieldProps(token, out props.mClass, buffer, pchName, out pchName, out props.pdwAttr,
                                       out ptrBlob, out lenSigBlob, out props.pdwCPlusTypeFlag, out ppValue, out ppchValue);
            }
            props.fName   = UnicodeEncoding.Unicode.GetString(buffer).Substring(0, (int)pchName - 1);
            props.sigBlob = pointerToArray(ptrBlob, lenSigBlob);
            props.token   = token;
            props.ppValue = read_array(ppValue, ppchValue);
            return(props);
        }
Exemplo n.º 5
0
        unsafe static object GetFieldConstant(IMetaDataImport mdi, uint token, out CorElementType constantType)
        {
            constantType = CorElementType.End;
            if (mdi == null)
            {
                return(null);
            }
            uint           chField, dwAttr, cchValue;
            IntPtr         pValue;
            CorElementType constantTypeTmp;
            int            hr = mdi.GetFieldProps(token, IntPtr.Zero, IntPtr.Zero, 0, out chField, out dwAttr, IntPtr.Zero, IntPtr.Zero, new IntPtr(&constantTypeTmp), new IntPtr(&pValue), new IntPtr(&cchValue));

            if (hr < 0 || pValue == IntPtr.Zero)
            {
                return(null);
            }
            constantType = constantTypeTmp;
            return(ReadConstant(pValue, cchValue, constantType));
        }
Exemplo n.º 6
0
        static unsafe byte[] GetFieldSignature(IMetaDataImport mdi, uint token)
        {
            if (mdi == null)
            {
                return(null);
            }

            uint   chField, dwAttr, sigLen = 0;
            IntPtr sigAddr;
            int    hr = mdi.GetFieldProps(token, IntPtr.Zero, IntPtr.Zero, 0, out chField, out dwAttr, new IntPtr(&sigAddr), new IntPtr(&sigLen), IntPtr.Zero, IntPtr.Zero, IntPtr.Zero);

            if (hr < 0)
            {
                return(null);
            }

            var buf = new byte[sigLen];

            Marshal.Copy(sigAddr, buf, 0, buf.Length);
            return(buf);
        }
Exemplo n.º 7
0
        public FieldProps GetFieldProps(uint fieldToken)
        {
            FieldProps fieldProps = new FieldProps();

            fieldProps.Token = fieldToken;
            fieldProps.Name  =
                Util.GetString(delegate(uint pStringLenght, out uint stringLenght, System.IntPtr pString) {
                uint unused;
                IntPtr unusedPtr = IntPtr.Zero;
                metaData.GetFieldProps(fieldProps.Token,
                                       out fieldProps.ClassToken,
                                       pString, pStringLenght, out stringLenght,                         // The string to get
                                       out fieldProps.Flags,
                                       IntPtr.Zero,
                                       out unused,
                                       out unused,
                                       out unusedPtr,
                                       out unused);
            });

            return(fieldProps);
        }
Exemplo n.º 8
0
        public FieldProps GetFieldProps(uint fieldDef)
        {
            FieldProps ret     = new FieldProps();
            IntPtr     sigPtr  = IntPtr.Zero;
            uint       sigSize = 0;

            ret.Token = fieldDef;
            ret.Name  = Util.GetString(delegate(uint pStringLenght, out uint stringLenght, System.IntPtr pString) {
                metaData.GetFieldProps(
                    ret.Token,
                    out ret.DeclaringClass,
                    pString, pStringLenght, out stringLenght,
                    out ret.Flags,
                    out sigPtr,
                    out sigSize,
                    out ret.ConstantType,
                    out ret.ConstantPtr,
                    out ret.ConstantStringLength
                    );
            });
            ret.SigBlob = new Blob(sigPtr, sigSize);
            return(ret);
        }
Exemplo n.º 9
0
		public static unsafe byte[] GetFieldSignatureBlob(IMetaDataImport mdi, uint token) {
			if (mdi == null)
				return null;

			uint sigLen = 0;
			IntPtr sigAddr;
			int hr = mdi.GetFieldProps(token, IntPtr.Zero, IntPtr.Zero, 0, IntPtr.Zero, IntPtr.Zero, new IntPtr(&sigAddr), new IntPtr(&sigLen), IntPtr.Zero, IntPtr.Zero, IntPtr.Zero);
			if (hr < 0 || sigAddr == IntPtr.Zero)
				return null;

			var buf = new byte[sigLen];
			Marshal.Copy(sigAddr, buf, 0, buf.Length);
			return buf;
		}
Exemplo n.º 10
0
		public static unsafe string GetFieldName(IMetaDataImport mdi, uint token) {
			if (mdi == null)
				return null;
			uint chField = 0, dwAttr = 0;
			char[] nameBuf = null;
			int hr = mdi.GetFieldProps(token, IntPtr.Zero, IntPtr.Zero, 0, new IntPtr(&chField), new IntPtr(&dwAttr), IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero);
			if (hr >= 0 && chField != 0) {
				nameBuf = new char[chField];
				fixed (char* p = &nameBuf[0])
					hr = mdi.GetFieldProps(token, IntPtr.Zero, new IntPtr(p), (uint)nameBuf.Length, new IntPtr(&chField), IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero);
			}
			if (hr < 0)
				return null;

			if (chField <= 1)
				return string.Empty;
			return new string(nameBuf, 0, (int)chField - 1);
		}
Exemplo n.º 11
0
		public unsafe static uint GetFieldOwnerRid(IMetaDataImport mdi, uint token) {
			if (mdi == null)
				return 0;
			if (IsGlobal(mdi, token))
				return 1;
			uint ownerToken;
			int hr = mdi.GetFieldProps(token, new IntPtr(&ownerToken), IntPtr.Zero, 0, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero);
			if (hr != 0)
				return 0;
			var ownerMdToken = new MDToken(ownerToken);
			return ownerMdToken.Table == Table.TypeDef ? ownerMdToken.Rid : 0;
		}
Exemplo n.º 12
0
 internal string _FieldNameFromToken(IMetaDataImport importer, uint fieldtok)
 {
     uint fieldnamelen = 0;
     uint dwAttr;
     IntPtr pvSigBlob;
     uint cbSigBlob, dwCPlusTypeFlag;
     IntPtr pValue;
     uint cchValue;
     uint classtypetok;
     // 33554432/0x02000000 class type refers to the base type.
     importer.GetFieldProps(fieldtok, out classtypetok, null, fieldnamelen, out fieldnamelen,
         out dwAttr, out pvSigBlob, out cbSigBlob, out dwCPlusTypeFlag, out pValue, out cchValue);
     char[] fieldnamebuf = new char[fieldnamelen];
     importer.GetFieldProps(fieldtok, out classtypetok, fieldnamebuf, fieldnamelen, out fieldnamelen,
         out dwAttr, out pvSigBlob, out cbSigBlob, out dwCPlusTypeFlag, out pValue, out cchValue);
     if (0 == fieldnamelen)
     {
         return null;
     }
     fieldnamelen--; // Remove nul.
     string fieldname = new string(fieldnamebuf, 0, (int)fieldnamelen);
     return fieldname;
 }
Exemplo n.º 13
0
		static FieldAttributes GetFieldAttributes(IMetaDataImport mdi, uint token) {
			uint chField, dwAttr;
			int hr = mdi.GetFieldProps(token, IntPtr.Zero, IntPtr.Zero, 0, out chField, out dwAttr, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero);
			return hr < 0 ? 0 : (FieldAttributes)dwAttr;
		}
 public static bool FieldIsStatic(IMetaDataImport mdi, uint tk)
 {
     int dwAttr;
     mdi.GetFieldProps(tk, IntPtr.Zero, IntPtr.Zero, 0, IntPtr.Zero, (IntPtr)(&dwAttr), IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero);
     return (dwAttr & (int)CorFieldAttr.fdStatic) != 0;
 }
Exemplo n.º 15
0
		public unsafe static FieldAttributes GetFieldAttributes(IMetaDataImport mdi, uint token) {
			uint dwAttr;
			int hr = mdi.GetFieldProps(token, IntPtr.Zero, IntPtr.Zero, 0, IntPtr.Zero, new IntPtr(&dwAttr), IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero);
			Debug.Assert(hr == 0);
			return hr < 0 ? 0 : (FieldAttributes)dwAttr;
		}
Exemplo n.º 16
0
		public unsafe static object GetFieldConstant(IMetaDataImport mdi, uint token, out CorElementType constantType) {
			constantType = CorElementType.End;
			if (mdi == null)
				return null;
			uint cchValue;
			IntPtr pValue;
			CorElementType constantTypeTmp;
			int hr = mdi.GetFieldProps(token, IntPtr.Zero, IntPtr.Zero, 0, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, new IntPtr(&constantTypeTmp), new IntPtr(&pValue), new IntPtr(&cchValue));
			if (hr < 0 || pValue == IntPtr.Zero)
				return null;
			constantType = constantTypeTmp;
			return ReadConstant(pValue, cchValue, constantType);
		}
        public static string FieldGetName(IMetaDataImport mdi, uint tk)
        {
            uint chName;

            mdi.GetFieldProps(tk, IntPtr.Zero, IntPtr.Zero, 0, (IntPtr)(&chName), IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero);

            char* szName = stackalloc char[(int)chName];

            mdi.GetFieldProps(tk, IntPtr.Zero, (IntPtr)szName, chName, (IntPtr)(&chName), IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero);
            return new string(szName);
        }