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

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

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

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

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

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

但是警告的一句话是:驱动程序的开发需要更多的思考,必须更仔细地完成,没有捷径,良好的测试,并且一般来说期望您对Windows驱动程序模型有相当多的了解。 请记住,有缺陷的司机会使整个系统的稳定性受到威胁。

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

对不起,但Windows内部的书更多的是好奇的一般阅读。 如果你想从事驱动程序开发,或者至多是读前提了解这个架构,我不能推荐它。 还有很多其他书籍,虽然他们大多数是有点老。

根据你的目标,你可能会逃脱一个简单的驱动程序模型。 这并不是说驱动程序的开发是微不足道的 – 实际上,我将上面的警告的所有方面放在第二位,甚至可以进一步深入 – 但这意味着如果不是写一个传统的文件系统过滤器,而是意味着可以节省一些更乏味的工作你会写一个基于过滤器管理器。 但是,SP2之前的Windows XP没有默认安装,如果我没有记错,Windows 2000需要SP4 + SRP +补丁。 WDF(Windows驱动程序基础版)使编写驱动程序变得更加简单,但并不适合所有需求。

术语设备在这里是一个不好的选择。 设备在驱动程序中也有其含义,并不一定是指硬件设备(如指出的那样)。 大致上,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的新版本)) ,“Undocumented Windows NT”(0764545698)和“Undocumented Windows 2000 Secrets”(0201721872) – 当然还有“Windows NT / 2000 Native API Reference”(9781578701995)(classic)。 虽然最后三个或多或少给你一个更好的见解,并不是严格需要作为驱动程序开发人员阅读。

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

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