使用自我管理的 I/O

大多数基于框架的驱动程序利用框架的 PnP 和电源管理功能来获取它们支持的设备。 换句话说,大多数基于框架的驱动程序都允许框架通过执行以下所有操作来管理设备的 PnP 和电源状态:

但是,一些基于框架的驱动程序需要更深入地了解其设备的状态,包括以下情况下的驱动程序:

  • 驱动程序执行的操作不由驱动程序从框架 I/O 队列接收的一组 I/O 请求决定。

  • 驱动程序与较旧的非框架驱动程序通信,并直接处理 WDM 接口。

  • 驱动程序接收的 I/O 请求不能分为两组:要求设备处于其工作状态的 I/O 请求和不工作状态的 I/O 请求。

大多数驱动程序不是上述情况之一,但如果驱动程序是,它可能需要更直接地控制设备的 PnP 和电源管理操作。 此类驱动程序可以使用 自我管理的 I/O。 使用自我管理的 I/O 意味着,每当设备插入或拔出电源时,以及设备暂时停止时,) ,通过一组回调函数通知驱动程序 (。

请注意,驱动程序可以使用自托管 I/O,并且仍然可以将框架的 I/O 队列用作电源管理的队列。 例如,驱动程序可以将框架的 I/O 队列(而不是电源托管)与一组自我管理的 I/O 回调函数配合使用。

若要使用自托管 I/O,驱动程序会在调用 WdfDeviceInitSetPnpPowerEventCallbacks 时注册一组额外的事件回调函数。 这些事件回调函数包括:

当设备首次进入其工作 (D0) 状态时,框架会调用驱动程序的 EvtDeviceSelfManagedIoInit 回调函数。 每次用户将设备插入系统以及每次重启系统时,都会发生这种情况。

驱动程序必须停止设备的 I/O 操作有三种情况:设备即将进入低功耗状态、即将删除或已意外删除。 以下列表详细检查了其中每种情况:

有关框架调用驱动程序的事件回调函数的顺序的详细信息,请参阅 PnP 和电源管理方案

尽管很少必要,但该框架允许驱动程序通过访问 框架中的状态机来更好地控制设备的 PnP 和电源状态。