开始进行驱动程序开发

22

有没有任何书籍/教程可用于开始学习Windows设备驱动程序开发?

对于普通的Win32/GUI开发,Petzold的书似乎是必不可少的参考。驱动程序是否存在类似的书籍?

我想指出,我实际上并没有与硬件交谈 - 我实际上想在软件中仿真一块硬件,但我想先了解一般情况下的工作原理。

Billy3

5个回答

12

需要注意的一件事是设备驱动程序开发(架构和工具)变化比Win32开发更多...因此尽管Petzold的书从1990年代开始对Win32非常好,且可以被认为是一部不朽的经典之作,但许多种类型的驱动程序(如打印机驱动程序、网络驱动程序等)的架构在各种操作系统版本中有所变化。

这里有一篇博客文章,介绍了各种书籍: Windows Device Drivers Book Reviews

别忘了DDK中包含的微软文档:最重要的是,DDK中包含的示例驱动程序(源代码)。例如,当我想编写一个模拟串行端口驱动程序时,我发现示例串行驱动程序文档与DDK文档相结合非常有价值(也足够了)。


我还要补充一点,订阅ntdev邮件列表(http://www.osronline.com/cf.cfm?PageURL=showlists.CFM?list=NTDEV)是个好主意,因为它可以成为一个很好的信息来源,同时指出常见的错误。 - BCran
在开始之前,你必须熟悉操作系统的概念,然后你必须熟悉Windows操作系统(阅读Mark Russinovich的《Windows内部原理》)。 - AminM

9

为了更好地学习内核开发:

a. 大量的内核程序示例:

Windows DDK 示例:

http://social.msdn.microsoft.com/Forums/en-US/softwaretesting/thread/08690203-1757-4129-b59a-6bae10bcdce8/

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

从这些工具中,您将拥有大量的调试选项。
d. 加入OSR邮件列表(特别是ntdev非常活跃,但还有其他像windbg的):

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 年至今,我已经收到了我的杂志 - 它是从地球的另一端运送过来的!


OSR Lists已经消失了,但论坛仍然活跃。 - Laurie Stearn

1

太遗憾了,我必须支持Win2k :( - Billy ONeal

1

我会搜索一些有丰富示例的教程,比如这个。在Windows驱动程序开发中,关键是要了解层次结构、IRP、IRQL等概念,还要知道过滤器驱动程序等术语。如果你正在寻找示例代码,这里有我的Spodek驱动程序代码:sf.net链接。你会在那里找到一个过滤器驱动程序(用于键盘,keyb.c)、内核空间队列(queue.c)以及隐藏系统中存在的技巧。不过它是一个遗留(sys)驱动程序。


1

个人认为开始开发的最佳方式是通过实际应用。考虑到这一点,我推荐这本书:

Rootkit Arsenal:逃避和潜藏在系统黑暗角落中

The Rootkit Arsenal Cover

首先,你需要编写一些代码来实现某些功能,这应该足以让你开始了解。然后,你可以深入研究缓冲/非缓冲/直接方法之间的区别以及与它们相关的特殊性。

如果你需要了解某些具体主题的详细信息,那么《Windows驱动程序设计(第2版)》也是一个很好的帮助。但我认为最重要的是将事物放入上下文中,然后在此基础上建立。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接