【轉】 快捷方式lnk文件格式詳解(英文)(中文)html
2009-11-07 10:55shell
轉自:http://www.stdlib.com/art6-Shortcut-File-Format-lnk.html 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.
1. Headerwindows
Shortcut flags網絡
Target flagsapp
Last Access and Modified time offsets corrected thanks to JimmyW Shell Item Id List
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函數
Type of volumesthis
The network volume table加密
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. 你們知道經過IShellLink接口能夠獲得快捷方式的各類屬性。具體怎麼作,網上有不少文章,這裏就不介紹了。如今主要是分析一下快捷方式文件的格 式,而且本身寫一個解析程序。 爲了方便你們理解,解說完每一個段後附上一個快捷方式對應部分的事例數據並附內容解說。這裏以Windows Media Player在桌面上的快捷方式爲例。 1、文件的總體結構
2、文件頭 文件頭結構,參照下面表格:
② 偏移18h開始的目標文件屬性:
例: 偏移 數據 解釋 0000 4c 00 00 00 字符"L" 0004 01 14 02 00 快捷方式的GUID。值固定 00 00 00 00 C0 00 00 00 00 00 00 46 0014 8F 00 00 00 flags。對照表可知 有shell item id list 目標是文件 存在描述字符串 存在相對路徑 0018 20 00 00 00 文件屬性,具體內容能夠查上面的屬性說明表 001C 40 51 0A 0C 文件建立時間 AD CB C4 01 0024 C4 D8 A5 91 文件修改時間 AD CB C4 01 002C 00 33 16 74 文件最後一次訪問時間 F6 C7 C3 01 0034 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 003、Shell item ID list段 當文件頭中○1的第0位置位時纔有。第一個unsigned short integer表示item ID list段的總長度。後面緊跟着SHITEMID結構。SHITEMID的定義以下: typedef struct _SHITEMID { USHORT cb; BYTE abID[0]; } SHITEMID, * LPSHITEMID;cb保存SHITEMID結構的大小。abID是可變長度的對象標識。具體都是什麼含義沒看明白,能夠參閱MSDN。由於item ID list段的開始爲這個段的總長度,因此在讀取的時候能夠把此段跳過不作處理!!:) 例:(文件頭段的flags標誌顯示存在shell 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 9D 0062 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 93 007B 25 00 007D 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 00 00A0 2C 00 00A2 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 00 00CC 1C 00 00CE 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 00 00E8 00 00 item ID list段結束4、文件位置信息段 開始的一個long integer表示此段的總長度,當文件頭中○1的第1位沒有置位時表示既不是文件也不是文件夾,因此這個信息沒有意義,因此總長度爲0。先讓咱們看一下 這個段的頭:
若是文件在本地卷,那麼文件名爲:本地路徑信息+附加信息
而後是本地路徑信息串段內偏移決定於10h的值。
最後是附加信息串段內偏移決定於18h的值 例: 偏移 數據 解釋 段頭 00EA 67 00 00 00 文件位置信息段總長度 00EE 1C 00 00 00 段頭長度,固定爲1ch 00F2 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 固定爲10h 0116 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網絡卷信息表 由於段頭裏flags指示僅爲本地卷,而且網絡卷信息表的偏移值爲零。因此不存在網絡卷信息表。 | 附加信 息串 0150 005、描述字符段 當文件頭中○1的第2位置位時纔有。開始的一個unsigned short int表示描述字符串的長度(描述字符爲Unicode字符,因此字節數需乘以2,可使用API函數WideCharToMultiByte將其轉換成 ANSI字符)。後面爲內容。例: 偏移 數據 解釋 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轉換成ANSI字符爲"播放數字媒體,包括音樂、視頻、CD 和 Internet 電臺。 6、相對路徑段 當文件頭中○1的第3位置位時纔有。同描述字符段同樣開始的一個unsigned short int表示相對路徑字符串的長度。後面爲內容。 例: 偏移 數據 解釋 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轉換成ANSI字符爲"../../../Program Files/Windows Media Player/wmplayer.exe" 7、工做目錄段 同上。 例:由於文件頭中○1flags的第四位沒有置位,因此此段不存在 8、 命令行段 同上。 例:由於文件頭中○1flags的第五位沒有置位,因此此段不存在 9、圖標文件段 同上。 例: 由於文件頭中○1flags的第六位沒有置位,因此此段不存在 10、 附加信息段 具體信息不清楚!!!!! 以上不少資料來自網上,並非微軟文檔,因此不免有理解錯誤的地方,請包含。所附代碼只是爲了 跟蹤顯示,沒有輸出,嘿嘿,本身改改看吧!!:)有興趣能夠本身寫一個類,分析快捷方式的全部信息。 |