IRP_MN_REMOVE_DEVICE

所有 PnP 驱动程序都必须处理此 IRP。

0x02

主代码

IRP_MJ_PNP

发送时

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

在 Windows 2000 及更高版本的系统上,如果设备堆栈中的某个驱动程序失败,则 PnP 管理器还会发送此 IRP,如果设备堆栈中的某个驱动程序对设备发出 IRP_MN_START_DEVICE 请求失败。

对于有条不紊的设备删除,PnP 管理器在删除 IRP 之前发送 IRP_MN_QUERY_REMOVE_DEVICE 。 在这种情况下,当删除 IRP 到达时,设备将处于删除挂起状态。 对于在 Microsoft Windows 2000 或更高版本上意外删除设备,PnP 管理器会在删除 IRP 之前发送 IRP_MN_SURPRISE_REMOVAL 。 在这种情况下,当删除 IRP 到达时,设备处于意外删除状态。 驱动程序还可以在设备启动之前收到删除 IRP。 在这种情况下,当 IRP 到达时,设备处于非启动状态。

PnP 管理器在 IRQL PASSIVE_LEVEL系统线程上下文中发送此 IRP。

输入参数

输出参数

I/O 状态块

驱动程序必须将 Irp-IoStatus.Status> 设置为 STATUS_SUCCESS。 驱动程序不得使此 IRP 失败。

Operation

此 IRP 首先由设备堆栈顶部的驱动程序处理,然后由堆栈中每个较低的驱动程序处理。

为了响应此 IRP,驱动程序执行诸如关闭设备电源、删除设备的软件表示 (设备对象等任务,) ,以及释放设备的任何资源。

有关处理此 IRP 的详细信息,请参阅 处理IRP_MN_REMOVE_DEVICE请求。 有关支持设备删除的一般信息,请参阅 删除设备

发送此 IRP

预留给系统使用。 驱动程序不得发送此 IRP。

如果总线驱动程序检测到其子设备的一 (个或多个) (子 PDO) 已被物理从计算机中删除,则总线驱动程序调用 IoInvalidateDeviceRelations 以向 PnP 管理器报告更改。 然后,PnP 管理器会针对任何已消失的设备发送删除 IRP。

要求

标头

Wdm.h(包括 Wdm.h、Ntddk.h 或 Ntifs.h)

另请参阅

IoInvalidateDeviceRelations

IoRegisterPlugPlayNotification

IRP_MN_CANCEL_REMOVE_DEVICE

IRP_MN_QUERY_REMOVE_DEVICE

IRP_MN_SURPRISE_REMOVAL