如何修改翰林V3的固件

2008年5月1日 7 条评论

首先说明什么是翰林V3:这是一款使用E-ink的电子书阅读设备。
如果你不知道这个东西是什么,那么本文剩下的部分可以不用看了。

本来这个主题是要写如何修改翰林V3的显示字体,因为宋体显示中文还可以,但是英文简直是惨不忍睹。结果花了不少的功夫把宋体焕成了雅黑之后,今天早上去论坛看看,却发现翰林很适时地推出了一款新的固件,可以自由选择书籍显示的字体。详细的介绍也有人贴了出来。所以就把标题改成了“如何修改翰林V3的固件”。因为我所作的工作也就是修改了一下固件而已。

首先需要声明:修改固件存在风险,请务必先备份阅读器上的重要数据,并且准备好官方固件,准备吃后悔药。同时修改的固件可能会导致阅读器无法开机甚至无法恢复,请自行担负其风险,本人对此不负责。

OK,现在开始正题。

首先你需要一些工具。必需的第一个东西是Linux操作系统,我使用Debian,因此下面的介绍均以Debian为例。
在你的Linux上面请保证有下列的程序或者包:
hg (Mercurial Distributed SCM) 或 git (Fast Version Control System)
gcc
dd
mtd-tools (for mkfs.jffs2)
mkcramfs

在Debian上可以执行下列的一串命令来确保它们都在:
$su
#apt-get install mercurial
#apt-get install git-core
#apt-get install gcc-4.1
#apt-get install mtd-tools
#apt-get install mkcramfs

然后你需要一个项目的源代码,OpenInkpot。目前可以通过hg或者git获得,但是hg不久就会停止。获取方式主页上面有。目前可以用这个命令:
$ hg clone http://hg.openinkpot.org/trunk openinkpot-trunk

获取到代码之后,不需要编译整个项目,否则你需要花掉几十个小时外加十多GB的磁盘。你所需要的只是进入到目录utils/mkv3update当中,执行
$ CC=gcc make
即可获得一个mkv3update的程序。这个程序将用来生成我们修改过的翰林v3固件。

把这个mkv3update程序,连同utils/mkv3update/scripts目录下面的firmeware_unpack.sh文件一同拷贝到某个地方。

下一步的工作就是找到你要修改的原始固件。通常就是V3update.bin文件,把它也拷贝到上面两个程序所在的目录。

将下面的代码写入一个脚本程序,例如patch-v3-update:

–脚本开始–

#! /bin/bash

if [ ! -e V3update.bin ]; then
    echo No Hanlin firmware \(V3update.bin\) present.
fi

if [ -e V3update.bin.patch ]; then
    rm V3update.bin.patch
fi

if [ -d tmp ]; then
    umount tmp/root_fs
    rm -r tmp
fi

mkdir tmp
mkdir tmp/root_fs
mkdir tmp/root_fs_patch
# mkdir tmp/ro_fs

. ./firmware_unpack.sh V3update.bin tmp

