处理 IRP_MN_REMOVE_DEVICE 请求

PnP 管理器使用此 IRP 指示驱动程序删除设备的软件表示形式 (设备对象等) 。 PnP 管理器在以下情况下会发送此 IRP:当设备以有序方式删除时, ((例如,在拔出或弹出硬件程序) 中由用户启动), (用户在未事先警告) 的情况下从槽中拉取设备,或者当用户请求更新驱动程序时,会意外发送此 IRP。

在 Windows 2000 及更高系统上,当设备管理器禁用设备时,PnP 管理器会发送此 IRP。 在 Windows 98/Me 上,PnP 管理器改为发送停止 IRP。 有关详细信息 ,请参阅停止设备

在将此 IRP 发送到设备的驱动程序之前,PnP 管理器执行以下操作:

  • 向设备的子级发送 IRP_MN_REMOVE_DEVICE 请求(如果有)。

  • 通知注册的任何用户模式组件和内核模式驱动程序,通知设备正在删除。 PnP 管理器在设备的句柄上调用为目标设备通知注册的任何用户模式组件,并调用为 EventCategoryTargetDeviceChange 注册的任何内核模式驱动程序。

  • (在 Windows 2000 及更高版本的系统上) 如果文件系统装载在设备上,PnP 管理器会向文件系统和任何文件系统筛选器发送删除请求。 作为响应,文件系统通常会卸载卷。

设备堆栈中的顶部驱动程序处理删除 IRP 并将其传递给下一个较低的驱动程序。 设备的父总线驱动程序是执行其删除设备操作的最后一个驱动程序。 驱动程序在其 DispatchPnP 例程中处理删除 IRP。

在驱动程序返回 IRP_MN_REMOVE_DEVICE 请求成功之前,它必须确保已释放设备的所有资源。 此 IRP 可能是卸载驱动程序之前的最后一次调用。

删除一个设备可能会产生删除一系列其他设备的需求。 PnP 管理器协调从顶层到根设备级别的其他设备对象的删除。

本节介绍以下内容:

在函数驱动程序中删除设备

在筛选器驱动程序中删除设备

在总线驱动程序中删除设备