在 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_DEVICE 和 IRP_MN_STOP_DEVICE 请求。 重新配置硬件资源后,PnP 管理器会指示驱动程序通过发送 IRP_MN_START_DEVICE 请求来重启设备。 有关处理停止 IRP 的信息,请参阅 停止设备。 (启动配置设备的驱动程序可以在设备启动前接收 IRP_MN_QUERY_STOP_DEVICE 和 IRP_MN_STOP_DEVICE 请求,尽管上图中未显示此步骤。
在 Windows 98/Me 上,PnP 管理器还会在禁用设备时发送 IRP_MN_QUERY_STOP_DEVICE 和 IRP_MN_STOP_DEVICE 请求。 这些系统上的驱动程序在启动失败后也会收到 IRP_MN_STOP_DEVICE 请求。
当 PnP 设备正在被物理移除或已被移除时,PnP 管理器会向设备的驱动程序发送各种移除 IRP,指示它们删除设备的软件表示(如设备对象等)。 有关处理删除 IRP 的信息,请参阅 “删除设备”。
在删除驱动程序的所有设备之后,PnP 管理器会调用驱动程序的 Unload 例程并卸载驱动程序。