Função FltReissueSynchronousIo (fltkernel.h)
FltReissueSynchronousIo inicia uma nova operação de E/S síncrona que usa os parâmetros de uma operação de E/S sincronizada anteriormente.
Sintaxe
VOID FLTAPI FltReissueSynchronousIo(
[in] PFLT_INSTANCE InitiatingInstance,
[in] PFLT_CALLBACK_DATA CallbackData
);
Parâmetros
[in] InitiatingInstance
Um ponteiro de instância opaco para a instância do driver de minifiltro que está reutilizando a operação de E/S. Deve ser a mesma instância que iniciou a operação de E/S anterior. Esse parâmetro é necessário e não pode ser definido como NULL.
[in] CallbackData
Um ponteiro para a estrutura de dados de retorno de chamada (FLT_CALLBACK_DATA) de uma operação de E/S sincronizada anteriormente. Esse parâmetro é necessário e não pode ser definido como NULL.
Retornar valor
Nenhum
Comentários
Um driver de minifiltro chama FltReissueSynchronousIo de uma rotina de retorno de chamada de postoperation (PFLT_POST_OPERATION_CALLBACK) para reemissar uma solicitação de E/S sincronizada. Normalmente, ele chama FltReissueSynchronousIo de uma rotina de retorno de chamada de postoperation para reemissar uma operação com falha com parâmetros diferentes ou para lidar com um salto de nova análise. No entanto, ele também pode chamar FltReissueSynchronousIo para reemissar E/S que o driver de minifiltro gerou por meio de chamadas para as rotinas FltAllocateCallbackData e FltPerformSynchronousIo . Nessa situação, não importa se ele chama FltReissueSynchronousIo em uma rotina de retorno de chamada de postoperation ou fora do contexto de uma rotina de retorno de chamada de operação. Para chamadas fora do contexto de uma rotina de retorno de chamada de postoperation, considere usar as rotinas FltReuseCallbackData e FltPerformSynchronousIo .
O chamador pode modificar o conteúdo do bloco de parâmetros de E/S da estrutura de dados de retorno de chamada (FLT_CALLBACK_DATA) antes de relançar a solicitação de E/S. Se isso acontecer, ele deverá chamar FltSetCallbackDataDirty antes de chamar FltReissueSynchronousIo.
Por exemplo, se um driver de minifiltro usar pontos de nova análise e sua rotina de retorno de chamada pós-criação for chamada para uma operação de criação que retornou STATUS_REPARSE, o driver de minifiltro poderá reempresar a operação de criação para seus próprios pontos de nova análise. Nesse caso, o driver de minifiltro concluirá as seguintes etapas:
Defina o sinalizador FILE_OPEN_REPARSE_POINT no bloco de parâmetros de E/S da estrutura de dados de retorno de chamada.
Chame FltSetCallbackDataDirty.
Chame FltReissueSynchronousIo para reemissar a solicitação de criação.
O Gerenciador de Filtros envia a solicitação de E/S relançada somente para as instâncias de driver de minifiltro anexadas abaixo da instância inicial (especificada no parâmetro InitiatingInstance ) e para o sistema de arquivos. As instâncias do driver de minifiltro anexadas acima da instância inicial não recebem a solicitação de E/S relançada.
Somente operações de E/S sincronizadas podem ser relançadas. Para fornecer ao driver a capacidade de reemissão, chamando FltReissueSynchronousIo na rotina de retorno de chamada de postoperation, um driver de minifiltro deve retornar especificamente FLT_PREOP_SYNCHRONIZE na rotina de retorno de chamada de pré-operação.
Observação
O driver de minifiltro não chama a rotina FltIsOperationSynchronous para determinar se a rotina de retorno de chamada de pré-operação para essa operação retornou FLT_PREOP_SYNCHRONIZE. O driver de minifiltro chama FltIsOperationSynchronous para determinar se a operação em si é síncrona da perspectiva do gerente de E/S.
Somente operações de E/S baseadas em IRP podem ser relançadas. Operações de E/S rápidas e operações de retorno de chamada FSFilter (filtro do sistema de arquivos) não podem ser relançadas. Para determinar se uma operação de E/S é baseada em IRP, use a macro FLT_IS_IRP_OPERATION .
Uma operação de criação (IRP_MJ_CREATE) que foi cancelada não pode ser reemissada. Antes de chamar FltReissueSynchronousIo para uma operação de criação, os chamadores devem marcar o membro Flags do objeto de arquivo para a operação de criação. Se o sinalizador FO_FILE_OPEN_CANCELLED estiver definido, isso significa que a operação de criação foi cancelada e uma operação de fechamento (IRP_MJ_CLOSE) será emitida para esse objeto de arquivo. Se FltReissueSynchronousIo for chamado para uma operação de criação que foi cancelada, o Gerenciador de Filtros falhará na solicitação de E/S relançada com STATUS_CANCELLED.
Observação
Quando os drivers de minifiltro reemitem a criação no retorno de chamada pós-criação, eles não precisam liberar e definir o buffer associado ao ponto de nova análise (campo TagData em CallbackData) como NULL. Em vez disso, o Gerenciador de Filtros libera e define o buffer como NULL para eles.
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Pacote cumulativo cumulativo de atualizações do Windows 2000 1 para SP4; Windows XP SP2 |
Servidor mínimo com suporte | Windows Server 2003 SP1 |
Plataforma de Destino | Universal |
Cabeçalho | fltkernel.h (inclua FltKernel.h) |
Biblioteca | FltMgr.lib |
DLL | Fltmgr.sys |
IRQL | <= APC_LEVEL (A E/S não paginação só pode ser relançada em PASSIVE_LEVEL) |