- 浏览: 2031462 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (651)
- ACE (35)
- BAT (9)
- C/C++ (116)
- fast-cgi (14)
- COM (27)
- python (59)
- CGI (4)
- C# (2)
- VC (84)
- DataBase (29)
- Linux (96)
- P2P (6)
- PHP (15)
- Web (6)
- Memcached (7)
- IME输入法 (11)
- 设计模式 (2)
- 搜索引擎 (1)
- 个人情感 (4)
- 笔试/面试 (3)
- 一亩三分地 (33)
- 历史 (2)
- 地理 (1)
- 人物 (3)
- 经济 (0)
- 不仅仅是笑哦 (43)
- 小故事大道理 (2)
- http://www.bjdsmyysjk120.com/ (0)
- http://www.bjdsmyy120.com/ (0)
- 它山之石可以攻玉 (15)
- 大学生你关注些什么 (28)
- 数据恢复 (1)
最新评论
-
luokaichuang:
这个规范里还是没有让我明白当浏览器上传文件时,STDIN的消息 ...
FastCGI规范 -
effort_fan:
好文章!学习了,谢谢分享!
com技术简介 -
vcell:
有错误os.walk(strPath)返回的已经是全部的文件和 ...
通过python获取目录的大小 -
feifeigd:
feifeigd 写道注意:文章中的CPP示例第二行 #inc ...
ATL入门:利用ATL编写简单的COM组件 -
feifeigd:
注意:文章中的CPP示例第二行 #include " ...
ATL入门:利用ATL编写简单的COM组件
作者:Cuick 大家知道通过IShellLink接口可以得到快捷方式的各种属性。具体怎么做,网上有很多文章,这里就不介绍了。现在主要是分析一下快捷方式文件的格式,并且自己写一个解析程序。 ② 偏移18h开始的目标文件属性: 例: 三、Shell item ID list段 cb保存SHITEMID结构的大小。abID是可变长度的对象标识。具体都是什么含义没看明白,可以参阅MSDN。 因为item ID list段的开始为这个段的总长度,所以在读取的时候可以把此段跳过不做处理!!:) 四、文件位置信息段 如果文件在本地卷,那么文件名为:本地路径信息+附加信息 然后是本地路径信息串段内偏移决定于10h的值。 本地卷信息表 本地路径信息串 网络卷信息表 因为段头里flags指示仅为本地卷,并且网络卷信息表的偏移值为零。所以不存在网络卷信息表。 五、描述字符段 转换成ANSI字符为"播放数字媒体,包括音乐、视频、CD 和 Internet 电台。 转换成ANSI字符为"..\..\..\Program Files\Windows Media Player\wmplayer.exe"
为了方便大家理解,解说完每个段后附上一个快捷方式对应部分的事例数据并附内容解说。这里以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
存在自定义图标
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 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 {
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段结束
开始的一个long integer表示此段的总长度,当文件头中○1的第1位没有置位时表示既不是文件也不是文件夹,所以这个信息没有意义,所以总长度为0。先让我们看一下这个段的头:
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
附加信息的偏移
如果文件在网络卷,那么文件名为:网络卷信息中的共享名+附加信息
紧跟在段头后面的是本地卷信息表(段内偏移为1ch),结构如下:
Offset
Size/Type
Description
0h
1 dword
本地卷信息表的长度
4h
1 dword
卷类型:
0 Unknown
1 No root directory
2 Removable (Floppy, Zip, etc..)
3 Fixed (Hard disk)
4 Remote (Network drive)
5 CD-ROM
6 Ram drive (Shortcuts to stuff on a ram drive, now that''s smart...)
8h
1 dword
卷序列号
ch
1 dword
固定长度部分的大小,固定为10h
10h
可变长度
卷标签
再往后就是网络卷信息表段内偏移决定于14h的值。结构如下:
Offset
Size/Type
Description
0h
1 dword
网络卷信息表的长度
4h
1 dword
固定为2h
8h
1 dword
固定长度部分的大小,固定为14h
ch
1 dword
固定为0h
10h
1 dword
固定为20000h
14h
可变长度
网络共享名
最后是附加信息串段内偏移决定于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
|
附加信息串0150 00
当文件头中○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
六、相对路径段
当文件头中○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
七、工作目录段 同上。
例:因为文件头中○1flags的第四位没有置位,所以此段不存在
八、 命令行段 同上。
例:因为文件头中○1flags的第五位没有置位,所以此段不存在
九、图标文件段 同上。
例:因为文件头中○1flags的第六位没有置位,所以此段不存在
十、 附加信息段 具体信息不清楚!!!!!
以上很多资料来自网上,并不是微软文档,所以难免有理解错误的地方,请包含。所附代码只是为了跟踪显示,没有输出,嘿嘿,自己改改看吧!!:)有兴趣可以自己写一个类,分析快捷方式的所有信息。
发表评论
-
__declspec(novtable) 的用法
2010-11-27 14:37 1578__declspec(novtable) 的用法 __d ... -
解决URLDownloadToFile缓存问题的两种方法
2010-09-09 15:18 2906解决URLDownloadToFile缓存问题的两种方法 ... -
修改richedit背景
2010-07-19 22:52 1647RichEditCtrl::SetBackgroundCo ... -
使用ADO封装类的数据库程序开发实例(下)
2010-07-12 15:30 1474使用ADO封装类的数据库 ... -
使用ADO封装类的数据库程序开发实例(上)
2010-07-12 15:28 1215使用ADO封装类的数据库 ... -
VC防止窗口和控件闪烁的方法
2010-07-09 21:16 20221、将Invalidate()替换为Invalidate ... -
防止窗口闪烁地办法
2010-07-09 21:13 1512防止窗口闪烁地办法 也许我们都碰到过这种情况,当你 ... -
使用ADO _ConnectionPtr
2010-07-06 16:04 5265// GetUser.cpp : Defines the ... -
VC用ADO访问数据库全攻略
2010-07-06 15:29 1799VC用ADO访问数据库全 ... -
深入GetMessage和PeekMessage (引自-MSDN技术组)
2010-06-10 16:59 3726深入GetMessage和PeekMessage (引自 ... -
界面编程总结(1)
2010-06-02 13:32 4011原文地址:http://blog.csdn.net/byx ... -
获取信息的有关Windows API
2010-05-27 10:01 3146获取信息的有关Windows API 1.窗口信息 ... -
VC中如何实现窗口的隐藏
2010-05-13 10:08 7862VC中如何实现窗口的隐藏 用MFC做的Dialog ... -
SetConsoleCtrlHandler 处理控制台消息
2010-05-07 17:32 18144SetConsoleCtrlHandler 处理控制台消 ... -
解决决错误: error C2850: 'PCH header file'
2010-04-27 19:45 1953解决决错误: error C2850: 'PCH hea ... -
VC++ GDI+编程的字体和文本绘制
2010-04-13 13:12 7979字体是文字显示和打印的外观形式,它包括了文字的字样、风格和尺寸 ... -
VC利用GDI+显示透明的PNG图片
2010-04-12 16:59 115391.在你将要使用GDI+的工程中,完成初始化 ... -
GDI+编程基础(一)GDI+ Vs GDI
2010-04-12 15:59 2336下载源代码一、GDI GDI是位于应用程序与不同硬件之间 ... -
VC画图
2010-04-12 15:50 1539BOOL DrawPic(HDC hdc, TCHAR* ... -
对话框的数据交换--MFC深入浅出
2010-04-12 10:43 2458对话框数据交换指以下两种动作,或者是把内存数据写入对应的控 ...
相关推荐
### 使用VB5.0创建Windows快捷方式的知识点详解 #### 一、概述 在Windows操作系统中,快捷方式是一种指向目标程序或文件的链接,它可以让用户更方便地访问常用的应用程序或文件。对于软件开发者来说,能够通过编程...
桌面快捷方式是一种在Windows操作系统中方便用户快速访问应用程序、文件或文件夹的方式。它通常显示为桌面上的一个图标,并且通常会有一个小箭头来标识这是一个快捷方式而不是目标本身。 #### 使用VBScript创建桌面...
### 使用VB6.0创建Windows快捷方式:详细教程与编程技巧 #### 一、引言 在编程领域,创建快捷方式是一项非常实用的功能,尤其是在Windows操作系统中。通过使用Visual Basic (VB) 这样的开发工具,我们可以轻松地...
【描述】提到的问题是,当电脑遭受某种特定类型的病毒感染时,病毒会将硬盘上的实际文件替换为快捷方式,而这些快捷方式通常是.exe格式,这使得用户无法直接访问原有的文件。"BoyFineKiller"是一个有效的工具,设计...
### 使用VB5.0创建Windows快捷方式的知识点详解 #### 一、概述 在软件开发领域,特别是针对Windows操作系统下的应用程序开发,有时我们需要为用户提供更便捷的操作方式,比如通过创建桌面快捷方式或程序组来方便...
### VC实现创建快捷方式的代码详解 #### 调用代码段解析 ```cpp if(m_bCreateDeskLink) { CShortcut Shortcut; CString sBuf; getModulePath(sBuf); sBuf += "lazybones.exe"; // 创建快捷图标 Shortcut....
在Windows操作系统中,快捷方式是一种方便用户快速访问常用程序、文件或文件夹的特殊类型文件,通常具有.lnk扩展名。然而,使用C#编程语言创建快捷方式并不是.NET框架的内置功能,因此需要通过特定的方式来实现。...
在Windows上,我们可以使用`System.IO.File`和`System.IO.Path`类来创建快捷方式文件(.lnk),然后设置其目标为C#程序,并传递网站链接作为参数。这样用户只需点击快捷方式,程序就会自动启动并打开指定网站。 总...
1. **1KB文件夹快捷方式病毒**:这种病毒会将正常的文件夹替换为1KB大小的快捷方式,用户点击这些快捷方式时,可能触发恶意代码执行,导致系统被控制、个人信息泄露等问题。 2. **病毒传播方式**:病毒通常通过网络...
### Chrome浏览器Windows键盘快捷方式详解 #### 一、Tab和窗口操作 - **Ctrl+N**:此快捷键用于快速打开一个新的Chrome窗口。这对于需要多窗口操作的用户来说极为方便,可以迅速启动新的工作环境。 - **Ctrl+T**:...
- **符号链接**(软链接):相当于Windows下的快捷方式,它仅包含目标文件的路径信息,不占用实际的磁盘空间。符号链接可以跨越不同的文件系统,但删除原文件后,符号链接将变为无效。 - **硬链接**:指向同一个文件...
《易语言源码超级快捷方式模块详解》 易语言,作为一种独特的编程语言,以其易于学习、易用性强的特点,深受广大编程爱好者的喜爱。而"易语言源码超级快捷方式模块"则是为开发者提供的一种高效创建和管理快捷方式的...
**Windows文件资源编辑器详解** Windows文件资源编辑器,通常被称为Resource Hacker,是一款强大的工具,专为处理PE(Portable Executable)文件中的资源而设计。PE文件格式是Windows操作系统下可执行程序的标准...
本例中的核心是调用名为`fCreateShellLink`的API函数,该函数位于`STKIT432.DLL`库中,用于创建一个指向指定目标的应用程序或文件的快捷方式。 #### `fCreateShellLink`函数详解 `fCreateShellLink`函数的基本语法...
Inno Setup 使用脚本的方式创建安装程序,脚本其实就是一个类似 .INI 文件格式的 ASCII 码文本文件。Unicode Inno Setup支持 UTF-8 编码文本文件。脚本用一个“.iss”(表示 Inno Setup Script脚本)的扩展名。脚本...
Windows快捷方式自动执行0day漏洞是一个非常危险的安全漏洞,需要所有用户和安全厂商的高度关注。微软和其他安全公司正在努力寻找解决方法,希望能够尽快发布正式的安全更新来修复这一漏洞。在此期间,用户应该采取...
它能够为源代码中的各种标识符(如函数、类、变量等)创建一个索引,使得开发者可以通过快捷方式跳转到定义的位置,极大地提高了开发效率。 **1. ctags功能** - **快速定位**: `ctags`通过扫描源代码文件,生成一...
**Rundll32文件详解** Rundll32.exe是一个重要的系统进程,它在Windows操作系统中扮演着关键角色。这个文件是微软Windows系统的一部分,主要用于执行动态链接库(DLL)中的函数。Rundll32允许用户通过命令行调用...
**Windows系统下的文件比较、合并工具——WinMerge详解** 在日常的软件开发、代码管理和文档协同工作中,我们经常需要比较不同版本的文件或文件夹,找出它们之间的差异,并可能需要将这些差异合并到一个统一的版本...