/// <summary> /// Array of PPI fields /// </summary> private List <PpiField> ReadPpiFields() { //If aligned is true then fields must all start on 32bit boundaries so we might need //to read some extra padding from the end of the header fields. var aligned = ((this.Flags & HeaderFlags.Alignment32Bit) == HeaderFlags.Alignment32Bit); var retList = new List <PpiField>(); // create a binary reader that points to the memory immediately after the dtl var offset = this.header.Offset + PpiHeaderFields.FirstFieldPosition; var br = new BinaryReader(new MemoryStream(this.header.Bytes, offset, this.header.Length - offset)); var type = 0; var length = PpiHeaderFields.FirstFieldPosition; while (length < this.header.Length) { type = br.ReadUInt16(); var fieldLength = br.ReadUInt16(); //add the length plus 4 for the type and length fields length += fieldLength + 4; retList.Add(PpiField.Parse(type, br, fieldLength)); var paddingByteCount = this.GetDistanceTo32BitAlignment(fieldLength); if (aligned && (paddingByteCount > 0)) { br.ReadBytes(paddingByteCount); length += paddingByteCount; } } return(retList); }