当驱动程序被替换或删除驱动程序服务的所有设备时,作系统将卸载驱动程序。 在驱动程序处理IRP_MN_REMOVE_DEVICE请求后,如果驱动程序不再有设备对象,PnP 管理器将调用 PnP 驱动程序的Unload例程。
卸载序列开始时,I/O 管理器或 PnP 管理器将驱动程序对象及其设备对象标记为“Unload Pending”。 将驱动程序标记为“卸载挂起”后,任何附加驱动程序都不能连接到该驱动,也不能对驱动的设备对象进行任何其他引用。 驱动程序可以完成未完成的 IRP,但系统不会向驱动程序发送任何新的 IRP。
当以下所有情况都为 true 时,I/O 管理器调用驱动程序的 Unload 例程:
- 驱动程序创建的设备对象不再有任何引用。 换句话说,任何与基础设备关联的文件都不能被打开,任何驱动程序的设备对象也不能有挂起的 IRP。 
- 其他任何驱动程序都未附加到此驱动程序。 
- 驱动程序已调用 IoUnregisterPlugPlayNotification 来注销以前注册的所有 PnP 通知。 
请注意,如果驱动程序的 DriverEntry 例程返回失败状态,则不会调用 Unload 例程。 在这种情况下,I/O 管理器只需释放驱动程序占用的内存空间。
PnP 管理器和 I/O 管理器都不会在系统关闭时调用 Unload 例程。 必须执行关闭处理的驱动程序应注册 DispatchShutdown 例程。