Compartilhar via


Falha em uma operação de E/S em uma rotina de retorno de chamada do Postoperation

A rotina de retorno de chamada do postoperation de um driver de minifiltro pode falhar em uma operação de E/S bem-sucedida, mas simplesmente falhar em uma operação de E/S não desfaz o efeito da operação. O driver de minifiltro é responsável por executar qualquer processamento necessário para desfazer a operação.

Por exemplo, a rotina de retorno de chamada pós-criação de um driver de minifiltro pode falhar em uma operação de IRP_MJ_CREATE bem-sucedida executando as seguintes etapas:

  1. Chamar FltCancelFileOpen para fechar o arquivo que foi criado ou aberto pela operação de criação. Observe que FltCancelFileOpen não desfaz nenhuma modificação no arquivo. Por exemplo, FltCancelFileOpen não exclui um arquivo recém-criado nem restaura um arquivo truncado para seu tamanho anterior.

  2. Definindo o campo IoStatus.Status da estrutura de dados de retorno de chamada como o valor final NTSTATUS da operação. Esse valor deve ser um valor NTSTATUS de erro válido, como STATUS_ACCESS_DENIED.

  3. Definindo o campo IoStatus.Information da estrutura de dados de retorno de chamada como zero.

  4. Retornando FLT_POSTOP_FINISHED_PROCESSING.

Ao definir o campo IoStatus.Status da estrutura de dados de retorno de chamada para o valor final NTSTATUS da operação, o driver de minifiltro deve especificar um valor NTSTATUS de erro válido. Observe que os drivers de minifiltro não podem especificar STATUS_FLT_DISALLOW_FAST_IO; somente o gerenciador de filtros pode usar esse valor NTSTATUS.

Os chamadores de FltCancelFileOpen devem estar em execução em IRQL <= APC_LEVEL. No entanto, um driver de minifiltro pode chamar essa rotina com segurança de uma rotina de retorno de chamada pós-criação, pois, para operações de IRP_MJ_CREATE, a rotina de retorno de chamada de postoperation é chamada em IRQL = PASSIVE_LEVEL, no contexto do thread que originou a operação de criação.