# 【转】 快捷方式lnk文件格式详解（英文）（中文）

【转】 快捷方式lnk文件格式详解（英文）（中文）
2009-11-07 10:55

You should consider using the IShellLink interface which is a safe way to handle windows shortcuts. If you have a strong reason not to use that interface then I have to remind you that this file format is not documented by Microsoft. I cannot say that the info gathered here is accurate nor that it will work in the future.

 .LNK File Format 1. Header 2. Shell Item Id List 3. File Location Info 4. Description 5. Relative Path 6. Working Directory 7. Command Line Arguments 8. Icon Filename 9. Additonal Info

 Size Contents Description 4 bytes Always 4C 00 00 00 This is how windows knows it is a shortcut file 16 bytes GUID for shortcut files The current GUID for shortcuts. It may change in the future. 01 14 02 00 00 00 00 00 C0 00 00 00 00 00 46 1 dword Shortcut flags Shortcut flags are explained below 1 dword Target file flags Flags are explained below 1 qword Creation time 1 qword Last access time 1 qword Modification time 1 dword File length The length of the target file. 0 if the target is not a file. This value is used to find the target when the link is broken. 1 dword Icon number If the file has a custom icon (set by the flags bit 6), then this long integer indicates the index of the icon to use. Otherwise it is zero. 1 dword Show Window the ShowWnd value to pass to the target application when starting it. 1:Normal Window 2:Minimized 3:Maximized 1 dword Hot Key The hot key assigned for this shortcut 1 dword Reserved Always 0 1 dword Reserved Always 0

Shortcut flags
 Bit Meaning 0 Shell item id list is present 1 Target is a file or directory 2 Has a description 3 Has a relative path 4 Has a working directory 5 Has command line arguments 6 Has a custom icon.

Target flags
 Bit Meaning 0 Target is read only. 1 Target is hidden. 2 Target is a system file. 3 Target is a volume label. (Not possible) 4 Target is a directory. 5 Target has been modified since last backup. (archive) 6 Target is encrypted (NTFS partitions) 7 Target is Normal 8 Target is temporary. 9 Target is a sparse file. 10 Target has reparse point data. 11 Target is compressed. 12 Target is offline.

Last Access and Modified time offsets corrected thanks to JimmyW

Shell Item Id List

Note: This section exists only if the first bit for shortcut flags is set the header section. If that bit is not set then this section does not exists.

The first word contains the size of the list in bytes. Each item (except the last) in the list contains its size in a word fallowed by the content. The size includes and the space used to store it. The last item has the size 0. These items are used to store various informations. For more info read the SHITEMID documentation.

File Location Info

This section is always present, but if bit 1 is not set in the flags value, then the length of this section will be zero. The header of this section is described below.

 Size Description 1 dword This length value includes all the assorted pathnames and other data structures. All offsets are relative to the start of this section. 1 dword The offset at which the basic file info structure ends. Should be 1C. 1 dword File available on local volume (0) or network share(1) 1 dword Offset to the local volume table. 1 dword Offset to the base path on the local volume. 1 dword Offset to the network volume table. 1 dword Offset to the final part of the pathname.

Combine the base path string and the final path string to find the filename of the file on the local volume. To find the filename of the file on the network you need to combine the share name in the network volume table with the final path string.

The local volume table

 Size Description 1 dword Length of this structure including the volume label string. 1 dword Type of volume (code below) 1 dword Volume serial number 1 dword Offset of the volume name (Always 0x10) ASCIZ Volume label

Type of volumes

 Code Description 0 Unknown 1 No root directory 2 Removable (Floppy, Zip ...) 3 Fixed (Hard disk) 4 Remote (Network drive) 5 CD-ROM 6 Ram drive

The network volume table

 Size Description 1 dword Length of this structure 1 dword Always 02 1 dword Offset of network share name (Always 0x14) 1 dword Reserved 0 1 dword Always 0x20000 ASCIZ Network share name

Description

This section is present if bit 2 is set in the flags value in the header. The first word value indicates the length of the string. Following the length value is a string of ASCII characters. It is a description of the item.

Relative path string

This section is present if bit 3 is set in the flags value in the header. The first word value indicates the length of the string. Following the length value is a string of ASCII characters. It is a relative path to the target.

Working directory

