启动设备

PnP 管理器向IRP_MN_START_DEVICE发送请求,以启动新枚举的设备或重启已停止进行资源重新平衡的现有设备。

函数驱动程序和筛选器驱动程序必须设置 IoCompletion 例程,将 IRP_MN_START_DEVICE 请求向下传递到设备堆栈,并推迟其启动操作,直到所有较低驱动程序完成 IRP。 父总线驱动程序(设备堆栈中的底层驱动程序)必须是第一个在设备上执行启动操作,然后其他驱动程序才能访问设备。

为了确保启动操作的正确排序,Windows 2000 及更高版本的 Windows 上的 PnP 管理器推迟公开设备接口,并阻止为设备创建请求,直到启动 IRP 成功。

如果设备的驱动程序未通过 IRP_MN_START_DEVICE 请求,PnP 管理器将向 Windows 2000 及更高版本的设备堆栈 (发送 IRP_MN_REMOVE_DEVICE 请求Windows) 。 为了响应此 IRP,设备的驱动程序会撤消其启动操作 (如果它们成功启动 IRP) ,撤消其 AddDevice 操作,然后从设备堆栈中分离。 PnP 管理器将此类设备标记为"启动失败"。

本部分涵盖了以下主题:

在函数驱动程序中启动设备

在筛选器驱动程序中启动设备

在总线驱动程序中启动设备

启动设备的设计指导原则