支持在功能驱动程序中进行 PnP 和电源管理

函数驱动程序 控制设备的操作,因此它们访问设备硬件。 这些驱动程序必须支持 PnP 和电源管理操作,并且通常在创建设备对象时注册 多个事件回调函数

通常,函数驱动程序的 EvtDriverDeviceAdd 事件回调函数调用 WdfDeviceInitSetPnpPowerEventCallbacks 以注册以下回调函数:

  • EvtDevicePrepareHardware,用于将设备的系统分配资源传送给驱动程序。 驱动程序可以执行一些操作,例如将设备的总线相对内存映射到处理器的虚拟地址空间,使驱动程序可以访问硬件。

  • EvtDeviceD0Entry,它执行每次驱动程序设备进入其工作状态时所需的操作,例如加载固件 (D0) 状态。

  • EvtDeviceD0Exit,它执行每次驱动程序设备离开工作状态 (D0) 进入低功率状态时所需的操作。

  • EvtDeviceReleaseHardware,释放 EvtDevicePrepareHardware 分配的任何系统资源。

与所有框架定义的回调函数一样,上述列表中的回调函数是可选的。 只有在驱动程序需要它们时,才需要提供它们。

函数驱动程序可以调用 WdfDeviceSetPnpCapabilitiesWdfDeviceSetPowerCapabilities 向操作系统报告设备的 PnP 和电源管理功能。

通常,你将对大多数 I/O 请求使用框架的电源托管 I/O 队列。 如果 I/O 队列由电源管理,则框架仅在其设备的工作状态为 D0 (时) 请求。 有关电源管理 I/O 队列的信息,请参阅 I/O 队列的电源管理

通常,设备的函数驱动程序是 驱动程序堆栈 的电源策略所有者。 电源策略所有者 确定设备的适当 设备电源状态,每当设备的电源状态应更改时,都会将请求发送到设备的驱动程序堆栈。 对于基于框架的驱动程序,框架将处理此责任,因此,不需要在驱动程序中提供代码来请求设备电源状态的更改。

电源策略所有者还有两项额外的责任:控制设备在空闲时进入低功率状态的能力,并且系统保持工作 状态 (S0) 状态,以及控制设备在检测到来自低功率状态的外部事件时生成唤醒信号的能力。 如果设备具有空闲或唤醒功能,则函数驱动程序可以提供其他回调函数。 有关电源策略所有者的职责详细信息,请参阅 Power Policy 所有权