Condividi tramite


Funzione FltReissueSynchronousIo (fltkernel.h)

FltReissueSynchronousIo avvia una nuova operazione di I/O sincrona che usa i parametri di un'operazione di I/O sincronizzata in precedenza.

Sintassi

VOID FLTAPI FltReissueSynchronousIo(
  [in] PFLT_INSTANCE      InitiatingInstance,
  [in] PFLT_CALLBACK_DATA CallbackData
);

Parametri

[in] InitiatingInstance

Puntatore a un'istanza opaca all'istanza del driver minifilter che esegue nuovamente l'operazione di I/O. Deve essere la stessa istanza che ha avviato l'operazione di I/O precedente. Questo parametro è obbligatorio e non può essere impostato su NULL.

[in] CallbackData

Puntatore alla struttura dei dati di callback (FLT_CALLBACK_DATA) da un'operazione di I/O sincronizzata in precedenza. Questo parametro è obbligatorio e non può essere impostato su NULL.

Valore restituito

Nessuno

Osservazioni

Un driver minifilter chiama FltReissueSynchronousIo da una routine di callback postoperatoria (PFLT_POST_OPERATION_CALLBACK) per eseguire nuovamente una richiesta di I/O sincronizzata. In genere chiama FltReissueSynchronousIo da una routine di callback di postoperazione per eseguire nuovamente un'operazione non riuscita con parametri diversi o per gestire un rimbalzo del reparse. Tuttavia, può anche chiamare FltReissueSynchronousIo per eseguire nuovamente l'I/O generato dal driver minifiltro tramite chiamate alle routine FltAllocateCallbackData e FltPerformSynchronousIo. In questo caso, non importa se chiama FltReissueSynchronousIo in una routine di callback di postperazione o all'esterno del contesto di una routine di callback dell'operazione. Per le chiamate all'esterno del contesto di una routine di callback postoperatoria, è consigliabile usare invece le routine FltReuseCallbackData e FltPerformSynchronousIo.

Il chiamante può modificare il contenuto dei dati di callback (FLT_CALLBACK_DATA) blocco di parametri di I/O della struttura prima di eseguire nuovamente la richiesta di I/O. In caso affermativo, deve chiamare FltSetCallbackDataDirty prima di chiamare FltReissueSynchronousIo.

Ad esempio, se un driver minifiltro usa reparse points e viene chiamata la routine di callback post-creazione per un'operazione di creazione che ha restituito STATUS_REPARSE, il driver minifiltro può eseguire nuovamente l'operazione di creazione per i propri punti di analisi. In questo caso, il driver minifiltro completerà i passaggi seguenti:

  1. Impostare il flag FILE_OPEN_REPARSE_POINT nel blocco di parametri I/O della struttura dei dati di callback.

  2. Chiamare FltSetCallbackDataDirty.

  3. Chiamare FltReissueSynchronousIo per eseguire nuovamente la richiesta di creazione.

Gestione filtri invia la richiesta di I/O ristampata solo alle istanze del driver minifilter collegate sotto l'istanza di avvio (specificata nel parametro AvvioInstance) e al file system. Le istanze del driver minifilter collegate sopra l'istanza di avvio non ricevono la richiesta di I/O riemessa.

È possibile riemettere nuovamente solo le operazioni di I/O sincronizzate. Per fornire al driver la possibilità di eseguire nuovamente l'operazione, chiamando FltReissueSynchronousIo nella routine di callback postoperation, un driver minifilter deve restituire in modo specifico FLT_PREOP_SYNCHRONIZE nella routine di callback di preoperazione.

Nota

Il driver minifilter non chiama la routine FltIsOperationSynchronous per determinare se la routine di callback di preoperazione per questa operazione ha restituito FLT_PREOP_SYNCHRONIZE. Il driver minifilter chiama FltIsOperationSynchronous per determinare se l'operazione stessa è sincrona dal punto di vista del gestore di I/O.

È possibile riemettere nuovamente solo le operazioni di I/O basate su IRP. Non è possibile riemettere nuovamente le operazioni di callback di I/O veloci e di filtro del file system (FSFilter). Per determinare se un'operazione di I/O è basata su IRP, utilizzare la macro FLT_IS_IRP_OPERATION.

Non è possibile eseguire nuovamente un'operazione di creazione (IRP_MJ_CREATE) annullata. Prima di chiamare FltReissueSynchronousIo per un'operazione di creazione, i chiamanti devono controllare il Flag membro dell'oggetto file per l'operazione di creazione. Se il flag FO_FILE_OPEN_CANCELLED è impostato, significa che l'operazione di creazione è stata annullata e verrà eseguita un'operazione di chiusura (IRP_MJ_CLOSE) per questo oggetto file. Se viene chiamato FltReissueSynchronousIo per un'operazione di creazione annullata, Gestione filtri non riesce a eseguire nuovamente la richiesta di I/O con STATUS_CANCELLED.

Nota

Quando i driver minifiltro generano nuovamente la creazione nel callback di post-creazione, non devono rilasciare e impostare il buffer associato al punto reparse (campo TagData in CallbackData) su NULL. Gestione filtri rilascia e imposta invece il buffer su NULL.

Fabbisogno

Requisito Valore
client minimo supportato Aggiornamento cumulativo di Windows 2000 1 per SP4; Windows XP SP2
server minimo supportato Windows Server 2003 SP1
piattaforma di destinazione Universale
intestazione fltkernel.h (include FltKernel.h)
libreria FltMgr.lib
dll Fltmgr.sys
IRQL <= APC_LEVEL (le operazioni di I/O non di paging possono essere ristampate solo in PASSIVE_LEVEL)

Vedere anche

FLT_CALLBACK_DATA

FLT_IS_FASTIO_OPERATION

FLT_IS_FS_FILTER_OPERATION

FLT_IS_IRP_OPERATION

FLT_IS_REISSUED_IO

FLT_PARAMETERS per IRP_MJ_CREATE

FltCancelFileOpen

FltIsOperationSynchronous

FltPerformSynchronousIo

FltReuseCallbackData

FltSetCallbackDataDirty

IRP_MJ_CLOSE

IRP_MJ_CREATE

PFLT_POST_OPERATION_CALLBACK

PFLT_PRE_OPERATION_CALLBACK