Share via


Erros ao lidar com operações de limpeza e fechamento

Alguns drivers não conseguem distinguir as tarefas necessárias nas rotinas DispatchCleanup e DispatchClose . O gerente de E/S chama a rotina DispatchCleanup de um driver quando o último identificador para um objeto de arquivo é fechado. A rotina DispatchClose é chamada quando a última referência é liberada do objeto de arquivo. Um driver não deve tentar liberar recursos em sua rotina DispatchCleanup que estão anexados a um objeto de arquivo ou podem ser usados por outras rotinas DispatchXxx.

Ao chamar rotinas de expedição, o gerenciador de E/S mantém uma referência ao objeto de arquivo para chamadas de E/S normais. Como resultado, um driver pode receber solicitações de E/S para um objeto de arquivo depois que sua rotina DispatchCleanup tiver sido chamada, mas antes que sua rotina DispatchClose seja chamada. Por exemplo, um chamador de modo de usuário pode fechar o identificador de arquivo enquanto uma solicitação do gerenciador de E/S está em andamento de outro thread. Se o driver tiver excluído ou liberado os recursos necessários antes que o gerente de E/S chame sua rotina DispatchClose , podem ocorrer referências de ponteiro inválidas e outros problemas.