Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9728030
  • 博文数量: 1227
  • 博客积分: 10026
  • 博客等级: 上将
  • 技术积分: 20273
  • 用 户 组: 普通用户
  • 注册时间: 2008-01-16 12:40
文章分类

全部博文(1227)

文章存档

2010年(1)

2008年(1226)

我的朋友

分类: C/C++

2008-04-23 21:44:17

如何抓住狡猾的狐狸?
用于 Foxmail 的辅助工具 SmartFox

作者:




关键字:Foxmail, 随身邮,账号

环境:Windows 98SE/2000,VC 6.0,Foxmail 4.1 简体中文版

摘要
  本文旨在介绍 Foxmail 的账号存储机制,并基于此编写一个辅助工具 SmartFox ,实现闪存“随身邮”功能。

问题的出现与分析
  最近我买了一支爱国者的经典型“迷你王”闪存,自己安装了 Foxmail ,并在闪存上创建了两个账号以收发邮件。但当我在另一台 PC 上使用 Foxmail 时,它却提示没有可用的账号。这是怎么回事呢?原来, Foxmail 在创建账号时,会将这个账号所在目录完整的路径名记录下来。由于闪存在不同的 PC 上获得的盘符不一定相同,这样在闪存的盘符改变后, Foxmail 便因无法定位该目录而发生错误。
  开始时,我编辑了一个批处理文件 Foxmail.BAT 用以启动 Foxmail 。其思路是将闪存的根
目录重定向为 Z: 盘,每次将闪存的当前盘符作为参数传递给这个批处理文件即可。为此我不得
不将之前创建的账号删除,在命令行提示符下启动批处理命令,然后在 Z: 盘下创建账号。这样
不是太麻烦了吗?是的!我也曾尝试过利用中间文件自动进行参数传递,但是由于 DOS 的不可重入性而不能保证每次都成功运行。因此我开始剖析 Foxmail 的账号存储机制。

Foxmail 的账号存储机制
  Foxmail 将每个账号的最基本信息(账号名称、存储目录)存放在安装目录下的文件
Accounts.CFG 中。在每个账号的目录中则利用文件 Account.STG 存储该账号的其他信息。
Accounts.CFG 是一个复合文档,它包括一个 Ver30 存储( Storage )。在 Ver30 存储下有一个accounts.cfg 流( Stream )。你可以使用 Visual Studio 6.0 提供的 DocFile 阅读器打开它。关于存储和流的更多知识,请参阅 MSDN: [Platform SDK] Structured Storage 。
  经过分析,我得到了 Foxmail 的账号存储机制。如下即为 accounts.cfg 流的 C 语言描述结构(表中均为十六进制):

偏移地址

阅读(295) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~