有没有任何书籍/教程可用于开始学习Windows设备驱动程序开发?
对于普通的Win32/GUI开发,Petzold的书似乎是必不可少的参考。驱动程序是否存在类似的书籍?
我想指出,我实际上并没有与硬件交谈 - 我实际上想在软件中仿真一块硬件,但我想先了解一般情况下的工作原理。
Billy3
需要注意的一件事是设备驱动程序开发(架构和工具)变化比Win32开发更多...因此尽管Petzold的书从1990年代开始对Win32非常好,且可以被认为是一部不朽的经典之作,但许多种类型的驱动程序(如打印机驱动程序、网络驱动程序等)的架构在各种操作系统版本中有所变化。
这里有一篇博客文章,介绍了各种书籍: Windows Device Drivers Book Reviews。
别忘了DDK中包含的微软文档:最重要的是,DDK中包含的示例驱动程序(源代码)。例如,当我想编写一个模拟串行端口驱动程序时,我发现示例串行驱动程序文档与DDK文档相结合非常有价值(也足够了)。
为了更好地学习内核开发:
a. 大量的内核程序示例:
Windows DDK 示例:
WDK样例:
http://msdn.microsoft.com/en-us/windows/hardware/gg487428
或者直接搜索:
http://www.google.com/search?q=windows+ddk+samples
(因为上述URL可能会更改,但Google很可能会返回最合适/可达的URL)
b. 许多调试技术,其中我发现最好的是VMware(或VirtualBox)+ windbg +串行端口调试:
http://www.google.com/search?q=windbg+vmware+kernel+debug
这篇文章经典之处在于使用VMWare和Windbg(Ring0之主):
http://silverstr.ufies.org/lotr0/windbg-vmware.html
c. 以及其他人构建的系统管理工具:
http://technet.microsoft.com/en-us/sysinternals/bb545021
曾经被称为SysInternals的工具集是由“Windows Internal”合著者Mark Russinovich创建的(必读!)
http://technet.microsoft.com/en-us/sysinternals/bb963901
从这些工具中,您将拥有大量的调试选项。http://www.osronline.com/page.cfm?name=ListServer
e. 在 Channel9 观看与 Windows + 内核相关的大量视频(谷歌返回了超过 1000 个链接):
http://www.google.com/search?q=site:channel9.msdn.com+kernel+video&num=100
f. 讨论论坛,例如:
http://social.microsoft.com/Forums/en-us/kernel/threads
http://social.msdn.microsoft.com/Forums/en-US/wdk/threads
我也订阅了免费的 OSR 杂志(纸质版)。自 1998 年至今,我已经收到了我的杂志 - 它是从地球的另一端运送过来的!
在编程方面,你应该使用相对较新的Windows Driver Foundation(WDF)框架,而不是旧的WDM框架。阅读WDF概述Word文档是一个很好的起点。
如果你想阅读一本书,那么"使用Windows Driver Foundation开发驱动程序"就是你要找的。
个人认为开始开发的最佳方式是通过实际应用。考虑到这一点,我推荐这本书:
首先,你需要编写一些代码来实现某些功能,这应该足以让你开始了解。然后,你可以深入研究缓冲/非缓冲/直接方法之间的区别以及与它们相关的特殊性。
如果你需要了解某些具体主题的详细信息,那么《Windows驱动程序设计(第2版)》也是一个很好的帮助。但我认为最重要的是将事物放入上下文中,然后在此基础上建立。