使用 WDF 开发驱动程序

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

Windows 驱动程序框架(WDF)驱动程序由 DriverEntry 例程 和一组由 Windows Driver Framework 对象定义的事件回调函数组成,这些对象被基于框架的驱动程序 使用。 回调函数调用框架导出的对象方法。 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 支持对象