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

Valor de retorno

Nenhum

Observações

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 reemissão de 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 oFltReuseCallbackData e rotinas de FltPerformSynchronousIo.

O chamador pode modificar o conteúdo do bloco de parâmetros de E/S da estrutura de E/S da estruturaFLT_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. Chamar 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 de iniciação (especificada no parâmetro De Iniciação de) e ao sistema de arquivos. As instâncias de driver de minifiltro anexadas acima da instância de inicialização 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.

Nota

O driver de minifiltro não chama a rotinaFltIsOperationSynchronous 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 create (IRP_MJ_CREATE) que foi cancelada não pode ser relançada. Antes de chamar FltReissueSynchronousIo para uma operação de criação, os chamadores devem verificar o Flags membro do objeto de arquivo para a operação de criação. Se o sinalizador de 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 cancelada, o Gerenciador de Filtros falhará na solicitação de E/S relançada com STATUS_CANCELLED.

Nota

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 no CallbackData) como NULL. Em vez disso, o Gerenciador de Filtros libera e define o buffer como NULL para eles.

Requisitos

Requisito Valor
de cliente com suporte mínimo Pacote Cumulativo de Atualizações do Windows 2000 1 para SP4; Windows XP SP2
servidor com suporte mínimo Windows Server 2003 SP1
da Plataforma de Destino Universal
cabeçalho fltkernel.h (inclua FltKernel.h)
biblioteca FltMgr.lib
de DLL Fltmgr.sys
IRQL <= APC_LEVEL (E/S não paginação só pode ser relançada em PASSIVE_LEVEL)

Consulte 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