WDF
+ -

WDF 体系统构

2022-03-30 117 0

Windows操作系统系列的下一代驱动程序模型是WDF,这相模型相当于以前的WDM架构,可以减少驱动程序的开发时间,实现更好的系统稳定性,提高驱动程序的适应性。

WDF提供了两种类型的框架:

  • KMDF(Kernel Mode Driver FrameWord,内核模式驱动程序框架)实现了Windows必须的基本内核模式擦去啊动程序支持功能,这些功能是所有内核模式驱动程序的公共功能。
  • UMDF(User Mode Driver FrameWork,用户模式驱动程序架构)提供了与KMDF类似的功能支持,但是允许类设备的驱动程序不在内核模式中运行,而是在用户模式中运行。

为什么要用WDF,WDM有什么不足

编写Windows驱动程序并非易事。当前的内核模式驱动程序开发模型——WDM相当复杂,有严重的局限性

WDM要求所设计的驱动程序能够管理与操作系统的交互,而不仅仅是与设备硬件的交互。 即使是一个简单的WDM驱动程序也要包含几千行代码,而其中的多数代码完成的不过是每个 驱动程序必须支持的公共功能。WDM驱动程序必须使用从操作系统内核直接导出的设备驱动程 序接口(DDI)设计。这些接口的目的是为了提高性能,而不是易用。在许多情况下,DDI直接 将操作系统的核心数据结构公开给驱动程序,从而增加了驱动程序错误造成系统崩遗或损坏的几率。

对于某些类型的设备,端口/微型端口模型实现占了许多WDM代码。但是Windows支持十儿 种这样的模型,而且每种模型都是不同的。所以编写一类设备的微型端口驱动程序时获得的知识, 在编写另一类设备的微型端口驱动程序时不一定适用。

WDF的优势及设计目录

与内核模式驱动程序不同,用户模式驱动程序没有WDM的公共基础设施。
WDF模型的主要设计原则如下所述。

  • 将驱动程序模型与核心操作系统组件分开
  • 为某些类型的设备提供用户模式选项
  • 实现公共和默认驱动程序功能,以便驱动程序开发人员能将注意力集中在自己的硬件上
  • 使驱动程序成为事件驱动的,并定义事件的详细信息,以简化驱动程序的任务。
  • 所有驱动程序支持即插即用和电源管理实现。
  • 用户模式和内核模式的驱动程序采用统一的安装过程。
  • 提供集成的工具(包括内置的跟踪和验证支持),帮助你在调试期间和发布之后寻找和诊断问题。
  • 支持一个驱动程序二进制文件与多个版本的框架和操作系统协同工作。

题外话

其实这里可对照WDM是Win32 API开发一个应用程序,而WDF是对WDM的封装成MFC。这样关于系统交互的操作都交给WDF提供的库或函数

0 篇笔记 写笔记

