Pegram
论坛版主
论坛版主
  • 注册日期2005-12-03
  • 最后登录2013-08-23
  • 粉丝13
  • 关注5
  • 积分1333分
  • 威望4717点
  • 贡献值1点
  • 好评度78点
  • 原创分0分
  • 专家分2分
阅读:4436回复:7

《竹林蹊径——深入浅出Windows驱动开发》

楼主#
更多 发布于:2011-02-13 21:50
《竹林蹊径——深入浅出Windows驱动开发》已出版,三章试读下载http://download.csdn.net/source/3007591

感兴趣的朋友可去China-Pub或当当网上就所读内容展开讨论:http://www.china-pub.com/197674

本书由张佩、马勇(ZnSoft)和董鉴源三位作者编写,受到潘爱民、谭文(楚狂人)、张银奎、张帆等人的热烈推荐,他们或写了长篇序言,或给出热情洋溢的荐语。是内核编程方面的又一原创力作(这年月,写书不容易...),也是《驱网核心技术丛书》的收官之作。拜请大家多多支持!
 
各方评价:
这本书《竹林蹊径——深入浅出Windows驱动开发》是三位作者张佩、董鉴源和马勇的最新力作,他们将自己在实践中积累起来的经验整理成册,以期望后学者能少走弯路,缩短Windows驱动程序开发的学习之路。这本书重点介绍了KMDF、USB/1394和音频驱动程序的开发,以及设备驱动程序的发行和安装。建议有一定Windows驱动程序开发基础的读者看一看这本书,尤其是,如果你正打算使用KMDF,或者正在从事与USB/1394或音频驱动程序相关的编程工作,那么,这本书便是一份难得的实践指导了。
——潘爱民 《Windows内核原理与实现》作者

很高兴看到又有一本原创的驱动开发书籍即将出版,尽管这方面的书已经有一些,但还有很多主题未被覆盖到,这本书比较详细地讨论了使用C++开发驱动、音频驱动、内核流等其他书籍很少涉及的话题,填补了这些方面的空白,特此推荐!
——
张银奎《软件调试》作者

张佩是我在“驱动开发”这个圈子里的好朋友,他也是我知道国内做WDF驱动程序最早的程序员之一,我们经常讨论驱动开发的知识。Windows驱动开发属于底层开发,所以变化一直都不太大。然而从WDM框架到WDF框架是变化最“激烈”的一次。现在知名厂商的驱动程序都从WDM框架迁移到WDF框架下。这本书应该是国内第一本详细介绍WDF框架的书籍,当我第一次读完初稿后的确有醍醐灌顶的快乐。希望这本书能带领更多的驱动程序爱好者进入这个领域。
——张帆《Windows驱动开发技术详解》作者


