Exemplo n.º 1
0
        /// <summary>
        /// Parses the ShellLinkHeader
        /// </summary>
        /// <exception cref="ShellLinkHeaderException">Thrown if ShellLinkHeader is not valid</exception>
        private void ParseShellLinkHeader()
        {
            ShellLinkHeader = Stream.ReadStruct <Structs.ShellLinkHeader>();

            if (ShellLinkHeader.HeaderSize != 0x4C)
            {
                throw new ShellLinkHeaderException("ShellLinkHeader.HeaderSize does not equal 0x4C",
                                                   nameof(ShellLinkHeader.HeaderSize));
            }

            if (!ShellLinkHeader.LinkClsid.Equals(new Guid(Consts.LnkClsid)))
            {
                throw new ShellLinkHeaderException("CLSID is not LNK CLSID", nameof(ShellLinkHeader.LinkClsid));
            }

            if (ShellLinkHeader.Reserved1 != 0)
            {
                throw new ShellLinkHeaderException("Reserved fields must be 0", nameof(ShellLinkHeader.Reserved1));
            }

            if (ShellLinkHeader.Reserved2 != 0)
            {
                throw new ShellLinkHeaderException("Reserved fields must be 0", nameof(ShellLinkHeader.Reserved2));
            }

            if (ShellLinkHeader.Reserved3 != 0)
            {
                throw new ShellLinkHeaderException("Reserved fields must be 0", nameof(ShellLinkHeader.Reserved3));
            }

            if (!Enum.IsDefined(typeof(Enums.ShowWindowCommands), ShellLinkHeader.ShowCommand))
            {
                ShellLinkHeader.ShowCommand = Enums.ShowWindowCommands.Normal;
            }
        }
        /// <summary>
        /// Resets the Stream position to the beginning and clears the fields
        /// </summary>
        private void Reset()
        {
            Stream.Seek(0, SeekOrigin.Begin);

            ShellLinkHeader  = new Structs.ShellLinkHeader();
            LinkTargetIdList = new Structs.LinkTargetIDList();
            LinkInfo         = new Structs.LinkInfo();
            StringData       = new Structs.StringData();
        }