Compartilhar via


Função FltCancelFileOpen (fltkernel.h)

Um driver de minifiltro pode usar a rotina FltCancelFileOpen para fechar um arquivo recém-aberto ou criado.

Sintaxe

VOID FLTAPI FltCancelFileOpen(
  [in] PFLT_INSTANCE Instance,
  [in] PFILE_OBJECT  FileObject
);

Parâmetros

[in] Instance

Ponteiro de instância opaco para o chamador. Esse parâmetro é necessário e não pode ser NULL.

[in] FileObject

Ponteiro de objeto de arquivo para o arquivo. Esse parâmetro é necessário e não pode ser NULL.

Retornar valor

Nenhum

Comentários

Se um driver de minifiltro determinar que uma operação de abertura de arquivo ou de criação de arquivos (IRP_MJ_CREATE) deve falhar depois que o sistema de arquivos já tiver concluído a operação com um valor NTSTATUS de êxito, como STATUS_SUCCESS, o driver de minifiltro poderá chamar FltCancelFileOpen de sua rotina de retorno de chamada pós-criação para fechar o arquivo.

Nota Embora STATUS_REPARSE seja um valor NTSTATUS de êxito, não é necessário chamar FltCancelFileOpen para uma operação de criação que foi concluída com STATUS_REPARSE, pois esse valor status indica que o arquivo não foi aberto com êxito.
 
Uma chamada bem-sucedida para FltCancelFileOpen tem o seguinte efeito: Para minifiltrar drivers e filtros herdados que estão acima do chamador na pilha de instâncias do driver de minifiltro, a solicitação de criação parece ter falhado. Para aqueles que estão abaixo do chamador, o arquivo parece ter sido aberto (ou criado) e, em seguida, fechado.

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 que foi substituído ou substituído ao estado anterior.

FltCancelFileOpen deve ser chamado antes que os identificadores sejam criados para o arquivo. Os chamadores podem marcar o membro Flags da estrutura FILE_OBJECT para a qual o parâmetro FileObject aponta. Se o sinalizador FO_HANDLE_CREATED estiver definido, isso significa que um ou mais identificadores foram criados para o arquivo, portanto, não é seguro chamar FltCancelFileOpen.

FltCancelFileOpen define o sinalizador FO_FILE_OPEN_CANCELLED no membro Flags do objeto de arquivo para o qual FileObject aponta. Esse sinalizador indica que a operação de criação foi cancelada e uma solicitação de fechamento (IRP_MJ_CLOSE) será emitida para esse objeto de arquivo.

Depois que a operação de criação tiver sido cancelada, ela não poderá ser reemissada. Para obter mais informações, consulte FltReissueSynchronousIo.

FltCancelFileOpen só pode ser chamado da rotina de retorno de chamada pós-criação de um driver de minifiltro. Chamar FltCancelFileOpen de uma rotina de retorno de chamada de postoperation (PFLT_POST_OPERATION_CALLBACK) para qualquer outro tipo de operação de E/S ou chamá-la de uma rotina de retorno de chamada de pré-operação (PFLT_PRE_OPERATION_CALLBACK) é um erro de programação.

Os chamadores de FltCancelFileOpen devem estar em execução no PASSIVE_LEVEL IRQL. No entanto, é seguro que os drivers de minifiltro chamem essa rotina de uma rotina de retorno de chamada pós-criação, pois as rotinas de retorno de chamada pós-criação têm a garantia de serem chamadas no IRQL PASSIVE_LEVEL, no contexto do thread que originou a solicitação de IRP_MJ_CREATE.

Requisitos

Requisito Valor
Plataforma de Destino Universal
Cabeçalho fltkernel.h (inclua Fltkernel.h)
Biblioteca FltMgr.lib
DLL Fltmgr.sys
IRQL PASSIVE_LEVEL (consulte a seção Comentários)

Confira também

FILE_OBJECT

FLT_CALLBACK_DATA

FLT_IS_REISSUED_IO

FLT_PARAMETERS para IRP_MJ_CREATE

FltReissueSynchronousIo

FltSetCallbackDataDirty

IRP_MJ_CLOSE

IRP_MJ_CREATE

IoCancelFileOpen

PFLT_POST_OPERATION_CALLBACK

PFLT_PRE_OPERATION_CALLBACK