PnP 设备的状态转换

在 PnP 系统上,设备在配置、启动、可能停止以重新平衡资源以及可能被删除时会转换各种 PnP 状态。 本部分提供 PnP 设备状态的概述。 概述是驱动程序中所需的大部分 PnP 支持的路线图。 本文档的其他部分详细介绍了每种状态转换。

下图显示了设备的 PnP 状态,以及设备如何从一种状态转换为另一种状态。

从即插即用的角度说明设备状态的示意图。

从上图左上角开始,PnP 设备实际存在于系统中,因为用户刚刚插入了设备,或者设备在启动时存在。 系统软件尚不知道该设备。

若要开始设备的软件配置,PnP 管理器和父总线驱动程序会枚举设备。 PnP 管理器(可能来自用户模式组件的帮助)标识设备的驱动程序,包括函数驱动程序和任何可选的筛选器驱动程序。 如果尚未加载驱动程序,PnP 管理器会调用每个驱动程序的 DriverEntry 例程。 有关报告和枚举 PnP 设备的详细信息,请参阅 将 PnP 设备添加到正在运行的系统

初始化驱动程序后,它必须准备好初始化其设备。 PnP 管理器为驱动程序控制的每个设备调用驱动程序的 AddDevice 例程。

当驱动程序收到来自 PnP 管理器 的IRP_MN_START_DEVICE 请求时,驱动程序会启动设备并准备好处理设备的 I/O 请求。 有关处理 IRP_MN_START_DEVICE 请求的信息,请参阅 启动设备

如果 PnP 管理器必须重新配置活动设备的硬件资源,则会向设备的驱动程序发送 IRP_MN_QUERY_STOP_DEVICEIRP_MN_STOP_DEVICE 请求。 重新配置硬件资源后,PnP 管理器会通过发送 IRP_MN_START_DEVICE 请求来指示驱动程序重启设备。 有关处理停止 IRP 的信息,请参阅 停止设备。 (启动配置设备的驱动程序可以在设备启动之前接收 IRP_MN_QUERY_STOP_DEVICEIRP_MN_STOP_DEVICE 请求,尽管上图中未显示此步骤。)

在 Windows 98/Me 上,禁用设备时,PnP 管理器还会发送 IRP_MN_QUERY_STOP_DEVICEIRP_MN_STOP_DEVICE 请求。 这些系统上的驱动程序在启动失败后也会收到 IRP_MN_STOP_DEVICE 请求。

当 PnP 设备正在从系统中物理删除或已被删除时,PnP 管理器会将各种删除 IRP 发送到设备的驱动程序,指示它们删除设备的软件表示 (设备对象,等等) 。 有关处理删除 IRP 的信息,请参阅 删除设备

在删除驱动程序的所有设备之后的某个时刻,PnP 管理器会调用驱动程序的 Unload 例程并卸载驱动程序。