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