竹林蹊径:深入浅出windows驱动开发
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

推荐序

我认识一个共享软件的作者,近十年来都在开发他的虚拟光驱的软件,不时给这个软件添加一点新的东西。我对此觉得很奇怪,对他说,我觉得虚拟光驱是一个很简单的东西。用一个映象文件容纳光盘上的数据,并开发一套驱动接口让系统以为这是一个光驱。下载网上开源的代码,应该不超过5000行。为什么他要为此耗费这么多年的精力呢?

他举了个例子说:国外知名的虚拟光驱Daemon,它的强项在于兼容性。几乎任何软件都能正常使用它的虚拟光驱,并当做真正的光驱来访问。而普通的开源的虚拟光驱,就有很多不支持了。

他曾经发现一种游戏,要求用户插入光盘。用他自己编写的虚拟光驱来模拟,总是不行。同样的映象文件,换了Daemon就一切OK。这让他大为诧异。碰到这样的情况,他根本就不可能到网上去搜索“为何我的虚拟光驱不支持某某游戏”这样的傻问题,也不可能在某处找来一段代码拷贝一番就解决。他必须找到问题的实质,才能找到对策。

花去漫长的时间,最终分析的结果是,原来因为该游戏希望每个用户都购买正版光盘,它就用了一种特殊的策略来分析用户所用的是不是真实的光驱。大家都知道硬盘的读取速度一般都比较快,而且事实上也更加稳定。光驱读盘的速度比硬盘相对慢一些,而且读取数据的速度有一定的不稳定性。比如说,数据读取的速率可能会以某种数学模型所定义的曲线为轨迹发生波动。而这个软件就根据这种不稳定性的匹配程度来进行检查。如果虚拟光驱提供的数据是不匹配这种特征的,则它很简单地禁止游戏继续运行。

而Daemon则在内部插入了这样的模拟函数,有意对数据的读出进行各种延时的处理,使之看上去非常像真实的光驱读出的数据。

总而言之,他开发的是一个逼近世界顶尖品质的好东西。当然代价是汗水与时间。

我能想象到在没有任何公开的代码,或者是前人的经验指引,自己去钻研发现并解决这些问题的困难。能在网上找到解决方案的问题必定不会是软件技术里的关键问题。相反是这样一个一个的无头悬案,才构成了程序员们所谓的“核心技术”。

我和一些人的见解不同。我并不认为越底层的技术就越“核心”。总有人认为系统比软件底层,所以程序更“核心”。而芯片比程序更底层,则芯片又更“核心”。其实硅片比芯片更底层,沙子又比硅片更底层,那是不是沙子才是最核心的技术呢?

我认为,在任何一个领域里,能够进行持之以恒的钻研,当大部分人选择放弃,而你依旧锲而不舍地学习、研究、解决一个又一个实际问题,你就能掌握核心技术。简言之,善于把握自己能够掌握的知识,并不断深化拓展知识领域,这才是真正的学习之道,也是成就个人和团队核心技术的途径。

我见到一些工作过多年的人,很有特点。有一种号称对技术没兴趣,更喜欢做管理,但其实并没有那么多做管理的机会,或者真的有机会,而做得也并不理想;有一种全凭在新手面前吹牛皮支撑老资格,实际编程依旧一塌糊涂。我从来不对别人妄加评论,但从技术学习上讲,他们都算是没到家。

《竹林蹊径——深入浅出Windows驱动开发》终于出版了。据我了解,张佩因写作这本书,在家伏案了半年。他是凭着极大的热情和信念去写作的,否则即便薪资上的损失都很值得惋惜。就本书而言,先不去考量书中内容的深浅,技术的精粗,仅就作者的诚心和写作精神,便值得称赞。

牛不是一天吃大的,小牛雏要不断地吃进养料,才能变成大牛。牛人要有牛技术,牛的技术,就是核心技术。我希望这本书的每一位读者,不管你现在或是将来,做的是应用开发还是内核编程,不管用的是C++还是Java或.NET,在工作、学习过程中都具有锲而不舍、精益求精的精神,哪怕最菜鸟的新手,在若干年的积累和沉淀后,都能够逐渐形成自己的核心技术。只有掌握了自己的核心技术,才能进入程序员的自由天地。

此文送给《竹林蹊径——深入浅出Windows驱动开发》的读者,是为序。

谭文

2010年12月10日