Compartilhar via


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:

  1. Defina o sinalizador FILE_OPEN_REPARSE_POINT no bloco de parâmetros de E/S da estrutura de dados de retorno de chamada.

  2. Chame FltSetCallbackDataDirty.

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

Confira também

FLT_CALLBACK_DATA

FLT_IS_FASTIO_OPERATION

FLT_IS_FS_FILTER_OPERATION

FLT_IS_IRP_OPERATION

FLT_IS_REISSUED_IO

FLT_PARAMETERS para IRP_MJ_CREATE

FltCancelFileOpen

FltIsOperationSynchronous

FltPerformSynchronousIo

FltReuseCallbackData

FltSetCallbackDataDirty

IRP_MJ_CLOSE

IRP_MJ_CREATE

PFLT_POST_OPERATION_CALLBACK

PFLT_PRE_OPERATION_CALLBACK