mount -o loop tmp/root.fs tmp/root_fs
cp -a tmp/root_fs/* tmp/root_fs_patch

if [ -e ./do-patch-rootfs ]; then
    . ./do-patch-rootfs
else
    echo You do not have do-patch-rootfs script.
fi

mkcramfs tmp/root_fs_patch/ tmp/root.fs.patch

./mkv3update –write-hanlin=V3update.bin.patch tmp/zImage tmp/ro.fs tmp/root.fs.patch tmp/logo tmp/jffs2.fs

–脚本结束–

注意脚本当中标红色的部分。将这部分作为分界线,脚本的前面部分就做了众多的解开V3update.bin,并且将其中内容解到一个tmp/root_fs_patch的目录当中的工作,你可以把这部分单独拷贝出来执行。执行之后,到tmp/root_fs_patch/root/下面看看,这就是翰林V3当中的文件系统结构。在这个目录当中,你可以随意修改其中的内容,当然包括tmp/root_fs_patch/root/fonts/truetype当中的字体文件。

修改完毕之后,即可执行红色部分之后的命令,这些命令把修改过的文件打包生成一个新的文件文件,称为V3update.bin.patch。只要将其拷贝到SD卡的根目录,然后重命名为V3update.bin,即可按照翰林V3正常的固件省级方式进行升级。

经过我的实验,只要将其中的simsun.ttc/simsun.ttf文件一起删除,然后用msyh.ttf拷贝到其中,重命名为simsun.ttf,再建立软链接simsun.ttc指向它,即可实现书架和默认的chm,txt,wol文件都使用雅黑字体了。

如果你想将工作自动化,直接在patch-v3-update脚本的相同目录下面写一个do-patch-rootfs的脚本,就可以自动由该脚本调用了。

自己做了一个翰林V3的一经替换了雅黑字体的固件,基于翰林最近的2008-04-25版本,目前用起来还没有任何的问题。

Finally it got compiled

2008年4月19日 1 条评论

I mean OpenInkpot.

It cost 5 nights and 7 GB of disk to compile, OMG.

— Update @ 2008-4-19 —
I found I compiled the x86 version, not the ARM version…
Try again, but VM disk is full now…

修正VeryCD在启用AdBlock Plus的情况下的版面混乱问题的脚本

2008年3月2日 2 条评论

VeryCD是个不错的网站,除了在每个页面上面出现的flash广告(见下图)。当然我也知道VeryCD维持生存基本上要靠广告,但是经常搞死我浏览器的flash广告,我是不得已把它过滤掉的。

Firefox对于广告的解决方案当然是AdBlock Plus。这个插件可以按照通配符或者正则表达式来封锁广告。如果你不懂通配符或者正则表达式,直接用鼠标点点基本上也是可以解决问题的。通过在其中添加一条规则封锁 http://222.37.134.*/*.htm*,顺利达到了封锁VeryCD上面的flash广告的目的。

但是随之而来的问题是,因为过滤掉了一个iframe,整个页面布局就有了一些问题,资源详细信息因为布局的缘故无法显示(见下图)。

为了能够让它显示出来,只好另外再打一层补丁。这次用Greasemonkey,让它在加载VeryCD页面的时候在原本显示广告的地方显示另外一个东西来占个位置,自然就能够让详细信息部分显示了。

在这里显示什么呢?看了几个VeryCD页面之后,发现大多数的页面上面在简介部分都有至少一幅图片。按理说把第一副图片按比例缩小放在其中应该可以吧。最后结果见下图:

最后贴Greasemonkey脚本的代码。请将其拷贝到记事本保存为“所有文件”,文件名选择.user.js结束。保存后拖动到Firefox(事先需要安装了Greasemonkey),确定即可安装。

== 代码开始,请不要拷贝这一行 ==
// ==UserScript==
// @name           Re-format VeryCD item detail
// @namespace      http://ftofficer.spaces.live.com
// @description    Re-format VeryCD item detail
// @include        http://www.verycd.com/topics/*
// ==/UserScript==

function findFirstImg() {
  var paras = document.getElementsByTagName(‘p’);
  for (var i=0; i<paras.length; ++i) {
    var p = paras[i];
    if ( p.getAttribute(‘class’) == ‘inner_content’) {
      var imgs = p.getElementsByTagName(‘img’);
      if ( imgs && imgs.length > 0 )
        return imgs[0];
    }
  }
 
  return null;
}

function getScale(imgWidth, imgHeight, divWidth, divHeight) {
  var wScale = divWidth * 1. / imgWidth;
  var hScale = divHeight * 1. / imgHeight;
 
  if ( wScale > 1. && hScale > 1. ) {
    return 1.;
  }
 
  return wScale < hScale ? wScale : hScale;
}

function fixupVeryCDDetailPage() {
  var moreInfo = document.getElementById(‘moreInfo’);
  if ( moreInfo ) {
    var frame = document.createElement(‘div’);
    frame.setAttribute(‘class’, ‘Banner1’);
    frame.width = 300;
    frame.height = 250;

    firstImg = findFirstImg();
    if ( firstImg ) {
      var img = document.createElement(‘img’);
      img.src = firstImg.src;
      var imgScale = getScale(img.width, img.height, frame.width, frame.height);
      img.width = Math.floor(img.width * imgScale);
      img.height = Math.floor(img.height * imgScale);
      frame.appendChild(img);
    }
   
    if ( moreInfo.parentNode ) {
      moreInfo.parentNode.insertBefore(frame, moreInfo);
    }
  }
}

fixupVeryCDDetailPage();

