Windows快捷方式文件格式解析
时间:2006-08-04 12:12 来源:http//bbs.office-cn.net/ 作者:LucasLyn… 阅读:次
Windows快捷方式文件格式解析
作者:Cuick
好了,言归正传。大家知道通过IShellLink接口可以得到快捷方式的各种属性。具体怎么做,网上有很多文章,这里就不介绍了。现在主要是分析一下快捷方式文件的格式,并且自己写一个解析程序。
为了方便大家理解,解说完每个段后附上一个快捷方式对应部分的事例数据并附内容解说。这里以Windows Media Player在桌面上的快捷方式为例。
一、文件的整体结构
二、文件头
文件头结构,参照下面表格:
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 |
① 偏移14h开始的标志标示有哪些可选属性,见下表:
Bit | 所在位为1时表示 |
0 | 有shell item id list |
1 | 指向文件或文件夹,如果此位为0表示指向其他。 |
2 | 存在描述字符串 |
3 | 存在相对路径 |
4 | 存在工作路径 |
5 | 存在命令行参数 |
6 | 存在自定义图标 |
② 偏移18h开始的目标文件属性:
Bit | 所在位为1时表示 |
0 | 快捷方式所指目标文件有只读属性 |
1 | 快捷方式所指目标文件有隐藏属性 |
2 | 快捷方式所指目标文件是系统文件 |
3 | 快捷方式所指目标是卷标 |
4 | 快捷方式所指目标是文件夹 |
5 | 快捷方式所指目标文件上次存档后被改变过 |
6 | 快捷方式所指目标文件被加密 |
7 | 快捷方式所指目标文件属性为一般 |
8 | 快捷方式所指目标文件为临时 |
9 | 快捷方式所指目标文件为稀疏文件(sparse file) |
10 | 快捷方式所指目标文件有重分析点数据(reparse point) |
11 | 快捷方式所指目标文件被压缩 |
12 | 快捷方式所指目标文件脱机 |
偏移 数据 解释三、Shell item ID list段
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 00
当文件头中○1的第0位置位时才有。第一个unsigned short integer表示item ID list段的总长度。后面紧跟着SHITEMID结构。SHITEMID的定义如下:
typedef struct _SHITEMID {cb保存SHITEMID结构的大小。abID是可变长度的对象标识。具体都是什么含义没看明白,可以参阅MSDN。因为item ID list段的开始为这个段的总长度,所以在读取的时候可以把此段跳过不做处理!!:)
USHORT cb;
BYTE abID[0];
} SHITEMID, * LPSHITEMID;
例:(文件头段的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段结束
(责任编辑:admin)
顶一下
(0)
0%
踩一下
(0)
0%
相关内容
- ·提高access的启动速度【译文技巧】
- ·浅谈断号重续的利弊和方法
- ·分析使用Len函数判断字符串为空的原理
- ·mdb快捷方式拖到桌面,打开会出现“不
- ·Access设计表字段是的注意事项
- ·学习别人示例的技巧方法
- ·SQL中获取两日期之间的值
- ·成为伟大开发者的“九步曲”
- ·面向初学者的窗体功能设计集成
- ·WINRAR打包视频演示全过程
- ·《VB函数参考手册》电子书
- ·ACCESS数据表中数据类型“是/否”转为S
- ·Application与Docmd对象Quit方法区别探
- ·获取ACCESS安装路径的二法(分享)
- ·JAVA+ACCESS编程体会
- ·Access 2003开发者扩展工具集概述
最新内容
推荐内容