2010-09-20 108 views
2

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

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

有没有设备驱动程序没有任何关联的特定设备?除了在内核模式下工作的设备驱动程序(内核代码或其他)还有什么?

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

回答

5

是的,设备驱动程序可以在没有连接到机器的实际硬件(即设备)的情况下工作。试想一下为模拟连接的SCSI驱动器(CD-ROM,不管)安装ISO映像的不同程序。或者考虑使用容器来模拟(可移动)驱动器的TrueCrypt,它只不过是硬盘上的加密文件。但是:驱动程序的开发需要更多的思考,并且必须更仔细地完成,没有捷径,良好的测试,并且通常期望您对Windows驱动程序模型有相当多的了解。请记住,有缺陷的司机会让整个系统的稳定性受到威胁。

老实说,我不认为在这里阅读教程是足够的。你可能想至少投资在这个问题上一本体面的书。但我的2美分。

+0

谢谢,这给了我一些清晰。我订购了Microsoft System Internals这本书,只是做了一点小作业,直到它到来。 – lalli 2010-09-21 04:20:56

+0

当谈到Windows内核驱动程序时,术语“设备”存在歧义。几乎所有的驱动程序,除了一些恶意软件外,至少都有一个CDO。 CDO是内核对象类型“Device”。检查出来,如果你不相信我:) – 0xC0000022L 2011-06-17 21:08:08

1

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

正如在上面的文章中提到的,通过一本好书是一个很好的开始。另外,安装DDK/WDK并参考捆绑的示例。

3

对不起,但Windows内部的书更多的是好奇的一般阅读。如果你想从事驱动程序开发 - 或者至多是作为必备的阅读材料来理解架构,我不能推荐它。还有很多其他书籍,尽管其中大部分都比较旧。

根据您的目标,您可能会得到一个更简单的驱动程序模型。这并不是说驱动程序的开发是微不足道的 - 事实上,我将上述警告的所有方面都放在了第二位,甚至还会更进一步 - 但这意味着如果不是编写传统文件系统过滤器,而是可以节省一些更乏味的工作你会根据过滤管理器编写一个。但是,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查找有关设备和驱动程序对象和符号链接的更多信息。


至于关于AVs的问题,是的,他们使用文件系统过滤器驱动程序(上面简要提到)。一个完整的传统FSFD的唯一替代方案是一个小型过滤器。

也可以在内核模式下加载一种特殊类型的DLL。但是一般来说,驱动程序是进入内核模式的途径,并且可以很好地记录。您可能要考虑的书籍(通过ISBN):最重要的是“编程Windows驱动程序模型”(0735618038),“Windows NT设备驱动程序开发”(1578700582),“Windows NT文件系统内部”(09​​76717514(OSR's新版本)),“Undocumented Windows NT”(0764545698)和“Undocumented Windows 2000 Secrets”(0201721872) - 当然还有“Windows NT/2000 Native API Reference”(9781578701995)(经典版)。尽管最后三个或多或少给你一个更好的见解,并不是驱动程序开发人员阅读时所需要的。