== 代码结束,请不要拷贝这一行 ==

Mozilla Addons网站中文版

2008年2月7日 没有评论

https://addons.mozilla.org/zh-CN/firefox/

算是个新年礼物吧。

更新了一下TabIMSwitch的注释,如果你使用中文察看,应该可以看到简体中文的介绍了。

标签: ,

Live Space的“发布日志”恢复正常了

2008年1月27日 1 条评论

今天打开Space准备写blog,却发现“发布日志”按钮仍然是灰掉的,看看Greasemonkey的脚本状态已经启用了,难道M$会ws到连我这个第三方开发者都不放过?接下来就是分析一下看看有什么变动,然后更新一下脚本。但是看来看去文档的结构都没有变化,Greasemonkey脚本的运行也很正常。

无意之中在标题当中填了几个字符,竟然发现“发布日志”按钮启用了!然后把Greasemonkey的用户脚本设置成禁用,刷新页面,输入标题,“发布日志”和“保存为草稿”立即启用了。

原来我误解了M$,其实是M$做了点工作恢复了Space的bug,看来我的Greasemonkey脚本可以退休了。

不过暂时还是保留在那里吧,不知道哪天会再次出现问题。

搞定了Spam Comments的自动探测和删除

2008年1月25日 4 条评论

最近工作比较忙,所以只能下了班搞搞这个东西。今天终于搞定了,然后看着数十个Spam Comment瞬间搞定还是很有成就感的。

这个问题的关键在两个问题上:第一,如何得到一个Spam Comment的列表;第二,如何删除它们。

先考虑第二个问题。其实不管Space的代码多复杂,最后对Blog的操作还是要经过HTTP传输的。截获HTTP传输数据的方案有很多,我用的是TamperData这个Firefox扩展。简单的找两个Comments删除一下,发现对应的HTTP请求是这样的:

POST http://ftofficer.spaces.live.com/parts/blog/script/BlogService.fpp?cnmn=Microsoft.Spaces.Web.Parts.BlogPart.FireAnt.BlogService.delete_items&ptid=0&a=&au=undefined HTTP/1.1
Host: ftofficer.spaces.live.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: zh-cn,zh;q=0.7,en-us;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: UTF-8,*
Connection: close
Content-Type: application/x-www-form-urlencoded
X-FPP-Command: 0
sc: [...]
Referer: [...]
Content-Length: 117
Cookie: [....]
Pragma: no-cache
Cache-Control: no-cache

cn=Microsoft.Spaces.Web.Parts.BlogPart.FireAnt.BlogService&mn=delete_items&d=[{1,%22cns!423B72634E2F6B7E!611%22}]&v2

其中最重要的东西就是红色标记的部分,前面Cookie是作为你已经登录到Live Space的证据;后面的一串字符串就是要删除的Comment的ID。所以我们需要的工作就是获取到这个ID,然后使用HTTP重放就可以了。最后我直接偷懒用了NetCat,写了一个Request的模板,用Perl替换一下其中的ID,用NC连上Live Space然后重放就是了。方法就是这样,如果要做成软件可能还比较麻烦一点,看看有空再搞,最近实在太忙。

然后回到第一个问题,我们需要获取到所有的Spam Comments的列表,这个问题不可避免的就要把Space爬一遍,枚举当中所有的Comments的内容,并一一判断。如果符合某种条件,就将其ID记录下来。不过要从头分析Space的页面结构并且枚举出ID和内容也是个很好大的工程,不如找找有没有现成的方案。经过一番Google,找到了Live Space Mover这个项目。这个项目当中包括了枚举Live Space当中所有的Comments的功能,功能不错。但是不足的是只能获取到的是Comments的内容,发送者这些信息,不包括对我来说最重要的ID,不过这不是什么大问题,Python的脚本在哪里放着,代码改改就行了。这段代码改过之后,花10分钟把Blog爬了一遍,成功生成列表,然后拿perl解析一下,调用一下nc,搞定。

方案是有了,有空整理一下,做一个点点鼠标就能搞定的东西,或者一个命令行搞定的东西。

再说再说,忙得很。有没有人自愿报名实践一下的?

标签: ,

TabIMSwitch 开始支持 Firefox 3.0 Beta – 请手动下载更新

2007年12月23日 1 条评论

