非 PnP 驱动程序的 Unload 例程

不处理 PnP 设备删除请求的早期驱动程序和高级文件系统驱动程序必须在其 Unload 例程中释放资源、删除设备对象以及从设备堆栈分离。

如果尚未执行此操作,旧设备驱动程序在其 Unload 例程中应做的第一件事是禁用来自设备的中断。 否则,当 Unload 例程释放 ISR 处理中断所需的设备扩展中的资源时,可能会调用其 ISR 来处理设备中断。 即使 ISR 在这些情况下成功运行,ISR 排队的 DpcForIsrCustomDpc 例程,以及可能以 IRQL >= DISPATCH_LEVEL 运行的其他驱动程序例程,也会在 Unload 例程重新获得控制权之前执行,从而增加 Unload 例程删除另一个驱动程序例程引用的资源的可能性。 有关详细信息 ,请参阅管理硬件优先级

禁用中断后,文件系统和旧版驱动程序必须释放资源和对象。 有关详细信息,请参阅以下两个部分:

释放驱动程序分配的资源

释放设备和控制器对象