Função FltPerformAsynchronousIo (fltkernel.h)

Um driver de minifiltro chama FltPerformAsynchronousIo para iniciar uma operação de E/S assíncrona.

Sintaxe

NTSTATUS FLTAPI FltPerformAsynchronousIo(
  [in, out] PFLT_CALLBACK_DATA               CallbackData,
  [in]      PFLT_COMPLETED_ASYNC_IO_CALLBACK CallbackRoutine,
  [in]      PVOID                            CallbackContext
);

Parâmetros

[in, out] CallbackData

Ponteiro para uma estrutura de dados de retorno de chamada (FLT_CALLBACK_DATA) alocada por uma chamada anterior para FltAllocateCallbackData. Esse parâmetro é necessário e não pode ser NULL. O chamador é responsável por liberar essa estrutura quando ela não for mais necessária chamando FltFreeCallbackData.

[in] CallbackRoutine

Ponteiro para uma rotina de retorno de chamada do tipo PFLT_COMPLETED_ASYNC_IO_CALLBACK a ser chamada quando a operação de E/S for concluída. Observação: o Gerenciador de Filtros chama essa rotina depois de chamar as rotinas de retorno de chamada de postoperation (PFLT_POST_OPERATION_CALLBACK) de todos os drivers de minifiltro cujas instâncias estão anexadas abaixo da instância inicial (especificada no parâmetro Instance para FltAllocateCallbackData). Esse parâmetro é necessário e não pode ser NULL. O Gerenciador de Filtros sempre chama essa rotina, mesmo quando FltPerformAsynchronousIo falha.

[in] CallbackContext

Ponteiro de contexto a ser passado para a CallbackRoutine Esse parâmetro é opcional e pode ser NULL.

Retornar valor

FltPerformAsynchronousIo retorna STATUS_SUCCESS para indicar que a operação de E/S foi concluída pelo sistema de arquivos e a rotina de retorno de chamada para a qual CallbackRoutine aponta foi chamada. Caso contrário, ele retornará um valor NTSTATUS apropriado, como um dos seguintes:

Código de retorno Descrição
STATUS_FLT_INVALID_ASYNCHRONOUS_REQUEST IRP_MJ_CREATE solicitações não podem ser executadas de forma assíncrona. Este é um código de erro.
STATUS_PENDING A operação retornou STATUS_PENDING. O Gerenciador de Filtros chamará a rotina de retorno de chamada para a qual CallbackRoutine aponta quando a operação de E/S for concluída. Esse código indica apenas que a operação foi iniciada.
STATUS_FLT_IO_COMPLETE A operação foi concluída pela rotina de retorno de chamada de pré-operação do driver de minifiltro cujas instâncias estão anexadas abaixo da instância inicial.

Comentários

Um driver de minifiltro chama FltPerformAsynchronousIo para iniciar uma operação de E/S assíncrona depois de chamar FltAllocateCallbackData para alocar uma estrutura de dados de retorno de chamada para a operação.

FltPerformAsynchronousIo envia a operação de E/S somente para as instâncias de driver de minifiltro anexadas abaixo da instância inicial (especificada no parâmetro Instance para FltAllocateCallbackData) e o sistema de arquivos. Os drivers de minifiltro anexados acima da instância especificada não recebem a operação de E/S.

Os drivers de minifiltro só podem iniciar operações de E/S baseadas em IRP. Eles não podem iniciar operações de retorno de chamada de E/S ou FSFilter (filtro do sistema de arquivos) rápidas.

Os drivers de minifiltro devem usar FltPerformAsynchronousIo somente para operações de E/S assíncronas para as quais rotinas como a seguinte não podem ser usadas:

IRP_MJ_CREATE solicitações não podem ser executadas de forma assíncrona.

A estrutura de dados de retorno de chamada (FLT_CALLBACK_DATA) pode ser liberada ou reutilizado a qualquer momento após a rotina de retorno de chamada para a qual CallbackRoutine aponta ter sido chamada. O chamador pode liberar a estrutura de dados de retorno de chamada chamando FltFreeCallbackData ou prepará-la para reutilização chamando FltReuseCallbackData.

Observação

STATUS_SUCCESS e STATUS_FLT_IO_COMPLETE indicam que a operação de E/S foi concluída, mas não indicam o status final da operação de E/S. Para determinar a operação real status retornada pelos drivers de minifiltro subjacentes, drivers de filtro e sistema de arquivos, a CallbackRoutine deve examinar o membro IoStatus da estrutura de dados de retorno de chamada recebida no parâmetro CallbackContext do CallbackRoutine.

Como o Gerenciador de Filtros sempre chama a rotina de retorno de chamada para a qual CallbackRoutine aponta, mesmo quando FltPerformAsynchronousIo falha, o driver de minifiltro pode executar as operações de liberação ou reutilização diretamente na rotina de retorno de chamada.

O chamador de FltPerformAsynchronousIo pode estar em execução em IRQL <= APC_LEVEL se o sinalizador IRP_PAGING_IO estiver definido no membro IrpFlags da estrutura FLT_IO_PARAMETER_BLOCK da operação. (Esse sinalizador só é válido para operações de IRP_MJ_READ, IRP_MJ_WRITE, IRP_MJ_QUERY_INFORMATION e IRP_MJ_SET_INFORMATION.) Caso contrário, o chamador deverá estar em execução no IRQL PASSIVE_LEVEL.

Requisitos

Requisito Valor
Plataforma de Destino Universal
Cabeçalho fltkernel.h (inclua Fltkernel.h)
Biblioteca FltMgr.lib
DLL Fltmgr.sys
IRQL Consulte a seção Observações.

Confira também

FLT_CALLBACK_DATA

FLT_IO_PARAMETER_BLOCK

FltAllocateCallbackData

FltFreeCallbackData

FltPerformSynchronousIo

FltReuseCallbackData

IRP_MJ_CREATE

PFLT_COMPLETED_ASYNC_IO_CALLBACK

PFLT_POST_OPERATION_CALLBACK