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. |