使用 WDF 开发驱动程序

本主题简要概述了将用于开发Kernel-Mode驱动程序框架 (KMDF) 驱动程序的框架对象。 除非另有说明,否则你将使用相同的对象从 UMDF 版本 2 开始开发User-Mode驱动程序框架 (UMDF) 驱动程序。

Windows 驱动程序框架 (WDF) 驱动程序由 DriverEntry 例程 和一组事件回调函数组成,这些函数由基于框架的 驱动程序使用的 Windows 驱动程序框架对象 定义。 回调函数调用框架导出的对象方法。 Windows 驱动程序工具包 (WDK) 包含示例 WDF 驱动程序,这些驱动程序演示如何实现驱动程序的事件回调函数。 可以从 Windows 开发人员中心 - 硬件下载这些示例。 有关可用的示例的信息,请参阅 示例 KMDF 驱动程序示例 UMDF 驱动程序

创建 WDF 驱动程序时,通常会执行以下操作:

  • 使用 框架驱动程序对象 来表示驱动程序。

    驱动程序的 DriverEntry 例程 必须调用 WdfDriverCreate 来创建表示驱动程序的框架驱动程序对象。 WdfDriverCreate 方法还会注册驱动程序的 EvtDriverDeviceAdd 回调函数,每次即插即用 (PnP) 管理器报告驱动程序支持的设备是否存在时,框架都会调用该函数。

  • 使用 框架设备对象 支持驱动程序中的 PnP 和电源管理。

    所有驱动程序都必须调用 WdfDeviceCreate ,以便为驱动程序支持的每个设备创建框架设备对象。 设备可以是插入计算机的硬件,也可以是仅限软件的设备。 框架设备对象支持 PnP 和电源管理操作,驱动程序可以注册事件回调函数,以便在设备进入或离开其工作状态时通知驱动程序。

    有关框架设备对象的详细信息,请参阅 在驱动程序中支持 PnP 和电源管理

  • 使用 框架队列对象框架请求对象 来支持驱动程序中的 I/O 操作。

    接收来自应用程序或其他驱动程序的读取、写入或设备 I/O 控制请求的所有驱动程序都必须调用 WdfIoQueueCreate ,以创建表示 I/O 队列的框架队列对象。 通常,驱动程序为每个 I/O 队列注册一个或多个 请求处理程序 。 当 I/O 管理器向驱动程序发送 I/O 请求时,框架为该请求创建框架请求对象,将请求对象置于 I/O 队列中,并调用驱动程序的请求处理程序之一,以通知驱动程序请求可用。 驱动程序获取 I/O 请求,并且可以重新排队、完成、取消或转发请求。

    有关使用框架的队列对象和请求对象的详细信息,请参阅 框架队列对象框架请求对象

  • 使用 框架中断对象 处理设备中断。

    处理设备中断的驱动程序必须调用 WdfInterruptCreate ,以便为每个中断创建框架中断对象并注册回调函数。 这些回调函数启用和禁用中断,并充当中断 (ISR) 和延迟过程调用 (DPC) 的中断服务例程。

    有关框架中断对象的详细信息,请参阅 处理硬件中断

  • KMDF 驱动程序可以使用框架的 DMA 启用程序对象DMA 事务对象 来处理设备的直接内存访问 (DMA) 操作。

    如果 KMDF 驱动程序的设备支持 DMA 操作,则驱动程序应调用 WdfDmaEnablerCreate 来创建 DMA 启用器对象,并调用 WdfDmaTransactionCreate 来创建一个或多个 DMA 事务对象。 DMA 事务对象定义 EvtProgramDma 回调函数,该函数对设备硬件进行编程以执行 DMA 操作。

    有关支持 DMA 操作的详细信息,请参阅 在基于框架的驱动程序中处理 DMA 操作

  • 使用框架的 I/O 目标对象 将 I/O 请求发送到其他驱动程序。

    若要将 I/O 请求传递给其他驱动程序 (通常是驱动程序堆栈) 中的下一个较低驱动程序,驱动程序会将请求发送到 I/O 目标对象。

    有关 I/O 目标对象的详细信息,请参阅 使用 I/O 目标

  • KMDF 驱动程序可以使用框架的 WMI 提供程序对象WMI 实例对象 来支持 Windows Management Instrumentation (WMI) 功能。

    大多数 KMDF 驱动程序应支持 WMI,并且应调用 WdfWmiInstanceCreate 来注册发送或接收 WMI 数据的回调函数。

    有关 WMI 的详细信息,请参阅 在基于框架的驱动程序中支持 WMI

  • 使用框架的同步功能。

    所有驱动程序都必须了解多处理器同步问题,并且应使用框架提供的 同步技术

  • 使用框架提供的其他对象和功能。

    框架提供驱动程序可以使用的其他对象。 有关这些对象的详细信息,请参阅 WDF 支持对象