Função IoCancelFileOpen (ntddk.h)
A rotina de IoCancelFileOpen pode ser usada por um driver de filtro do sistema de arquivos para fechar um arquivo aberto por um driver do sistema de arquivos na pilha de dispositivos do driver de filtro.
Sintaxe
void IoCancelFileOpen(
[in] PDEVICE_OBJECT DeviceObject,
[in] PFILE_OBJECT FileObject
);
Parâmetros
[in] DeviceObject
Ponteiro para a parte superior da pilha do dispositivo imediatamente abaixo do objeto de dispositivo do driver de filtro.
[in] FileObject
Ponteiro para o objeto de arquivo para que o arquivo seja fechado.
Valor de retorno
Nenhum
Observações
Se um driver de filtro do sistema de arquivos determinar que uma solicitação de abertura de arquivo ou criação de arquivo deve falhar depois que os drivers de nível inferior já tiverem concluído a solicitação com STATUS_SUCCESS, ele poderá usar IoCancelFileOpen para fechar o arquivo aberto pelos drivers de nível inferior.
Embora STATUS_REPARSE seja um valor NTSTATUS de êxito, não é necessário chamar IoCancelFileOpen para uma operação de criação que foi concluída com STATUS_REPARSE, pois esse valor de status indica que o arquivo não foi aberto com êxito.
Uma chamada bem-sucedida para IoCancelFileOpen tem o seguinte efeito: Para minifiltros e filtros herdados acima do chamador na pilha do sistema de arquivos, 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 fechado.
Observe que IoCancelFileOpen não desfaz nenhuma modificação no arquivo. Por exemplo, IoCancelFileOpen não exclui um arquivo recém-criado nem restaura um arquivo que foi substituído ou substituído em seu estado anterior.
Um exemplo típico é o seguinte:
Existe um driver de filtro entre um driver de filtro de nível superior e um driver de sistema de arquivos de nível inferior.
O driver de filtro passa uma solicitação IRP_MJ_CREATE na pilha do dispositivo para o driver do sistema de arquivos e o driver do sistema de arquivos conclui a solicitação IRP_MJ_CREATE com STATUS_SUCCESS de status.
Antes que o driver de filtro conclua a solicitação de criação, ele determina que o arquivo deve ser fechado.
O driver de filtro usa IoCancelFileOpen para fechar o arquivo aberto pelo driver do sistema de arquivos.
Depois de chamar IoCancelFileOpen, o driver de filtro deve concluir a solicitação de criação com um código de erro apropriado, como STATUS_UNSUCCESSFUL ou STATUS_ACCESS_DENIED. Além disso, ele deve definir o campo Irp->IoStatus.Information como zero.
IoCancelFileOpen deve ser chamado antes que os identificadores sejam criados para o arquivo. Os chamadores podem verificar o Flags membro da estrutura FILE_OBJECT à 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 IoCancelFileOpen.
IoCancelFileOpen define o sinalizador FO_FILE_OPEN_CANCELLED no membro sinalizadores do objeto de arquivo que FileObject aponta. Esse sinalizador indica que a solicitação IRP_MJ_CREATE foi cancelada e uma solicitação 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 relançada, ou seja, STATUS_REPARSE não poderá ser retornada pelo driver de filtro herdado se tiver chamado a rotina de IoCreateFileOpen.
Os minifiltros devem usar FltCancelFileOpen em vez de IoCancelFileOpen.
Requisitos
Requisito | Valor |
---|---|
de cliente com suporte mínimo | Essa rotina está disponível no Microsoft Windows 2000 e posterior. |
da Plataforma de Destino | Universal |
cabeçalho | ntddk.h (incluem Ntddk.h, Ntifs.h, Fltkernel.h) |
biblioteca | NtosKrnl.lib |
de DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |