Compartilhar via


Função FltDoCompletionProcessingWhenSafe (fltkernel.h)

Se for seguro fazer isso, a função FltDoCompletionProcessingWhenSafe executará uma rotina de retorno de chamada pós-operação do driver de minifiltro.

Sintaxe

BOOLEAN FLTAPI FltDoCompletionProcessingWhenSafe(
  [in]           PFLT_CALLBACK_DATA           Data,
  [in]           PCFLT_RELATED_OBJECTS        FltObjects,
  [in, optional] PVOID                        CompletionContext,
  [in]           FLT_POST_OPERATION_FLAGS     Flags,
  [in]           PFLT_POST_OPERATION_CALLBACK SafePostCallback,
  [out]          PFLT_POSTOP_CALLBACK_STATUS  RetPostOperationStatus
);

Parâmetros

[in] Data

Ponteiro para a estrutura de dados de retorno de chamada (FLT_CALLBACK_DATA) para a operação de E/S. Normalmente, isso é o mesmo que o ponteiro Data que foi passado para a rotina de retorno de chamada de postoperation (PFLT_POST_OPERATION_CALLBACK) que chamou FltDoCompletionProcessingWhenSafe.

[in] FltObjects

Ponteiro para a estrutura de objetos relacionados (FLT_RELATED_OBJECTS) para a operação de E/S. Normalmente, isso é o mesmo que o ponteiro FltObjects que foi passado para a rotina de retorno de chamada de postoperation que chamou FltDoCompletionProcessingWhenSafe.

[in, optional] CompletionContext

Ponteiro para informações de contexto fornecidas pelo chamador que serão passadas para a função de retorno de chamada especificada no parâmetro SafePostCallback .

[in] Flags

Máscara de bits de sinalizadores que especificam como o processamento de conclusão será executado. Normalmente, isso é o mesmo que o valor Flags que foi passado para a rotina de retorno de chamada de postoperation que chamou FltDoCompletionProcessingWhenSafe. Para obter mais informações, consulte a seção Comentários a seguir.

[in] SafePostCallback

Ponteiro para uma rotina de retorno de chamada do tipo PFLT_POST_OPERATION_CALLBACK fornecida pelo chamador que o sistema operacional chama quando é seguro fazê-lo.

[out] RetPostOperationStatus

Variável alocada pelo chamador que recebe o valor final status para a operação de E/S. Para obter mais informações sobre como esse parâmetro é definido, consulte a seção Comentários a seguir.

Retornar valor

FltDoCompletionProcessingWhenSafe retornará TRUE se o processamento de conclusão da operação de E/S puder ser executado imediatamente ou a operação de E/S tiver sido postada com êxito em um thread de trabalho; caso contrário, retornará FALSE.

Comentários

FltDoCompletionProcessingWhenSafe executa o SafePostCallback imediatamente se o chamador estiver em execução em IRQL <= APC_LEVEL. Caso contrário, se for seguro postar a operação em um thread de trabalho, o processamento SafePostCallback será adiado até que possa ser chamado em um contexto de thread em que IRQL <= APC_LEVEL.

Se o IRQL < DISPATCH_LEVEL:

  • FltDoCompletionProcessingWhenSafe chama imediatamente a rotina de retorno de chamada SafePostCallback .
  • O parâmetro RetPostOperationStatus recebe um valor FLT_POSTOP_CALLBACK_STATUS retornado por SafePostCallback.
  • FltDoCompletionProcessingWhenSafe retorna TRUE.

Se IRQL >= DISPATCH_LEVEL:

  • FltDoCompletionProcessingWhenSafe tenta postar a operação de E/S em um thread de trabalho e, em seguida, chamar a rotina SafePostCallback do thread de trabalho.
  • Se a operação de E/S puder ser postada com segurança:
    • O gerenciador de filtros define RetPostOperationStatus como FLT_POSTOP_MORE_PROCESSING_REQUIRED.
    • FltDoCompletionProcessingWhenSafe retorna TRUE.
  • Se a operação de E/S não pôde ser postada com segurança:
    • O gerenciador de filtros define RetPostOperationStatus como FLT_POSTOP_FINISHED_PROCESSING.
    • FltDoCompletionProcessingWhenSafe retorna FALSE.

FltDoCompletionProcessingWhenSafe só pode ser chamado para operações baseadas em IRP. Para determinar se a operação é baseada em IRP, use a macro FLT_IS_IRP_OPERATION .

FltDoCompletionProcessingWhenSafe não pode ser usado para após a conclusão de uma operação de E/S de paginação para um thread de trabalho.

FltDoCompletionProcessingWhenSafe só pode ser chamado a partir da rotina de retorno de chamada de postoperation (PFLT_POST_OPERATION_CALLBACK) de um driver de minifiltro. Observe que FltDoCompletionProcessingWhenSafe nunca deve ser chamado se o parâmetro Flags do retorno de chamada de postoperation tiver o FLTFL_POST_OPERATION_DRAINING bit definido.

Se um minifiltro chamar FltDoCompletionProcessingWhenSafe e o SafePostCallback for invocado em um thread de trabalho porque não é seguro invocá-lo no contexto de thread atual, o gerenciador de filtros retomará o processamento de conclusão, desde que o minifiltro não retorne FLT_POSTOP_MORE_PROCESSING_REQUIRED do SafePostCallback.

Se o minifiltro retornar FLT_POSTOP_MORE_PROCESSING_REQUIRED do SafePostCallback, o minifiltro deverá chamar FltCompletePendedPostOperation para retomar o processamento de conclusão.

Requisitos

Requisito Valor
Cliente mínimo com suporte Disponível no Pacote Cumulativo de Atualizações do Microsoft Windows 2000 1 para SP4, Windows XP SP2, Windows Server 2003 SP1 e sistemas operacionais posteriores. Não disponível no Windows 2000 SP4 e em sistemas operacionais anteriores.
Plataforma de Destino Universal
Cabeçalho fltkernel.h (inclua Fltkernel.h)
Biblioteca Fltmgr.lib
IRQL Qualquer um.

Confira também

FLT_CALLBACK_DATA

FLT_IS_IRP_OPERATION

FLT_RELATED_OBJECTS

FltCancelIo

FltCompletePendedPostOperation

PFLT_POST_OPERATION_CALLBACK