Partilhar 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 do 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 Flags valor 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 PFLT_POST_OPERATION_CALLBACKfornecida pelo chamador que o sistema operacional chama quando é seguro fazê-lo.

[out] RetPostOperationStatus

Variável alocada pelo chamador que recebe o valor de status final 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.

Valor de retorno

FltDoCompletionProcessingWhenSafe retorna VERDADEIRO 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, ele retornará FALSE .

Observações

FltDoCompletionProcessingWhenSafe executa a SafePostCallback imediatamente se o chamador estiver em execução no 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 imediatamente chama a rotina de retorno de chamada SafePostCallback.
  • O parâmetro RetPostOperationStatus recebe um valor FLT_POSTOP_CALLBACK_STATUS retornado por SafePostCallback.
  • FltDoCompletionProcessingWhenSafe retorna VERDADEIRO.

Se IRQL >= DISPATCH_LEVEL:

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

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

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

FltDoCompletionProcessingWhenSafe só pode ser chamado a partir da rotina de retorno de chamada de postoperação de um minifiltro driver (PFLT_POST_OPERATION_CALLBACK). Observe que FltDoCompletionProcessingWhenSafe nunca deve ser chamado se o parâmetro sinalizadores do retorno de chamada de postoperation tiver o FLTFL_POST_OPERATION_DRAINING conjunto de bits.

Se um minifiltro chamar FltDoCompletionProcessingWhenSafe e o SafePostCallback for invocado em um thread de trabalho porque não é seguro invocá-lo no contexto atual do thread, 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
de cliente com suporte mínimo Disponível no Microsoft Windows 2000 Update Rollup 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.
da Plataforma de Destino Universal
cabeçalho fltkernel.h (inclua Fltkernel.h)
biblioteca Fltmgr.lib
IRQL Qualquer.

Consulte também

FLT_CALLBACK_DATA

FLT_IS_IRP_OPERATION

FLT_RELATED_OBJECTS

FltCancelIo

FltCompletePendedPostOperation

PFLT_POST_OPERATION_CALLBACK