信息
您所需的主题如下所示。但此主题未包含在此库中。

基于框架的驱动程序的 WDM 概念

内核模式驱动程序框架 (KMDF) 是 Microsoft Windows 驱动模型 (WDM) 接口的包装。尽管该框架简化了许多 WDM 概念并完全屏蔽了其他概念,使您无需处理它们,但您仍应了解 WDM 驱动程序的一些基本概念。具体而言,您应了解驱动程序类型驱动程序堆栈设备堆栈以及 I/O 请求数据包

驱动程序类型

基于 Windows 的驱动程序分为三种类型:总线驱动程序功能驱动程序筛选器驱动程序。总线驱动程序检测插入到父级总线中的子设备,并报告这些子设备的特征,从而支持 I/O 总线。(此活动称为总线枚举。)功能驱动程序控制设备和总线的 I/O 操作。筛选器驱动程序接收、审查并可能修改在用户应用程序和驱动程序之间或在各驱动程序之间传输的数据。

总线驱动程序实质上也是枚举子级的功能驱动程序。驱动程序在枚举总线上的子设备时充当“总线驱动程序”。在其他情况下,上述相同驱动程序在处理访问总线适配器的硬件的 I/O 操作时充当总线的“功能驱动程序”。

驱动程序堆栈

在 Windows 操作系统中,WDM 驱动程序按名为驱动程序堆栈 的垂直调用序列分层。在 I/O 请求已通过操作系统的 I/O 管理器之后,堆栈中位于最顶层的驱动程序通常会从用户应用程序接收这些请求。较低层的驱动程序通常与计算机硬件通信。

简单的驱动程序堆栈包括位于堆栈底部的总线驱动程序,该驱动程序用于处理总线特定的 I/O 操作,并枚举与总线相连的子设备。总线驱动程序上方通常有一个或多个设备特定的功能驱动程序。这些功能驱动程序处理与总线相连的设备的 I/O 操作。筛选器驱动程序可位于功能驱动程序上方,也可以位于总线驱动程序和功能驱动程序之间。正在运行的系统具有多个驱动程序堆栈,可支持不同类型的设备。

设备堆栈

每个驱动程序堆栈都支持一个或多个设备堆栈。设备堆栈是一组根据 WDM 定义的 DEVICE_OBJECT 结构创建的设备对象。每个设备堆栈都表示一台设备。每个驱动程序为其每台设备创建一个设备对象,并将每个设备对象附加到设备堆栈。当插入和拔出设备以及每当重新引导系统时,将创建和删除设备堆栈。

总线驱动程序在检测到已插入或拔出子设备时会通知即插即用 (PnP) 管理器。作为响应,PnP 管理器要求总线驱动程序为连接到父设备(即总线)的每台子设备创建一个物理设备对象 (PDO)。PDO 随即成为设备堆栈的底部。

接下来,PnP 管理器加载功能驱动程序和筛选器驱动程序以便支持每台设备(如果尚未加载这些驱动程序),然后 PnP 管理器会调用这些驱动程序,使每个驱动程序都可以创建一个设备对象并将该设备对象添加到设备堆栈的顶层。功能驱动程序创建函数设备对象 (FDO),筛选器驱动程序创建筛选器设备对象(筛选器 DO)。

I/O 管理器将 I/O 请求发送到设备的驱动程序时,它会将该请求传递到创建设备堆栈中的顶层设备对象的驱动程序。如果该驱动程序要求 I/O 管理器将请求传递到下一层驱动程序,I/O 管理器将使用设备堆栈确定下一层驱动程序。(下一层驱动程序即为创建下一层设备对象的驱动程序。)

内核模式驱动程序框架为每个 WDM 设备对象都创建了一个框架设备对象。基于框架的驱动程序访问这些框架设备对象,而不是访问 WDM 设备对象。

I/O 请求数据包

I/O 管理器通过创建 I/O 请求数据包 (IRP),将应用程序的 I/O 请求发送到驱动程序。IRP 可包含执行 I/O 操作(如读/写操作)的请求或执行 I/O 控制 (IOCTL) 操作(如返回状态)的请求。此外,PnP 管理器还会创建表示驱动程序必须执行的 PnP 和电源管理操作的 IRP,并将这些 IRP 发送到驱动程序。

I/O 管理器通常在用户应用程序请求读取或写入操作时创建读取或写入 IRP。I/O 管理器将 IRP 传递到位于驱动程序堆栈顶层的驱动程序,该驱动程序或者为该请求提供服务,或者将该请求传递到下一层驱动程序。某些请求会传输到堆栈底部,而某些请求则完全由较高层的驱动程序处理。

每当驱动程序接收 IRP 时,该程序还会接收一个指向某个设备对象的指针,该设备对象表示必须处理该操作的设备。因此,驱动程序堆栈中的驱动程序使用设备对象确定应将特定请求传输到插入的哪个设备。

基于框架的驱动程序通常不会直接访问 IRP。内核模式驱动程序框架将表示读取、写入和设备 I/O 控制操作的 WDM IRP 转换为驱动程序在 I/O 队列中接收的框架请求对象。框架在内部处理 PnP 和电源管理 IRP,并使用事件回调函数向驱动程序发送 PnP 和电源事件通知。

 

 

社区附加资源

显示:
© 2015 Microsoft