Compartilhar 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 são anexados a um objeto de arquivo ou podem ser usados por outras rotinas de ExpediçãoXxx.

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 que sua rotina DispatchClose seja chamada. Por exemplo, um chamador em modo de usuário pode fechar o identificador de arquivo enquanto outra thread está processando uma solicitação do gerenciador de E/S. Se o driver tiver excluído ou liberado os recursos necessários antes que o gerenciador de E/S chame sua rotina DispatchClose, referências de ponteiro inválidas e outros problemas poderão ocorrer.