PnP 驱动程序的 Unload 例程
PnP 驱动程序必须具有 Unload 例程,该例程可删除由 DriverEntry 例程创建的任何特定于驱动程序的资源,例如内存、线程和事件。 如果没有特定于驱动程序的资源要删除,驱动程序仍必须具有 Unload 例程,但它只能返回。
删除驱动程序的所有设备后,可以随时调用驱动程序的 Unload 例程。 PnP 管理器在 IRQL = PASSIVE_LEVEL 的系统线程上下文中调用驱动程序的 Unload 例程。
PnP 驱动程序释放特定于设备的资源和设备对象,以响应 PnP 设备删除 IRP。 PnP 管理器代表它枚举的每个 PnP 设备以及驱动程序使用 IoReportDetectedDevice 报告的任何根枚举旧设备发送这些 IRP。
因此,PnP 驱动程序的 Unload 例程通常很简单,通常仅由 返回 语句组成。 但是,如果驱动程序在其 DriverEntry 例程中分配了任何驱动程序范围的资源,则必须在其 Unload 例程中解除分配这些资源,除非它已经这样做。 通常,卸载 PnP 驱动程序的过程是同步操作。
I/O 管理器释放驱动程序对象以及驱动程序使用 IoAllocateDriverObjectExtension 分配的任何驱动程序对象扩展。