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 di istanza opaco 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 postperation (PFLT_POST_OPERATION_CALLBACK) per eseguire nuovamente una richiesta di I/O sincronizzata. In genere chiama FltReissueSynchronousIo da una routine di callback di post-esecuzione 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 minifilter tramite chiamate alle routine FltAllocateCallbackData e FltPerformSynchronousIo . In questo caso, non importa se chiama FltReissueSynchronousIo in una routine di callback di post-esecuzione o all'esterno del contesto di una routine di callback dell'operazione. Per le chiamate esterne al contesto di una routine di callback di post-operazione, è consigliabile usare invece le routine FltReuseCallbackData e FltPerformSynchronousIo .

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

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

  1. Impostare il flag FILE_OPEN_REPARSE_POINT nel blocco di parametri di 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 associate sotto l'istanza di avvio (specificata nel parametro InitiatingInstance ) e al file system. Le istanze del driver minifilter collegate sopra l'istanza di avvio non ricevono la richiesta di I/O ristampata.

È possibile eseguire nuovamente solo le operazioni di I/O sincronizzate. Per fornire al driver la possibilità di eseguire nuovamente, chiamando FltReissueSynchronousIo nella routine di callback di postoperazione, 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 eseguire nuovamente solo operazioni di I/O basate su IRP. Le operazioni di I/O veloci e le operazioni di callback del filtro file system (FSFilter) non possono essere ristampate. Per determinare se un'operazione di I/O è basata su IRP, usare 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 membro Flags 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 FltReissueSynchronousIo viene chiamato 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 minifilter eseguono nuovamente la creazione nel callback post-creazione, non devono rilasciare e impostare il buffer associato al relativo punto di reparse (campo TagData in CallbackData) su NULL. In alternativa, Gestione filtri rilascia e imposta il buffer su NULL.

Requisiti

Requisito Valore
Client minimo supportato Windows 2000 Update Rollup 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 (L'I/O non di paging può essere ristampato solo in PASSIVE_LEVEL)

Vedi 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