-
-
[翻译]如何选择驱动程序模型
-
发表于: 2023-3-2 17:35 5353
-
2023.2.7日发布
原文地址:https://learn.microsoft.com/en-us/windows-hardware/drivers/gettingstarted/choosing-a-driver-model
windows为驱动开发提供了各种各样的驱动模型,具体如下:
. 设备功能驱动
. 设备过滤器驱动
. 软件驱动
. 文件系统过滤器驱动
. 文件系统驱动
为设备功能驱动选择驱动程序模型
当你设计一个硬件设备,首要考虑的是你是否需要开发功能驱动.细想如下几个问题:
你可以不需要开发驱动程序吗?如果你必须要写一个功能驱动程序,使用什么样的驱动模型才是最好的?
要回答这个问题,请确定您的设备在设备和驱动程序技术中描述的技术列表中的位置.参考对应的文档来确定是否开发功能驱动和选择什么模型.
一些个性化的技术有迷你驱动模型.在迷你驱动模型中,设备驱动程序由两部分组成:一部分处理常规任务,另一部分出特殊设备任务.
通常微软编写常规任务部分,设备厂商编写特殊设备任务部分.特殊设备部分有各种各样的名字,并且大部分都是以mini作为前缀的.
迷你驱动模型使用了一些名字如下:
. Display miniport driver
. Audio miniport driver
. Battery miniclass driver
. Bluetooth protocol driver
. HID minidriver
. WIA minidriver
. NDIS miniport driver
. Storage miniport driver
. Streaming minidriver
设备和驱动程序技术中列出的每一项技术并不是都有专用的迷你驱动程序模型.特定技术的文档可能会建议你使用 Kernel-Mode Driver Framework(KMDF);
另一些文档可能建议你使用User-Mode Driver Framework (UMDF).如果你的设备技术存在迷你驱动模型,那么必须使用这个模型.
否则,遵循技术文档的建议使用 KMDF,UMDF 或者 Windows Driver Model (WDM).
为设备过滤器驱动选择驱动程序模型
通常有多个驱动程序参与单个 I/O 请求(比如从一个设备里面读取数据).这些驱动程序在栈中分层,第一个驱动在栈顶,最后一个驱动在栈底.
这个栈存在一个功能驱动和多个过滤器驱动.
如果你准备为设备写一个过滤器驱动,确定您的设备在设备和驱动程序技术中所描述的技术列表中的位置,查看对应的文档,对选择过滤器驱动程序模型是否有指导.
如果没有,那么就优先考虑使用UMDF作为你的驱动模型.如果您的过滤器驱动程序需要访问无法通过UMDF使用的数据结构,再考虑使用KMDF驱动模型.
在极少数情况下,您的驱动程序需要访问 KMDF 不能提供的数据结构,这时再使用WDM驱动模型.
为软件驱动选择驱动程序模型
不和设备关联的驱动叫做软件驱动.软件驱动非常有用,因为可以在内核模式下运行,能够访问受保护的操作系统数据.
对于软件驱动程序,您可以选择KMDF和传统的Windows NT驱动程序模型.这两种驱动模型中,都不用担心即插即用(PnP)和电源管理,专注于主要任务即可.
KMDF中无需关注PnP和电源是因为框架已经为我们处理了,传统的NT驱动模型是因为内核模式服务在完全独立于PnP和电源管理的环境中运行.
我们推荐使用KMDF.如果你无需关心PnP和电源管理,就使用传统的NT驱动模型,否则使用KMDF模型.
注意:
在非常罕见的情况下,你的驱动程序需要关心PnP或者电源事件,并且需要访问KMDF不能提供的数据.这种情况下必须使用WDM驱动模型.
赞赏
- [翻译]如何选择驱动程序模型 5354
- [原创]远程桌面无法访问远程电脑上的USB证书 7312
- [翻译]I/O 完成端口 5685
- [讨论]如何判断一个exe或者dll是系统的 3699
- [求助]如何让指定内存地址不被占用,可以申请,比如0x400000 10848