/// <summary>
        ///    Constructs and initializes a new instance of <see
        ///    cref="HeaderObject" /> by reading the contents from a
        ///    specified position in a specified file.
        /// </summary>
        /// <param name="file">
        ///    A <see cref="Asf.File" /> object containing the file from
        ///    which the contents of the new instance are to be read.
        /// </param>
        /// <param name="position">
        ///    A <see cref="long" /> value specify at what position to
        ///    read the object.
        /// </param>
        /// <exception cref="ArgumentNullException">
        ///    <paramref name="file" /> is <see langword="null" />.
        /// </exception>
        /// <exception cref="ArgumentOutOfRangeException">
        ///    <paramref name="position" /> is less than zero or greater
        ///    than the size of the file.
        /// </exception>
        /// <exception cref="CorruptFileException">
        ///    The object read from disk does not have the correct GUID
        ///    or smaller than the minimum size.
        /// </exception>
        public HeaderObject(Asf.File file, long position)
            : base(file, position)
        {
            if (!Guid.Equals(Asf.Guid.AsfHeaderObject))
            {
                throw new CorruptFileException(
                          "Object GUID incorrect.");
            }

            if (OriginalSize < 26)
            {
                throw new CorruptFileException(
                          "Object size too small.");
            }

            children = new List <Object> ();

            uint child_count = file.ReadDWord();

            reserved = file.ReadBlock(2);

            children.AddRange(file.ReadObjects(child_count,
                                               file.Tell));
        }