Windows Short Cut (*.lnk)(LNK.rfh):
Class: OS Specific, Status: Almost Complete, Last change: 29.07.1999 11:06:08

include GUID.rfi

type

TLnkPathBlockTag enum byte (
  B0 = 0x1F,
  Drv = 0x23,
  Dir = 0x31,
  File = 0x32
)

TLnkPathBlock struc pas
  Sz: Word
  Tag: TLnkPathBlockTag
  Inf: case @.Tag of
    B0: void //unknown purpose expected size 0x14
    Drv: struc pas
       Name: pchar
       Zero: raw[16]
       W: Word
     ends
    Dir,File: struc pas
      B0: Byte
      FileSize: ulong
      X: raw[6]
      Name: pchar
      NameDOS: pchar
     ends
  endc
  Rest: raw[]
ends:[@:Size=@.Sz]

TLnkPathInfo struc pas
  Sz: Word
  Tbl: array of TLnkPathBlock
ends:[@:Size=@.Sz]

TLnkTargetInfo struc pas
  Sz: ULong
  Some: raw[40] at &@; //array[10] of ULong
  DriveLbl: PChar
  FName: PChar
  Rest: raw[] at &@;
ends:[@:Size=@.Sz]

TLnkStr(F,UC) case @:F of
  0: void
else struc pas
    L: word
    S: case @@:UC of
      0: array[@@.L] of Char
    //else array[2*@@.L] of Char
    else array[@@.L] of WChar
    endc
  ends
endc

TLnkFlags set 32 of (
  Path, //path components
  Tgt, //target program
  ?,
  RelPathS,
  WorkDirS,
  ArgsS,
  IconS,
  UniCodeS
)

TDateTimeInfo raw[8]

TLnkHdr struc pas
  Sz: ulong
  GUID: TGUID // CLSID_ShellLink: TGUID = (
    // D1:$00021401; D2:$0000; D3:$0000; D4:($C0,$00,$00,$00,$00,$00,$00,$46));
  Flags: TLnkFlags
  L0x20: ulong
  ChangeT: TDateTimeInfo
  OpenT: TDateTimeInfo
  CreateT: TDateTimeInfo
  FileSize: ulong
  L0: ulong
  L1: ulong
  ShortCut: Word
  Rest: raw[] at &@;
ends:[@:Size=@.Sz]

data
0 TLnkHdr Hdr

type

TLnkData struc pas
  Path: case Hdr.Flags and TLnkFlags.Path=0 of
      0: TLnkPathInfo
    endc
  W0: Word //always zero for all known samples
  Tgt: case Hdr.Flags and TLnkFlags.Tgt=0 of
      0: TLnkTargetInfo
    endc
  RelPathS: TLnkStr(Hdr.Flags and TLnkFlags.RelPathS,Hdr.Flags and TLnkFlags.UniCodeS)
  WorkDirS: TLnkStr(Hdr.Flags and TLnkFlags.WorkDirS,Hdr.Flags and TLnkFlags.UniCodeS)
  ArgsS: TLnkStr(Hdr.Flags and TLnkFlags.ArgsS,Hdr.Flags and TLnkFlags.UniCodeS)
  IconS: TLnkStr(Hdr.Flags and TLnkFlags.IconS,Hdr.Flags and TLnkFlags.UniCodeS)
ends

data
Hdr:Size TLnkData Dat


Other specifications.


FlexT home page, Author`s home page.