Partilhar via


Erros na manipulação de operações de limpeza e fechamento

Alguns drivers não conseguem distinguir as tarefas necessárias nas rotinas DispatchCleanup e DispatchClose . O gestor de E/S chama a rotina DispatchCleanup de um driver quando o último handle de 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 despacho, 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 de sua rotina DispatchClose ser chamada. Por exemplo, um chamador de modo de usuário pode fechar o identificador de arquivo enquanto uma solicitação de 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 gerenciador de E/S chame sua rotina DispatchClose , poderão ocorrer referências de ponteiro inválidas e outros problemas.