WDF 体系统构
Windows操作系统系列的下一代驱动程序模型是WDF,这相模型相当于以前的WDM架构,可以减少驱动程序的开发时间,实现更好的系统稳定性,提高驱动程序的适应性。WDF提供了两种类型的框架:KMDF(Kernel Mode Driver FrameWord,内核模式驱动程序框架)实现了Windo......
WDF驱动程序模型
WDF驱动程序模型定义了一个面向对象的事件驱动环境,在这个环境中,驱动程序代码管理特定于设备的功能,而在发生会影响设备操作的事件时,微软公司提供的一个框架则会调用驱动程序进行响应。驱动程序模型包含以下内容。KMDF和UMDF都要实现的一个对象模型。KMDF和UMDF都使用的一个即插即用和电源管......
WDF对象模型
WDF对象模型中,对象具有以下特点。对象是驱动程序的构造块。驱动程序通过明确定义的接口来修改这些对象。对象本身有 明确定义的生命周期。有一组事件可以影响每类对象。框架定义了每个事件的默认行为。要支持特定于设备的 行为,驱动程序中要包含能重写默认行为的回调例程。模型定义了一组对象,用来表示公共......
WDF内核对象
KMDF对象对驱动程序来说是不透明的结构。驱动程序永远不会直接访问KMDF对象的实例。相反,它们通过句柄来引用对象实例。要读、写对象或在对象上执行操作,驱动程序需要调用对象的方法并传递该句柄。 KMDF定义了20多种对象类型。下在是最常用的一些对象。 KMDF对象是KMDF框架独有的。它们不受W......
WDF即插即用和电源管理支持
WDF的主要设计目标简化即插即用和电源管理的驱动程序支持,在内核模式和用户模式下都能使用即插即用和电源管理。无缝地处理即插即用事件和电源事件,对于系统的可靠性和良好用户体验来说至关重要,但要想正确实现也出奇地复杂。 这种复杂性多数是因为驱动程序必须确定处理每个即插即用或电源管理请求的正确方式。正确......
WDF集成的IO队列和取消
WDF将即插即用和电源管理支持与I/O请求的排队相集成,并进一步将排队与请求取消集成。 KMDF和UMDF都提供可配置的IO队列。驱动程序为特定的I/O请求、电源管理特征和调度请求创建并配置队列。框架根据驱动程序的说明对请求进行排队和调度:顺序(一次一个)、并行(到达就分配)或手动(根据驱动程序的......
WDF IO模型
在Windows中,IRP(IORequestPacket,IO请求数据包)的功能不仅仅是向驱动程序提供传统的I/O请求(读、写、创建等)。它是操作系统和驱动程序、驱动程序和驱动程序之间一种基于数据包的通用通信机制。除了传递IO请求之外,WindowsIO管理器还发送IRP来通知驱动程序发生了即插即......
WDF IO请求流程
虽然由不同的组件实现,但KMDF和UMDF使用的I/O模型相同。在这个模型中,IO请求的流程如图所示。WDF调度程序代码在框架内传递I/O请求数据包。WDF根据IO请求的主功能代码调度IO请求。主功能代码是IRP中的一个字段,用来标识请求的类型。根据主I/O功能代码,调度程序决定最初应该由框架中的......
WDF WMI请求(仅限内核模式驱动程序)
WMI(WindowsManagementInstrumentation)请求触发驱动程序为当前所有WMI事件所注册的回调。在WMI回调中,驱动程序可能会调用设备对象的WIM方法来创建和操纵WMI实例,以WMI提供程序的形式改变它的状态。在WIM回调返回之后,框架代替驱动程序根据具体情况完成或转发请......
WDF 驱动程序架构
WDF内核驱动程序架构对于内核模式驱动程序,KMDF不会替代WDM,而是提供了一个框架性的WDM实现。驱动程序开发人员通过创建对象并提供基于事件的回调例程,配置框架驱动程序从而在特定设备上使用。 KMDF是一个可以重入的库,可以在多个驱动程序之间共享。驱动程序在加载的时候与这个库动态绑定,可以同时......
KMDF驱动程序结构
KMDF驱动程序包含DriverEntry函数(根据KMDF标识驱动程序)、 KMF调用的一系列回调函数(以便驱动程序能够对影响其设备的事件做出响应),以及驱动程序特有的其他实用函数。几乎每种KMDF驱动程序均必须具备下列函数。DriverEntry函数,表示驱动程序的主要入口点。EvtDriv......
WDF结构体继承
WDF在内核中的驱动模块为Wdf01000.sysWDF中的各个对象的公共模块为FxObject,其它对象对是继随于FxObject,如FxDevice对于的DEVICE_OBJECT,FxDriver对应的DRIVER_OBJECT.Wdf01000的驱动属性信息如下:1: kd> !......
WDF_DECLARE_CONTEXT_TYPE_WITH_NAME
#define WDF_DECLARE_CONTEXT_TYPE_WITH_NAME(_contexttype, _castingfunction) ......
作者信息
我爱内核
Windows驱动开发,网站开发
好好学习,天天向上。
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!