支持在功能驱动程序中进行 PnP 和电源管理
函数驱动程序 控制设备的操作,因此它们访问设备硬件。 这些驱动程序必须支持 PnP 和电源管理操作,并且通常在 创建设备对象时注册多个事件回调函数。
通常,函数驱动程序的 EvtDriverDeviceAdd 事件回调函数调用 WdfDeviceInitSetPnpPowerEventCallbacks 来注册以下回调函数:
EvtDevicePrepareHardware,它将设备的系统分配资源传送到驱动程序。 驱动程序可以执行一些操作,例如将设备的总线相对内存映射到处理器的虚拟地址空间,以便驱动程序可以访问硬件。
EvtDeviceD0Entry,执行驱动程序设备每次进入其工作状态时所需的操作,例如加载固件 (D0) 状态。
EvtDeviceD0Exit:每次驱动程序的设备离开其工作 (D0) 状态并进入低功耗状态时,执行所需的操作。
EvtDeviceReleaseHardware,用于释放 EvtDevicePrepareHardware 分配的任何系统资源。
与所有框架定义的回调函数一样,上述列表中的回调函数也是可选的。 仅当驱动程序需要时,才需要提供它们。
函数驱动程序可以调用 WdfDeviceSetPnpCapabilities 和 WdfDeviceSetPowerCapabilities ,以向操作系统报告设备的 PnP 和电源管理功能。
通常,将框架的 电源托管 I/O 队列 用于大多数 I/O 请求。 如果 I/O 队列由电源管理,则框架仅当其设备处于工作状态 (D0) 状态时,才会向驱动程序传递请求。 有关电源管理的 I/O 队列的详细信息,请参阅 I/O 队列的电源管理。
通常,设备的函数驱动程序是驱动程序堆栈的 电源策略所有者 。 电源策略所有者确定 设备的相应设备电源状态 ,并在设备的电源状态发生更改时向设备的驱动程序堆栈发送请求。 对于基于框架的驱动程序,框架负责处理此责任,因此无需在驱动程序中提供代码即可请求更改设备的电源状态。
电源策略所有者有两个额外的责任:它控制设备在空闲时进入低功耗状态的能力,以及系统保持 工作状态 (S0) 状态;控制设备在检测到来自低功耗状态的外部事件时生成唤醒信号的能力。 如果设备具有空闲或唤醒功能,则函数驱动程序可以提供其他回调函数。 有关电源策略所有者的职责的详细信息,请参阅 电源策略所有权。