没有设备的设备驱动程序?

时间:2010-09-20 09:50:19

标签: windows kernel kernel-module

我正在创建一个需要使用某些内核级模块的应用程序,为此我将应用程序划分为2个:一个用户级程序和一个内核级程序。

在阅读了有关设备驱动程序并阅读了一些教程之后,我有点困惑。

是否存在没有与之关联的特定设备的设备驱动程序?除了在内核模式下工作的设备驱动程序(内核代码或其他东西)之外还有什么吗?

防病毒程序和其他此类应用程序如何在内核模式下工作?设备驱动程序是正确的方法还是我错过了什么?

3 个答案:

答案 0 :(得分:5)

是的,设备驱动程序可以在没有连接到机器的实际硬件(即设备)的情况下工作。只需考虑模拟连接SCSI驱动器(CD-ROM,无论如何)以安装ISO映像的不同程序。或者考虑使用容器模拟(可移动)驱动器的TrueCrypt,它只不过是硬盘驱动器上的加密文件。

警告一句:驱动程序开发需要更多的思考,必须更加谨慎,没有捷径,良好的测试,并且通常希望您对Windows驱动程序模型有很多了解。请记住,有缺陷的驾驶员会使整个系统的稳定性处于危险之中。

老实说,我不认为阅读教程就足够了。您可能希望至少投资一本关于该主题的体面书籍。不过我只差2美分。

答案 1 :(得分:3)

很抱歉,但是对于好奇的人而言,Windows Internals书籍更像是一般性阅读。如果您想参与驱动程序开发,我不能推荐它 - 或者至多作为理解架构的先决条件阅读。周围还有很多其他书籍,尽管其中大部分都比较旧。

根据您的目标,您可能会使用一种更简单的驱动程序模型。这并不是说驱动程序开发是微不足道的 - 实际上我是上面警告的所有方面,甚至会更进一步 - 但这意味着你可以节省一些更繁琐的工作,而不是编写遗留的文件系统过滤器你会根据过滤器管理器编写一个。但是,SP2之前的Windows XP默认没有安装,如果我没记错的话,Windows 2000需要SP4 + SRP +补丁。 WDF(Windows Driver Foundation)使编写驱动程序变得更加容易,但并不适合所有需求。

术语设备在这里有点不好选择。设备在驱动程序中也有意义,并不一定是指硬件设备(如指出的那样)。粗略地说,PDO(物理设备对象)和CDO(控制设备对象)之间存在区别。后者通常是您在用户模式下看到的,以及可以通过CreateFile,ReadFile,WriteFile,DeviceIoControl和朋友访问的内容。 CDO通常通过符号链接对Win32领域可见(不要与同名的文件系统实体混淆)。像C:这样的驱动器号分配实际上是指向底层设备的符号链接。这取决于驱动程序是否是CDO或PDO。区别更多的是在课堂上教授的概念。

这就是我实际推荐的内容。上一节关于Windows驱动程序开发的课程。我自己参加了两次OSR研讨会,我强烈推荐它。那些人知道他们在谈论什么。哦,并在OSR Online上注册他们的邮件列表。

使用Sysinternals的WinObj查找有关设备和驱动程序对象及符号链接的更多信息。


关于AV的问题,是的,他们使用文件系统过滤器驱动程序(上面简要提到)。完全成熟的传统FSFD的唯一替代品是迷你滤波器。

也可以在内核模式下加载一种特殊的DLL。但总的来说,驱动程序是进入内核模式的方式,并且有很好的文档记录。

您可能需要考虑的书籍(按ISBN):最重要的是“编程Windows驱动程序模型”(0735618038),“Windows NT设备驱动程序开发”(1578700582),“Windows NT文件系统内部”(09​​76717514(OSR的新版本)版本)),“未记载的Windows NT”(0764545698)和“未记载的Windows 2000秘密”(0201721872) - 当然还有“Windows NT / 2000 Native API Reference”(9781578701995)(经典)。虽然最后三个或更少可以为您提供更好的洞察力,但并不是严格需要阅读司机开发人员。

答案 2 :(得分:1)

防病毒(和系统恢复)软件通常使用文件系统过滤器驱动程序。设备可以具有多个像堆栈一样排列的过滤器驱动程序,并且该设备上的任何事件/操作都必须通过所有堆叠的驱动程序。例如,反病毒为磁盘设备安装过滤器驱动程序,以便它们可以拦截和扫描所有文件系统(读/写)操作。

正如上面的帖子所提到的那样,通过一本好书将是一个很好的开始。另外,安装DDK / WDK并参考捆绑的示例。