早期驱动程序和高级文件系统驱动程序(不处理 PnP 设备删除请求)必须释放资源、删除设备对象以及从 其 Unload 例程中的设备堆栈分离。
如果尚未这样做,则旧版设备驱动程序在其 Unload 例程中应做的第一件事是禁用来自设备的中断。 否则,可能会调用其 ISR 来处理设备中断,而 Unload 例程正在释放 ISR 需要处理中断的设备扩展中的资源。 即使 ISR 在这些情况下成功运行,ISR 队列中的 DpcForIsr 或 CustomDpc 例程,以及可能其他在 IRQL >= DISPATCH_LEVEL 级别运行的驱动程序例程,都会在 Unload 例程重新获得控制之前执行,这增加了 Unload 例程删除另一个驱动程序例程引用的资源的可能性。 有关详细信息,请参阅 “管理硬件优先级 ”。
禁用中断后,文件系统和旧驱动程序必须释放资源和对象。 有关详细信息,请参阅以下两部分: