处理清理和关闭操作时出错

某些驱动程序无法区分 DispatchCleanupDispatchClose 例程中所需的任务。 当文件对象的最后一个句柄关闭时,I/O 管理器调用驱动程序的 DispatchCleanup 例程。 当从文件对象释放最后一个引用时,将调用 DispatchClose 例程。 驱动程序不应尝试释放其 DispatchCleanup 例程中附加到文件对象或可能被其他 DispatchXxx 例程使用的资源。

调用调度例程时,I/O 管理器保留对正常 I/O 调用的文件对象的引用。 因此,驱动程序可以在调用其 DispatchCleanup 例程之后但在调用其 DispatchClose 例程之前接收文件对象的 I/O 请求。 例如,用户模式调用方可能会在另一个线程发出 I/O 管理器请求时关闭文件句柄。 如果驱动程序在 I/O 管理器调用其 DispatchClose 例程之前删除或释放了必要的资源,则可能会出现无效的指针引用和其他问题。