This section is present if bit 4 is set in the flags value in the header. The first word value indicates the length of the string. Following the length value is a string of ASCII characters. It is the working directory as specified in the shortcut properties.

Command line arguments

This section is present if bit 5 is set in the flags value in the header. The first word value indicates the length of the string. Following the length value is a string of ASCII characters. The command line string includes everything except the program name.

Icon filename

This section is present if bit 6 is set in the flags value in the header. The first word value indicates the length of the string. Following the length value is a string of ASCII characters. This the name of the file containing the icon.

Additonal Info Usualy consists of a dword with the value 0.

 .LNK 文件格式 1. 文件头 2. Shell Item Id List 段 3. 文件位置信息段 4. 描述字符段 5. 相对路径段 6. 工作目录段 7. 命令行段 8. 图标文件段 9. 附加信息段

 Offset Size/Type Description 0h 1 dword 值常为0000004CH，为字符"L" 4h 16 bytes GUID ①14h 1 dword Flags，用来标识快捷方式文件中有哪些可选属性，后面有表单独解释每一位的意义。 ②18h 1 dword 目标文件属性，后面解释。 1ch 1 qword 文件创建时间 24h 1 qword 文件修改时间 2ch 1 qword 文件最后一次访问时间 34h 1 dword 目标文件长度 38h 1 dword 自定义图标个数， 3ch 1 dword 目标文件执行时窗口显示方式：1、 正常显示2、 最小化3、 最大化 40h 1 dword 热键 44h 2 dword 暂时还不清楚用途值常为0

 Bit 所在位为1时表示 0 有shell item id list 1 指向文件或文件夹，如果此位为0表示指向其他。 2 存在描述字符串 3 存在相对路径 4 存在工作路径 5 存在命令行参数 6 存在自定义图标

 Bit 所在位为1时表示 0 快捷方式所指目标文件有只读属性 1 快捷方式所指目标文件有隐藏属性 2 快捷方式所指目标文件是系统文件 3 快捷方式所指目标是卷标 4 快捷方式所指目标是文件夹 5 快捷方式所指目标文件上次存档后被改变过 6 快捷方式所指目标文件被加密 7 快捷方式所指目标文件属性为一般 8 快捷方式所指目标文件为临时 9 快捷方式所指目标文件为稀疏文件（sparse file） 10 快捷方式所指目标文件有重分析点数据（reparse point） 11 快捷方式所指目标文件被压缩 12 快捷方式所指目标文件脱机

偏移       数据             解释0000    4c 00 00 00       字符"L"0004    01 14 02 00       快捷方式的GUID。值固定         00 00 00 00         C0 00 00 00         00 00 00 460014    8F 00 00 00      flags。对照表可知                              有shell item id list                              目标是文件                              存在描述字符串                              存在相对路径0018    20 00 00 00      文件属性，具体内容可以查上面的属性说明表001C    40 51 0A 0C      文件创建时间        AD CB C4 010024    C4 D8 A5 91     文件修改时间        AD CB C4 01002C    00 33 16 74       文件最后一次访问时间        F6 C7 C3 010034    00 20 01 00       文件长度0038    00 00 00 00       自定义图标个数003C    01 00 00 00       打开时窗口为normal状态0040    00 00 00 00       热键0044    00 00 00 00       暂时还不清楚用途值常为0        00 00 00 00

typedef struct _SHITEMID {         USHORT cb;         BYTE   abID[0];     } SHITEMID, * LPSHITEMID;
cb保存SHITEMID结构的大小。abID是可变长度的对象标识。具体都是什么含义没看明白，可以参阅MSDN。因为item ID list段的开始为这个段的总长度，所以在读取的时候可以把此段跳过不做处理！！：）

偏移       数据             解释004C    9c 00            item ID list总长度（下一段的起始地址为004E+009C=00EA）004E    14 00           第一个item ID的长度0050    1F 50 E0 4F      第一个item ID标示内容        D0 20 EA 3A        69 10 A2 D8        08 00 2B 30        30 9D0062    19 00             第二个item ID的长度0064    23 43 3A 5C       第二个item ID标示内容        00 00 00 00        00 00 00 00        00 00 00 00        00 00 00 00        00 F1 93007B    25 00007D    31 00 00 00        00 00 70 31        47 3B 31 00        50 72 6F 67        72 61 6D 20        46 69 6C 65        73 00 50 52        4F 47 52 41        7E 31 0000A0    2C 0000A2    31 00 00 00        00 00 70 31        47 3B 10 00        57 69 6E 64        6F 77 73 20        4D 65 64 69        61 20 50 6C        61 79 65 72        00 57 49 4E        44 4F 57 7E        32 0000CC    1C 0000CE    32 00 00 20        01 00 95 2F        A1 99 20 00        77 6D 70 6C        61 79 65 72        2E 65 78 65        00 0000E8    00 00                 item ID list段结束

 Offset Size/Type Description 0h 1 dword 此段的总长度 4h 1 dword 头结构长度，固定为1ch 8h 1 dword Flags指示文件在哪些卷有效，这里只用到低两位，第一位置位表示本地卷有效，反之无效。第二位置位表示网络 卷有效，反之无效。 ch 1 dword 本地卷信息表的偏移（固定1ch） 10h 1 dword 本地路径信息的偏移 14h 1 dword 网络卷信息表的偏移 18h 1 dword 附加信息的偏移

 Offset Size/Type Description 0h 1 dword 本地卷信息表的长度 4h 1 dword 卷类型：0 Unknown1 No root directory2 Removable (Floppy, Zip, etc..)3 Fixed (Hard disk)4 Remote (Network drive)5 CD-ROM6 Ram drive (Shortcuts to stuff on a ram drive, now that''s smart...) 8h 1 dword 卷序列号 ch 1 dword 固定长度部分的大小，固定为10h 10h 可变长度 卷标签

 Offset Size/Type Description 0h 1 dword 网络卷信息表的长度 4h 1 dword 固定为2h 8h 1 dword 固定长度部分的大小，固定为14h ch 1 dword 固定为0h 10h 1 dword 固定为20000h 14h 可变长度 网络共享名

偏移       数据             解释段头00EA    67 00 00 00     文件位置信息段总长度00EE    1C 00 00 00     段头长度，固定为1ch00F2    01 00 00 00     本地卷00F6    1C 00 00 00     本地卷信息表的段内偏移00FA    33 00 00 00     本地路径信息的偏移00FE    00 00 00 00     网络卷信息表的偏移0102    66 00 00 00     附加信息的偏移

0106    17 00 00 00     表长度010A    03 00 00 00     Fixed (Hard disk)010E    AD C9 B2 F0     卷序列号0112    10 00 00 00     固定为10h0116    73 79 73 74     卷标"system"        65 6D 00

011D    43 3A 5C 50  C:/Program Files/Windows Media Player/wmplayer.exe        72 6F 67 72        61 6D 20 46        69 6C 65 73        5C 57 69 6E        64 6F 77 73        20 4D 65 64        69 61 20 50        6C 61 79 65        72 5C 77 6D        70 6C 61 79        65 72 2E 65        78 65 00

|

0150    00

偏移       数据             解释0151    20 00         描述字符长度0153    AD 64 3E 65        70 65 57 5B        92 5A 53 4F        0C FF 05 53        EC 62 F3 97        50 4E 01 30        C6 89 91 98        01 30 43 00        44 00 20 00        8C 54 20 00        49 00 6E 00        74 00 65 00        72 00 6E 00        65 00 74 00        20 00 35 75        F0 53 02 30

偏移       数据             解释0193    38 00         相对路径字符长度0195    2E 00 2E 00        5C 00 2E 00        2E 00 5C 00        2E 00 2E 00        5C 00 50 00        72 00 6F 00        67 00 72 00        61 00 6D 00        20 00 46 00        69 00 6C 00        65 00 73 00        5C 00 57 00        69 00 6E 00        64 00 6F 00        77 00 73 00        20 00 4D 00        65 00 64 00        69 00 61 00        20 00 50 00        6C 00 61 00        79 00 65 00        72 00 5C 00        77 00 6D 00        70 00 6C 00        61 00 79 00        65 00 72 00        2E 00 65 00        78 00 65 00

12-23 3486

03-14 2655
11-28 106
03-29 1092
08-01 1985
10-06 2082
12-17 613
10-18 541
01-09 826
11-15 1万+
09-22 3655
07-17 7283