《寒江独钓》与《竹林蹊径》的合作作者。精通USB开发,设计了CY001 USB驱动套件(http://bbs.driverdevelop.com/read.php?tid-119314.html)。
Pegram
论坛版主
论坛版主
  • 注册日期2005-12-03
  • 最后登录2013-08-23
  • 粉丝13
  • 关注5
  • 积分1333分
  • 威望4717点
  • 贡献值1点
  • 好评度78点
  • 原创分0分
  • 专家分2分
沙发#
发布于:2011-02-13 21:51
前言

国内内核开发方面的书籍特别少,一个原因是很多技术牛人,没有时间或机会把自己掌握的知识编辑成书。真的很遗憾。希望我砸出这块砖头后,后面会在书店里看到无数的翡翠之作。
相比较国外的程序员,国内程序员在学习内核驱动开发的时候,学习曲线特别长,主要原因是没有趁手可用的资料。有一些初学者联系我,倒出的苦水大多是:资料太少,技术太难,不知从何下手。我给出的建议多是希望他们努力学习WDK中的现成文档,并推荐一些经典的英文电子档。但大多数初级学习者,并不满足我这个答案——他们希望有中文资料。这时候,我会向他们推荐《深入解析Windows操作系统》或者《软件调试》,有时候,我还会谨慎地向他们推荐《驱网核心技术丛书》。
很高兴有机会,写成这样一本书。本书的另外两位作者是马勇和董鉴源,他们分别写了第1章和第2章。写《竹林蹊径——深入浅出Windows驱动开发》花了我整整八个月的时间,有半年左右,我把所有的时间都花在上面,不上班,不娱乐。这本书是我的劳苦之作。
我利用写作的机会,纵深渗透学习了不少知识。与其说它是在展示个人才华,不如说是做了一次自我进修和测试。我做不到文采飞扬,能保证的是负责任的态度。此书在写作过程中,增删若干遍,完稿之后,请多位前辈老师审稿。我现在唯一期望的是书中的内容,确实能够对读者起到帮助、参考的作用。
本书特色
《竹林蹊径——深入浅出Windows驱动开发》这本书的一个最大特点是插图和示例多,对涉及到的大部分知识,能做到一定深度的挖掘。谭文跟我说,无法把自己的技术经验完全写出来。我当然同意他这句话的正确性;但写作的过程中,我仍然尽最大的可能,把技术和经验文字化、图形化,尽量做到由浅入深,脉络分明——这是我个人的最高目标。
平时给别人讲某个知识点的时候,哪怕是最简单的,我喜欢讲得360度面面俱到。说了一层,爱说下面还有一层。讲了烧水之釜,还要介绍釜底之薪。有人不喜欢这样,但我喜欢。如果以后还写书,我仍会保持这一点。
本书主要内容
本书主要包含这几个方面的内容:WDF框架、驱动测试、音视频编程、驱动安装。这其中,最费精神的是WDF框架相关章节。
WDF是目前和将来驱动开发的大势所趋。如果初学者因为资料的关系,而紧握着WDM架构的双手的话,他一定要留神,不要冷落了旁边正如日中天的WDF。搞技术,特别是在Windows平台上,不建议大伙具有怀旧情绪,跟着形势走是必然的。
书中有四章内容介绍WDF。笔者如农夫翻地一般,把WDF奇异表面下的具体实现做了一定的揭露。笔者饶有兴趣地为大家分析WDF的对象模型,而从Wdf01000符号文件中揭露的内部结构体定义,能令很多人吃惊不小。
用WDF框架编写驱动,要比WDM方便、简单一半以上。本书中介绍了使用WDF框架进行USB和1394编程的内容。由于USB的运用之广,使USB驱动成为Windows内核驱动中的显学。驱动开发网专门辟有“USB驱动”版块,并几乎是最聚人气的地方。为配合USB一章的写作与学习,笔者专门请朋友精心设计了一款USB驱动学习开发板。读者在本书中的多处地方,都能看到它的玲珑身影。
驱动测试方面包括两章内容,一章以WDF驱动测试为中心进行介绍,另一章介绍了Windbg调试命令。曾经的王者SoftIce湮没不闻后,Windbg成了唯一的内核调试利器,不可不掌握。
音视频驱动向来都比较小众,做相关开发的公司和个人都很少,资料也就更加少。本书有两章内容介绍音视频开发,一章介绍AVStream小端口架构,一章介绍酷酷的ASIO音频驱动,并以虚拟ASIO声卡的创新技术,为有兴趣的读者带去福音。
本书最后三章,介绍驱动安装有关的知识。一章介绍驱动安装的原理及系统模块,一章介绍INF安装文件的技术细节,一章以示例介绍如何编写驱动安装软件。看过这些内容后,试着为你的驱动写一个安装软件,会很酷。
本书读者对象
本书适合一般程序员
对WDF感兴趣,准备开发VSB或1394设备驱动者
下面要说一些和技术无关的东西。
在本书写作过程中,有许多书外的记忆。比如,夏天我工作的时候,我女儿常常站在床头,猛地一下用手扑打我的笔记本,电脑屏幕就倾了下去,一阵惊叫。

.一次两章隔夜刚新鲜写好的内容,保存在移动硬盘中,第二日在另一台电脑上开机,却怎么都找不到了。翻遍整个系统,用了N种数据、磁盘恢复工具,都无济于事,踪影全无。那种无助得想哭的感觉,一直记在心间(这个问题我后来把它再现了,可以认定是Windows 7操作系统的BitLocker功能在休眠唤醒处理上的一个Bug)。
致谢
感谢我的好朋友,谭文。是他推荐我主笔这本书的写作。这套系列中的《天书夜读——从汇编语言到Windows内核编程》和《寒江独钓——Windows内核安全编程》出版后,大家都很忙。谭文很信任我,推荐我写《竹林蹊径——深入浅出Windows驱动开发》。谭文是我以前的同事,湖南人,故在网上号楚狂人,赫赫有名,散文随笔一级好,技术文章有散文风。他为本书写了一篇小序,特此感谢。谢谢李冰编辑和文字编辑葛娜女士,她们的信任和支持,使我有可能完成这本书。
感谢本书两另外两位作者,他们贡献了第1章和第2章。
感谢潘爱民老师,他为本书写了序,令我有蓬荜生辉之感。
感谢张银奎老师,张帆兄,他们也对本书给予了鼓励,并写了推荐语。
我要感谢所有照顾过我的亲人们:谢谢我大阿姨,她现在只在天上看着我们。她以力排众议的气势,关心照顾过我。谢谢红兵表哥,他正好大我一轮,学习成绩冠于全镇。当初我老爱从他那里偷书,那些书正是我童年和少年时代仅有的课外书。谢谢小姨父,父执辈中他是唯一给我严肃、客观教育的人。感谢我舅舅,他给我很多帮助。以前,我总是把去上海说成“去我舅舅那”。
谢谢我所有的亲人们。
感谢双方父母,感谢他们所有的辛勤付出。
最后,感谢我的妻子,近两年以来,她离职在家做专职母亲,好像把十几年的事情放在一两年里做了,岁月催人老,我把她累坏了。
最后是一首五言八句,会意书名曰:《竹林蹊径》
荫荫翠竹百亩林,
结庐恒爱此中景。
寻常偶遇方外客,
殷勤指点通幽径。

《寒江独钓》与《竹林蹊径》的合作作者。精通USB开发,设计了CY001 USB驱动套件(http://bbs.driverdevelop.com/read.php?tid-119314.html)。
Pegram
论坛版主
论坛版主
  • 注册日期2005-12-03
  • 最后登录2013-08-23
  • 粉丝13
  • 关注5
  • 积分1333分
  • 威望4717点
  • 贡献值1点
  • 好评度78点
  • 原创分0分
  • 专家分2分
板凳#
发布于:2011-02-13 21:52
推荐序
  潘爱民
  2010年12月5日于北京西二旗

我一直认为,编写程序是一件很奇妙的事情,它可以带来创造和控制的欲望。每当我阅读或者编写一段代码时,脑子里自然地就会想象这段代码怎样完成预定的逻辑。当面对一个不熟悉的开发环境,或者一个新的基础平台时,首先要清楚这个环境或者平台是如何工作的,以及提供了哪些功能。代码本身可能非常复杂,甚至奥妙无穷,但通常情况下,真正优美的高质量代码往往是简单的、易于理解的。对于代码编写者或者维护者来说,真正见功夫的地方不在于代码本身,而在于对下层开发平台的理解和驾驭能力,可能这就是俗称的“内功”。
这个观点既适用于应用软件程序员,也适用于系统软件程序员。对于应用软件程序员,低层的应用开发平台是支撑应用开发的基础,譬如,基于Windows SDK来开发Windows应用程序。那么,程序员有必要理解Windows SDK中的基本要素,诸如消息分发机制、各种图形功能等。在这种情况下,阅读一些典型的例子程序代码往往能起到快速引领入门的效果。同样地,C/C++程序员如果局限于C/C++语言本身,很难编写出高质量的实用程序。他们不仅要掌握C/C++运行库中函数和类型的用法,甚至还要理解这些函数和类型的实现机理。即使源代码层面上的库,例如STL(C++的标准模板库),也需要理解其代码实现才能灵活自如地用好这些库(比如STL中的各种容器数据结构、迭代器或算法)。
那么,对于系统软件程序员,“内功”是什么呢?系统软件是指操作系统本身或者依附于操作系统上为应用软件提供服务的软件。系统软件可能有机会跟硬件直接打交道,这赋予了程序员更强的控制能力,他们有机会介入操作系统的行为逻辑,甚至改变操作系统的行为特性。但随之而来的是对系统软件代码的更高要求。现代操作系统为应用软件提供了很强的容错能力,应用程序的失败通常不会波及到操作系统自身的稳定性,但操作系统对系统软件的容错能力却比较有限,毕竟系统软件运行起来之后可能被融入到操作系统的执行逻辑中成为操作系统的一部分。因此,理解和掌握操作系统的运行机制成为系统程序员编写出正确、高效的系统软件的基本前提。所谓“内功”,便着落在此。
在Windows平台上开发软件,编写Windows内核驱动程序是最为考验程序员“内功”的。内核驱动程序的代码量通常不大,但驱动程序框架中的任何一个函数,甚至这些函数中任何一行代码背后都可能蕴含着复杂的逻辑,或者隐式的要求和假设。即使驱动程序编写者在纯粹自行定义的函数中,也必须谨慎地关注一些与环境有关的因素,譬如代码是否可被中断、是否可重入,或者所引用的内存是否被交换到外存。另一方面,应用软件开发中的很多概念,比如地址空间、内存管理、异常处理和多线程并发等,在驱动程序开发中可能需要有不同的理解方法。此外,常用的C运行库函数基本上不再适合于驱动程序了,驱动程序编写者必须面对一个全新的底层环境和支持平台。因此,要编写可正确运行的驱动程序,程序员不仅要清楚地理解驱动程序所针对的目标设备或功能(可能包括硬件设备的各种特性),还要掌握Windows内核是如何与驱动程序打交道的,以及内核中诸多管理和运行机制,尤其是内存管理、线程调度和并发控制。
当Windows内核驱动程序被加载到内核中并且启动以后,它们变成了Windows内核的一部分,驱动程序中的接口函数在恰当的时刻被内核调用,这是Windows驱动程序的基本工作方式。Microsoft定义了WDM(Windows驱动程序模型)来规定驱动程序的结构,以及Windows内核如何与WDM驱动程序打交道。WDM不仅包括I/O管理器定义的驱动程序框架,还定义了在驱动程序中如何支持PnP(Plug and Play,即插即用)、电源管理和WMI(Windows Management Instrumentation,Windows管理规范)。因此,若要编写一个完全支持WDM的驱动程序,也需要理解WDM中所涉及的各个内核组件。
Windows内核驱动程序与内核的紧密关联性使得驱动程序的调试极为不方便,从某种意义上讲,驱动程序的调试等同于Windows内核的调试。而且,对于某些特定的逻辑错误,内核调试器甚至是无能为力的。正因为这个原因,内核驱动程序的代码尽可能精简,从软件设计角度而言,应最大程度地把功能代码放到应用程序中,在驱动程序中只留下最必要的功能逻辑。这样的设计也可以使Windows内核被不正确驱动程序代码牵连而导致稳定性问题的几率相对减小。
为了便于Windows驱动程序的开发,Microsoft定义了一个驱动程序框架,称为WDF(Windows Driver Foundation),其中针对内核驱动程序的部分称为KMDF(Kernel-Mode Driver Framework)。KMDF实际上是一个库,它封装了WDM中一些基本的代码逻辑,从而使程序员可以更加方便地编写出WDM驱动程序。KMDF可以部分地简化Windows内核驱动程序的开发任务,但是本质上它并没有降低内核驱动程序的复杂性,甚至需要程序员付出额外的学习努力。
总而言之,作为一名系统程序员,你需要洞悉目标操作系统中与你的软件打交道的各个部件,也要非常清楚地知道你所依赖的开发工具是如何帮助你做到这一点的。系统程序员往往面临着比应用程序员更长的学习曲线,但是,系统程序员从编写程序中获得的乐趣也是在应用层上难以体会得到的。我相信,当你发现自己编写的软件模块已经与操作系统内核融为一体时,那一刻你的感觉一定是手心里攥着一个操作系统——操作系统尽在你的掌控中了。
这本书《竹林蹊径——深入浅出Windows驱动开发》是三位作者张佩、马勇和董鉴源的最新力作,他们将自己在实践中积累起来的经验整理成册,以期望后学者能少走弯路,缩短Windows驱动程序开发的学习之路。这本书重点介绍了KMDF、USB/1394和音频驱动程序的开发,以及设备驱动程序的发行和安装。建议有一定Windows驱动程序开发基础的读者看一看这本书,尤其是,如果你正打算使用KMDF,或者正在从事与USB/1394或音频驱动程序相关的编程工作,那么,这本书便是一份宝贵的实践指导了。

《寒江独钓》与《竹林蹊径》的合作作者。精通USB开发,设计了CY001 USB驱动套件(http://bbs.driverdevelop.com/read.php?tid-119314.html)。
Pegram
论坛版主
论坛版主
  • 注册日期2005-12-03
  • 最后登录2013-08-23
  • 粉丝13
  • 关注5
  • 积分1333分
  • 威望4717点
  • 贡献值1点
  • 好评度78点
  • 原创分0分
  • 专家分2分
地板#
发布于:2011-02-13 21:52
呵呵,挥汗如雨

《寒江独钓》与《竹林蹊径》的合作作者。精通USB开发,设计了CY001 USB驱动套件(http://bbs.driverdevelop.com/read.php?tid-119314.html)。
Silitex
驱动中牛
驱动中牛
  • 注册日期2008-08-01
  • 最后登录2014-11-06
  • 粉丝6
  • 关注0
  • 积分317分
  • 威望770点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2011-02-14 14:13
太感谢了,终于等到书了!
wolong810825
驱动牛犊
驱动牛犊
  • 注册日期2009-01-30
  • 最后登录2011-03-04
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望31点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2011-02-16 15:43
貌似是很好的一本书。期待啊。。。。
zhuliang
驱动牛犊
驱动牛犊
  • 注册日期2008-04-16
  • 最后登录2012-10-05
  • 粉丝2
  • 关注1
  • 积分16分
  • 威望181点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2011-02-17 16:08
我不仅买了书。还买了开发板了。
workbee
驱动牛犊
驱动牛犊
  • 注册日期2001-04-24
  • 最后登录2012-05-30
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2011-02-24 14:09
请问在哪里买开发板啊?
游客

返回顶部