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