Exemple #1
0
        //TODO: HotKey;

        public LnkHeader(byte[] hb)
        {
            Size         = BitConverter.ToInt32(hb.Take(4).ToArray(), 0);
            CLSID        = new Guid(hb.Skip(4).Take(16).ToArray());
            Flags        = new LnkFlags(hb.Skip(20).Take(4).ToArray());
            Attrs        = new LnkFileAttrs(hb.Skip(24).Take(4).ToArray());
            CreationTime = DateTime.FromFileTime(BitConverter.ToInt64(hb.Skip(28).Take(8).ToArray(), 0));
            AccessTime   = DateTime.FromFileTime(BitConverter.ToInt64(hb.Skip(36).Take(8).ToArray(), 0));
            WriteTime    = DateTime.FromFileTime(BitConverter.ToInt64(hb.Skip(44).Take(8).ToArray(), 0));
            FileSize     = BitConverter.ToUInt32(hb.Skip(52).Take(4).ToArray(), 0);
            IconIndex    = BitConverter.ToInt32(hb.Skip(56).Take(4).ToArray(), 0);
            ShowCommand  = (LnkShowCommand)BitConverter.ToUInt32(hb.Skip(60).Take(4).ToArray(), 0);
            //TODO: HotKey -> 2B
            // 2B Reserved 1
            // 4B Reserved 2
            // 4B Reserved 3
        }
Exemple #2
0
        public LnkStrData(LnkFlags flags, byte[] sdb)
        {
            int           charCount;
            int           i;
            StringBuilder sb = new StringBuilder();

            if (flags.HasName)
            {
                charCount = BitConverter.ToInt16(sdb.Take(2).ToArray(), 0);
                i         = 2;
                while (sb.Length < charCount)
                {
                    char c = Convert.ToChar(sdb[i++]);
                    if (c == '\0')
                    {
                        continue;
                    }
                    sb.Append(c);
                }
                NAME_STRING = sb.ToString();
                sdb         = sdb.Skip(i + 1).ToArray();
                sb.Clear();
            }

            if (flags.HasRelativePath)
            {
                charCount = BitConverter.ToInt16(sdb.Take(2).ToArray(), 0);
                i         = 2;
                while (sb.Length < charCount)
                {
                    char c = Convert.ToChar(sdb[i++]);
                    if (c == '\0')
                    {
                        continue;
                    }
                    sb.Append(c);
                }
                RELATIVE_PATH = sb.ToString();
                sdb           = sdb.Skip(i + 1).ToArray();
                sb.Clear();
            }

            if (flags.HasWorkingDir)
            {
                charCount = BitConverter.ToInt16(sdb.Take(2).ToArray(), 0);
                i         = 2;
                while (sb.Length < charCount)
                {
                    char c = Convert.ToChar(sdb[i++]);
                    if (c == '\0')
                    {
                        continue;
                    }
                    sb.Append(c);
                }
                WORKING_DIR = sb.ToString();
                sdb         = sdb.Skip(i + 1).ToArray();
                sb.Clear();
            }

            if (flags.HasArguments)
            {
                charCount = BitConverter.ToInt16(sdb.Take(2).ToArray(), 0);
                i         = 2;
                while (sb.Length < charCount)
                {
                    char c = Convert.ToChar(sdb[i++]);
                    if (c == '\0')
                    {
                        continue;
                    }
                    sb.Append(c);
                }
                COMMAND_LINE_ARGUMENTS = sb.ToString();
                sdb = sdb.Skip(i + 1).ToArray();
                sb.Clear();
            }

            if (flags.HasIconLocation)
            {
                charCount = BitConverter.ToInt16(sdb.Take(2).ToArray(), 0);
                i         = 2;
                while (sb.Length < charCount)
                {
                    char c = Convert.ToChar(sdb[i++]);
                    if (c == '\0')
                    {
                        continue;
                    }
                    sb.Append(c);
                }
                ICON_LOCATION = sb.ToString();
                sdb           = sdb.Skip(i + 1).ToArray();
                sb.Clear();
            }
        }