今天收到Mozilla发过来的邮件,希望我们可以把自己的扩展升级到支持Firefox 3.0。本来在Beta 1出来的时候就打算做的,一直没动手,今天既然收到了信,就花了一天的时间调整了一下TabIMSwitch,小小的改动了一下,目前已经兼容于Firefox 3.0 Beta了。

新版本号码 1.1.0.41。

下载TabIMSwitch 1.1.0.41
SHA1校验码:0f0acbdd7df6ddd712541d5e766fb0ce9f07a56d
MD5 校验码:fe421b0905dbae7e59bbb3d028ad311f

但是因为现在最广泛使用的1.1.0.37版本的一个bug,自动更新到1.1.0.41基本上是不可能的,因为1.1.0.37版本当中根本就不包含自动更新URL。造成这个问题的原因是在编译的时候把放在Mozilla addons上面的版本和公开在Google Code上面的版本弄混了,而Mozilla的版本是不能有自动更新URL的——Mozilla会给你加上一个。

所以,麻烦大家自己手动下载下来升级吧。

为了防止以后出现类似的问题,这次把编译脚本修改了,把Mozilla addon上面的版本和Google Code上面的版本完全分开,将来应该不会出现类似的问题了。

— 更新@2007-12-23 3:08 —
发完blog之后两分钟,发现1.1.0.40的包有问题,版本号忘了改了,还是1.1.0.39,忙中出乱啊,晕啊晕。
下载了1.1.0.40的,等自动更新到1.1.0.41吧。

ISO C语言标准的更新

2007年11月8日 3 条评论

部分翻译自 ISO C Standard Update

作者Arjun Bijanki是Visual C++编译器的test lead,而且是Microsoft在C标准委员会的代表。

C1x (0<=x<=9)将是下一个版本的C语言标准,ISO国际标准化委员会WG14,C Programming Language刚刚结束了在夏威夷的又一次半年会议,在会上委员会成员讨论了下一版本的C语言,非官方称为C1x的未来发展,参见这里。

对C程序员来说,整部文档都值得一看,但是希望在C1x当中的新的概念引起大家的注意:

12. Trust the programmer, as a goal, is outdated in respect to the security and safety programming communities. While it should not be totally disregarded as a facet of the spirit of C, the C1X version of the C Standard should take into account that programmers need the ability to check their work.
12. 信任程序员,从安全的编程角度上来说已经过时了。虽然说作为C的精神的一个重要方面这个原则并不应该被完全否定,但是C1x有责任给程序员一个检查自己工作的机会。

13. Unlike for C9X, the consensus at the London meeting was that there should be no invention, without exception. Only those features that have a history and are in common use by a commercial implementation should be considered. Also there must be care to standardize these features in a way that would make the Standard and the commercial implementation compatible.
13. 不像C9x,伦敦会议的一致意见是(在C1x当中)完全不应该有任何的新发明。只有经过历史考验和在商业实现当中得到广泛应用的特性才会被考虑。而且在标准化的时候需要注意和商业实现的兼容。

14. Migration of an existing code base is an issue. The ability to mix and match C89, C99, and C1X based code is a feature that should be considered for each proposal.
14. 对已有代码的升级是一个考虑方面。每一个提案都应该具有将基于C89, C99和C1X的代码整合的能力。

代码升级是毋庸置疑的重要 – 我甚至认为这是基本的需求。但是我发现另外两项更有意思。第12条反映了工业界在近10年来对于安全性方面的持续关注,委员会开始拥抱这个设想是非常伟大的。因此委员会在 TR 24731 (边界检查接口,包括了在VS 2005当中大多数_s系列的函数)上面的努力也就也不让人意外了。

委员会也要求编译器厂商提供它们被最广泛应用的语言扩展以便委员会考虑。在众多实现(例如Visual C++ 和 GCC)当中共享的很多特性,像扩展属性(extended attributes)和线程局部存储(thread local storage),将被重点考察。还有一些情况,实现之前语法可能有区别,但是底层的概念是一致的。正如 #13所说,委员会会尽力去对他们保持兼容。

对于微软为什么没有在Visual C++当中完整的实现C99,Arjun Bijanki的解释是实现哪些功能是基于用户提出的需求的。根据用户的需求,Visual C++已经实现了可变长参数宏(variadic macros),long long类型,__pragma, __FUNCTION__, 和__restrict。他希望能够听到更多来自C语言用户的需求,而且许诺会在明年4月份的下一次会议后给出关于C标准更进一步的更新。

