2

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

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

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

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

4

3 回答 3

5

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

不过要提醒一句:驱动程序开发需要更多的思考,并且必须更仔细地完成,没有捷径,良好的测试,并且通常希望您对 Windows 驱动程序模型有相当多的了解。请记住,错误和糟糕的驱动程序会危及整个系统的稳定性。

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

于 2010-09-20T09:56:28.653 回答
3

抱歉,Windows Internals 这本书更适合好奇的人阅读。如果你想从事驱动程序开发,我不推荐它——或者最多作为理解架构的先决条件阅读。周围还有很多其他的书,虽然大部分都比较旧。

根据您的目标,您可能会使用一种更简单的驱动程序模型。这并不是说驱动程序开发是微不足道的——事实上,我对上述警告的所有方面都表示赞同,甚至会更进一步——但这意味着你可以节省一些更乏味的工作,而不是编写遗留文件系统过滤器您会根据过滤器管理器编写一个。但是,SP2 之前的 Windows XP 默认没有安装它,如果我没记错的话,Windows 2000 需要 SP4+SRP+patch。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 本机 API 参考”(9781578701995)(经典)。尽管最后三个或多或少可以让您更好地了解,并且并不是驱动程序开发人员必须阅读的。

于 2011-02-12T16:58:28.777 回答
1

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

正如上面的帖子所提到的,阅读一本好书将是一个很好的开始方式。此外,安装 DDK/WDK 并参考捆绑的示例。

于 2010-11-04T11:00:13.210 回答