Pendente de uma operação de E/S em uma rotina de retorno de chamada postoperation
A rotina de retorno de chamada do postoperation de um driver de minifiltro pode pendente de uma operação de E/S executando as seguintes etapas:
Chamar FltAllocateDeferredIoWorkItem para alocar um item de trabalho para a operação de E/S.
Chamar FltQueueDeferredIoWorkItem para postar a operação de E/S em uma fila de trabalho do sistema.
Retornando FLT_POSTOP_MORE_PROCESSING_REQUIRED.
Observe que a chamada para FltQueueDeferredIoWorkItem falhará se qualquer uma das seguintes condições for verdadeira:
A operação não é uma operação de E/S baseada em IRP.
A operação é uma operação de E/S de paginação.
O campo TopLevelIrp do thread atual não é NULL. (Para obter mais informações sobre como localizar o valor desse campo, consulte IoGetTopLevelIrp.)
A instância de destino para a operação de E/S está sendo interrompida. (O gerenciador de filtros indica essa situação definindo o sinalizador FLTFL_POST_OPERATION_DRAINING no parâmetro de entrada Flags para a rotina de retorno de chamada postoperation.)
Os drivers de minifiltro devem estar preparados para lidar com essa falha. Se o driver de minifiltro não puder lidar com essas falhas, considere usar a técnica descrita em Retornando FLT_PREOP_SYNCHRONIZE em vez de aguardar a operação de E/S.
Depois que a rotina de retorno de chamada postoperation do driver de minifiltro retornar FLT_POSTOP_MORE_PROCESSING_REQUIRED, o gerenciador de filtros não executará nenhum processamento de conclusão adicional para a operação de E/S até que a rotina de trabalho do driver de minifiltro chame FltCompletePendedPostOperation para retornar o controle da operação para o gerenciador de filtros. O gerenciador de filtros não executará nenhum processamento adicional nessa situação, mesmo que a rotina de trabalho defina um valor NTSTATUS de falha no campo IoStatus.Status da estrutura de dados de retorno de chamada para a operação.
A rotina de trabalho que desativa e executa o processamento de conclusão para a operação de E/S deve chamar FltCompletePendedPostOperation para retornar o controle da operação para o gerenciador de filtros.