标签: ,

解决在Firefox下面Live Space“发布日志”按钮被禁用的问题

2007年11月7日 18 条评论

也许你发现了上面的帖子。
这个帖子是我在进行测试,看看能不能启用Live Space的“发布日志”按钮。
事实上是成功了,特将其分享给大家。

首先,你需要安装Firefox扩展 greasemonkey。这个扩展可以使你在加载一个页面的时候执行一段你自己的Javascript程序。

安装之后,将下面的程序拷贝到一个文本文件,并把扩展名改成 .user.js。(务必是.user.js,否则greasemonkey无法自动安装之)。

===脚本开始,拷贝时请不要包含这一行===
// ==UserScript==
// @name           Enable Live Space Post Button
// @namespace      http://ftofficer.spaces.live.com
// @description    Enable Live Space Post Button
// @include        http://*.spaces.live.com/*
// ==/UserScript==

function LiveSpace_enableButton(id) {
  var button = document.getElementById(id);
  if ( button ) {
    var cls = button.getAttribute("class");
    var clsNameEnd = cls.indexOf("spDisabled");
    if ( clsNameEnd != -1 ) {
      clsNameEnd–;   // skip " " before spDisabled
      var newCls = cls.substring(0, clsNameEnd);
     
      button.setAttribute("class", newCls);
      button.setAttribute("mi:state", "enabled");

      var aNode = document.createElement("a");
      aNode.id = id;
      aNode.href = "#";
    }
  }
}

LiveSpace_enableButton("actionToolbarBlogPost");
LiveSpace_enableButton("actionToolbarSave");

===脚本结束,拷贝时请不要包含这一行===

然后将这个js文件拖放到Firefox窗口中,greasemonkey会弹出对话框询问是否安装,选择是,即可完成安装。

然后,去Live Space的“添加日志”当中看看吧。

如果看到“发布日志”和“保存为草稿”仍然没有启用的话,请看看greasemonkey当中配置的网直通配符是不是和你的网址一致,自己改改看看。在不行可以在这里回复。

都是Intel无线网卡驱动惹得祸

2007年10月27日 2 条评论

连续一段时间在公司使用无线网络上网,一直非常不爽的就是其不稳定——非常不稳定,时断时续。后来仔细研究之后发现,每次经过十几分钟,无线网卡的指示灯就灭掉了,紧接着就是无线网络断掉。过了几秒钟,无线网卡指示灯重新亮起,然后无线网络重新连接——就这样,无限网络不断的通断。

既然已经发现了问题的症结,接下来就是看看为什么会造成这种情况。我的无线网卡是ipw2200 (Intel PRO/Wireless 2200BG),应该是非常常见和通用的一款无线网卡,至少在Linux下面一直以来驱动不成问题。但是看了一下驱动程序里面的选项,发现驱动程序的时间比较久远了,所以首先还是来更新一下驱动程序吧。

于是到Google上搜索,顺利的找到了Intel的驱动官方站点。从上面的列表当中看,有两个版本的驱动程序可供选择:11.1.1.11/9.0.4.36 版本的Driver Only包,和11.1.1.0 版本的Network Connection Software。我一直觉得硬件这个东西还是有个硬件厂商提供的软件来协助管理比较好,于是没有多想,就把两个都下载了下来。之后运行安装Network Connection Software,安装过程当中笔记本的喇叭(喇叭,不是音箱)突然连续响了N声,直觉告诉我有点问题,但是也没多考虑,安装完毕之后就重新启动了。

不想重新启动之后,先是登录界面上面输入账户密码之后,登录界面好像死掉了一样,等待了大约两分钟才启动到桌面,而且登录进去之后也马上发现不对劲:任务栏上面的快速启动无法显示。虽然之前也出现过类似的问题,但是都是把快速启动删除然后再重新添加就好了。但这次直接报错:无法添加工具栏。

当然我知道,任务栏当中的图标是一组快捷方式,存放在C:\Documents and Settings\<Your User Name>\Application Data\Internet Exploerer\Quick Lunch下面。于是转过去找,竟然发现Application Data下面根本没有Internet Explorer的目录!再试图打开FireFox,竟然直接跳出首次运行的配置导入向导——一切迹象都表明:Application Data目录失踪了!

