PERWAPI.CustomAttribute.DecodeCustomAttributeBlob C# (CSharp) Method

DecodeCustomAttributeBlob() private method

private DecodeCustomAttributeBlob ( ) : void
return void
        internal void DecodeCustomAttributeBlob()
        {
            MemoryStream caBlob = new MemoryStream(byteVal);
            BinaryReader blob = new BinaryReader(caBlob,System.Text.Encoding.UTF8);
            if (blob.ReadUInt16() != CustomAttribute.prolog) throw new PEFileException("Invalid Custom Attribute Blob");
            Type[] parTypes = type.GetParTypes();
            argVals = new Constant[parTypes.Length];
            for (int i=0; i < parTypes.Length; i++) {
                Type argType = parTypes[i];
                bool arrayConst = argType is Array;
                if (arrayConst) argType = ((ZeroBasedArray)(parTypes[i])).ElemType();
                bool boxed = argType is SystemClass;
                int eType = argType.GetTypeIndex();
                if (arrayConst) {
                    Constant[] elems = new Constant[blob.ReadUInt32()];
                    for (int j=0; j < elems.Length; j++) {
                        if (boxed) {
                            eType = blob.ReadByte();
                            elems[j] = new BoxedSimpleConst((SimpleConstant)PEReader.ReadConst(eType,blob));
                        } else {
                            elems[j] = PEReader.ReadConst(eType,blob);
                        }
                    }
                    argVals[i] = new ArrayConst(elems);
                } else if (boxed) {
                    argVals[i] = new BoxedSimpleConst((SimpleConstant)PEReader.ReadConst(blob.ReadByte(),blob));
                } else {
                    argVals[i] = PEReader.ReadConst(eType,blob);
                }
            }
            uint numNamed = 0;
            if (blob.BaseStream.Position != byteVal.Length)
                numNamed = blob.ReadUInt16();
            if (numNamed > 0) {
                names = new string[numNamed];
                vals = new Constant[numNamed];
                isField = new bool[numNamed];
                for (int i=0; i < numNamed; i++) {
                    isField[i] = blob.ReadByte() == 0x53;
                    int eType = blob.ReadByte();
                    names[i] = blob.ReadString();
                    vals[i] = PEReader.ReadConst(eType,blob);
                }
            }
        }