/// <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);
            }