幸好我知道sysinternal有一个工具叫做Junction,用来建立目录软链接。所谓的目录软链接好像快捷方式一样,可以让你从一个位置指向另一个位置。但是目录软链接对于上面的应用程序是透明的,只要软链接已经建立好了,比如把C:\test重定向到D:\test,在应用程序看来这两个目录就是完全一样的了,对于C:\test下面的文件访问,也都会被操作系统直接重定向到D:\test下面的相应文件。

幸好我知道这个东西,而且是之前就知道。当年当我发现你根本无法阻止很多程序往我狭窄的C盘上写文件的时候,我就不得不想办法把尽可能多的东西迁移到别的盘上去。最早被我看上的就是Documents and Settings下面的目录:无数的程序把配置文件放在这里(也应该放在这里)。所以我就用软链接把C:\Documents and Settings\<My user name>\Application Data目录重定向到了另一个磁盘分区上,顺便一起被重定向的还有几个同级的目录。这种解决方案的一个坏处就是,如果某个软件作了什么不该做的事情,删掉这个软链接如同删掉一个空目录一样简单:一个RemoveDirectory的系统API调用足以。

那么是不是谁把这个软链接给删掉了呢?用资源管理器是没有办法区分的,但是用命令提示符可以。所以我立即用命令行转到这个目录去看,果然, Application Data已经变成了<DIR>,而不是软链接(<JUNCTION>)了(可惜这里忘记截图留下现场了)。

那么实际的目录内容呢?我立即转到软链接指向的目录观察,万幸的事情:所有的配置文件都还在。

接下来的事情就很简单了,换用另外一个账户登录,使用命令提示符移动到C:\Documents and Settings\<my user name>下面,删除原来的Application Data目录,然后执行junction "Application Data" "E:\path\to\Application Data",建立了一个新的目录软链接。

重新用自己的账户登录,所有的配置文件都回来了,打开FireFox看到布满插件的状态栏,放心许多。

回顾一下我之前作过的事情,只能让我相信,确实是Intel的安装程序把这个目录删掉了:计算机喇叭的响声也许就是因为有程序发现自己的 Application Data目录被删掉了。而当时在做的事情,就是在安装Intel的应用程序而已。

一个问题已经解决了,但是还有另外一个问题:登录仍然非常的慢,为什么呢?

你看到的登录界面其实是叫做WinLogon的进程所显示的。而这个WinLogon当中是可以加入许多的自定义模块的。但是这些模块分布在各处,查找起来非常不便。幸运的是sysinternal仍然有一个工具替我们做了这些事情:Autoruns。这个工具运行之后,会有一个WinLogon标签页,当中显示了所有WinLogon注册的组件。请注意图中用红线圈出的部分,这些就是Intel安插在 WinLogon当中的。而登录的时候,WinLogon使用GINA DLL来进行身份认证。从图中显然可以看出,Intel的无线网卡程序使用它自己的GINA DLL替换掉了Windows自己的GINA DLL。

那么Windows自己的GINA DLL是什么呢?我们在system32目录下面运行dir *GINA.DLL,得到一个列表,如图中右下角所示。从名字上面看,msgina.dll应该就是微软的GINA DLL了。所以在IWPDGINA上面双击,Autoruns自动打开注册表编辑器,并定位到该注册表项。将它改成msgina.dll。然后把剩下的两个和Intel相关的项目前面的勾去掉。之后重启系统,输入密码之后,登录立即完成,并且很快的看到桌面,一切恢复正常。

而这个时候回头看看我最初想要做的事情:我的无线网卡的驱动正确更新了:

更新之后的无线网卡驱动确实提高了电源管理的能力:在我写这篇文章的整个1个小时当中,无线网络没有再断。

但是,仅仅是一个无线网卡,为什么要去修改GINA,而且是这么敏感的组件:我的登录用户名和密码与无线网络有关系么?而且,为什么会毁掉我的 Application Data目录?如果不是我之前知道一点Windowsçš
„东西,也许只能重装系统了,于是两年多的用户习惯,首选配置,甚至邮件都可能丢失。

而我,本来只是为了更新一下驱动程序罢了。